Completed
Push — master ( f8aac3...6e7b55 )
by Sebastian
07:15
created

AmazonS3v3   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 65
Duplicated Lines 7.69 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 5
dl 5
loc 65
ccs 19
cts 19
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
B collectBackups() 5 19 6
A getPrefix() 0 6 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
namespace phpbu\App\Backup\Collector;
3
4
use Aws\S3\S3Client;
5
use phpbu\App\Backup\Collector;
6
use phpbu\App\Backup\File\AmazonS3v3 as AwsFile;
7
use phpbu\App\Backup\Path;
8
use phpbu\App\Backup\Target;
9
use phpbu\App\Util;
10
11
/**
12
 * AmazonS3v3 class.
13
 *
14
 * @package    phpbu
15
 * @subpackage Backup
16
 * @author     Sebastian Feldmann <[email protected]>
17
 * @author     Vitaly Baev <[email protected]>
18
 * @copyright  Sebastian Feldmann <[email protected]>
19
 * @license    https://opensource.org/licenses/MIT The MIT License (MIT)
20
 * @link       http://phpbu.de/
21
 * @since      Class available since Release 5.1.0
22
 */
23
class AmazonS3v3 extends Remote implements Collector
24
{
25
    /**
26
     * @var \Aws\S3\S3Client
27
     */
28
    protected $client;
29
30
    /**
31
     * Amazon S3 bucket name
32
     *
33
     * @var string
34
     */
35
    protected $bucket;
36
37
    /**
38
     * Amazon S3 constructor.
39
     *
40
     * @param \phpbu\App\Backup\Target $target
41
     * @param \phpbu\App\Backup\Path   $path
42
     * @param \Aws\S3\S3Client         $client
43
     * @param string                   $bucket
44
     */
45
    public function __construct(Target $target, Path $path, S3Client $client, string $bucket)
46 1
    {
47
        $this->setUp($target, $path);
48 1
        $this->client = $client;
49 1
        $this->bucket = $bucket;
50 1
    }
51 1
52 1
    /**
53
     * Collect all created backups.
54
     */
55
    protected function collectBackups()
56
    {
57
        $result = $this->client->listObjects([
58
            'Bucket' => $this->bucket,
59 1
            'Prefix' => $this->getPrefix($this->path->getPathThatIsNotChanging()),
60
        ]);
61 1
62 1
        if (!isset($result['Contents']) || !$result['Contents'] || !is_array($result['Contents'])) {
63 1
            return;
64
        }
65
66 1
        foreach ($result['Contents'] as $object) {
67 1 View Code Duplication
            if ($this->isFileMatch($object['Key'])) {
68
                $file                = new AwsFile($this->client, $this->bucket, $object);
69
                $index               = $this->getFileIndex($file);
70 1
                $this->files[$index] = $file;
71
            }
72 1
        }
73 1
    }
74
75 1
    /**
76 1
     * Return prefix for querying remote files and folders
77 1
     *
78
     * @param string $path
79
     * @return string
80
     */
81 1
    protected function getPrefix($path): string
82
    {
83
        $prefix = Util\Path::withoutLeadingSlash($path);
84
        $prefix = $prefix ? Util\Path::withTrailingSlash($prefix) : '';
85
        return $prefix;
86
    }
87
}
88