Passed
Push — master ( 3e8e14...77675a )
by Yo
02:50
created

ConfigurationUpdater   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 5
dl 0
loc 101
ccs 64
cts 64
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 11 1
A update() 0 11 2
A merge() 0 53 1
1
<?php
2
namespace Yoanm\ComposerConfigManager\Application\Updater;
3
4
use Yoanm\ComposerConfigManager\Domain\Model\Configuration;
5
6
class ConfigurationUpdater
7
{
8
    /** @var PlainValueUpdater */
9
    private $plainValueUpdater;
10
    /** @var KeywordListUpdater */
11
    private $keywordListUpdater;
12
    /** @var ListUpdater */
13
    private $listUpdater;
14
    /** @var AuthorListUpdater */
15
    private $authorListUpdater;
16
17 1
    public function __construct(
18
        PlainValueUpdater $plainValueUpdater,
19
        KeywordListUpdater $keywordListUpdater,
20
        ListUpdater $listUpdater,
21
        AuthorListUpdater $authorListUpdater
22
    ) {
23 1
        $this->plainValueUpdater = $plainValueUpdater;
24 1
        $this->keywordListUpdater = $keywordListUpdater;
25 1
        $this->listUpdater = $listUpdater;
26 1
        $this->authorListUpdater = $authorListUpdater;
27 1
    }
28
29
    /**
30
     * @param Configuration[] $configurationList
31
     *
32
     * @return Configuration
33
     */
34 1
    public function update(array $configurationList)
35
    {
36 1
        $newConfiguration = array_pop($configurationList);
37
38 1
        while (count($configurationList) > 0) {
39 1
            $baseConfiguration = array_pop($configurationList);
40 1
            $newConfiguration = $this->merge($baseConfiguration, $newConfiguration);
41 1
        }
42
43 1
        return $newConfiguration;
44
    }
45
46
47
    /**
48
     * @param Configuration $baseConfiguration
49
     * @param Configuration $newConfiguration
50
     *
51
     * @return Configuration
52
     */
53 1
    public function merge(Configuration $baseConfiguration, Configuration $newConfiguration)
54
    {
55 1
        return new Configuration(
56 1
            $this->plainValueUpdater->update(
57 1
                $newConfiguration->getPackageName(),
58 1
                $baseConfiguration->getPackageName()
59 1
            ),
60 1
            $this->plainValueUpdater->update(
61 1
                $newConfiguration->getType(),
62 1
                $baseConfiguration->getType()
63 1
            ),
64 1
            $this->plainValueUpdater->update(
65 1
                $newConfiguration->getLicense(),
66 1
                $baseConfiguration->getLicense()
67 1
            ),
68 1
            $this->plainValueUpdater->update(
69 1
                $newConfiguration->getPackageVersion(),
70 1
                $baseConfiguration->getPackageVersion()
71 1
            ),
72 1
            $this->plainValueUpdater->update(
73 1
                $newConfiguration->getDescription(),
74 1
                $baseConfiguration->getDescription()
75 1
            ),
76 1
            $this->keywordListUpdater->update(
77 1
                $newConfiguration->getKeywordList(),
78 1
                $baseConfiguration->getKeywordList()
79 1
            ),
80 1
            $this->authorListUpdater->update($newConfiguration->getAuthorList(), $baseConfiguration->getAuthorList()),
81 1
            $this->listUpdater->update(
82 1
                $newConfiguration->getProvidedPackageList(),
83 1
                $baseConfiguration->getProvidedPackageList()
84 1
            ),
85 1
            $this->listUpdater->update(
86 1
                $newConfiguration->getSuggestedPackageList(),
87 1
                $baseConfiguration->getSuggestedPackageList()
88 1
            ),
89 1
            $this->listUpdater->update($newConfiguration->getSupportList(), $baseConfiguration->getSupportList()),
90 1
            $this->listUpdater->update($newConfiguration->getAutoloadList(), $baseConfiguration->getAutoloadList()),
91 1
            $this->listUpdater->update(
92 1
                $newConfiguration->getAutoloadDevList(),
93 1
                $baseConfiguration->getAutoloadDevList()
94 1
            ),
95 1
            $this->listUpdater->update(
96 1
                $newConfiguration->getRequiredPackageList(),
97 1
                $baseConfiguration->getRequiredPackageList()
98 1
            ),
99 1
            $this->listUpdater->update(
100 1
                $newConfiguration->getRequiredDevPackageList(),
101 1
                $baseConfiguration->getRequiredDevPackageList()
102 1
            ),
103 1
            $this->listUpdater->update($newConfiguration->getScriptList(), $baseConfiguration->getScriptList())
104 1
        );
105
    }
106
}
107