ConfigurationFileUpdater::merge()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 11
cts 11
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 2
crap 1
1
<?php
2
namespace Yoanm\ComposerConfigManager\Application\Updater;
3
4
use Yoanm\ComposerConfigManager\Domain\Model\Configuration;
5
use Yoanm\ComposerConfigManager\Domain\Model\ConfigurationFile;
6
7
class ConfigurationFileUpdater
8
{
9
    /** @var PlainValueUpdater */
10
    private $plainValueUpdater;
11
    /** @var KeywordListUpdater */
12
    private $keywordListUpdater;
13
    /** @var ListUpdater */
14
    private $listUpdater;
15
    /** @var AuthorListUpdater */
16
    private $authorListUpdater;
17
18 1
    public function __construct(
19
        PlainValueUpdater $plainValueUpdater,
20
        KeywordListUpdater $keywordListUpdater,
21
        ListUpdater $listUpdater,
22
        AuthorListUpdater $authorListUpdater
23
    ) {
24 1
        $this->plainValueUpdater = $plainValueUpdater;
25 1
        $this->keywordListUpdater = $keywordListUpdater;
26 1
        $this->listUpdater = $listUpdater;
27 1
        $this->authorListUpdater = $authorListUpdater;
28 1
    }
29
30
    /**
31
     * @param ConfigurationFile[] $configurationFileList
32
     *
33
     * @return ConfigurationFile
34
     */
35 1
    public function update(array $configurationFileList)
36
    {
37 1
        $newConfigurationFile = array_pop($configurationFileList);
38 1
        while (($baseConfiguration = array_pop($configurationFileList)) instanceof ConfigurationFile) {
39 1
            $newConfigurationFile = $this->merge($baseConfiguration, $newConfigurationFile);
40 1
        }
41
42 1
        return $newConfigurationFile;
43
    }
44
45
46
    /**
47
     * @param ConfigurationFile $baseConfigurationFile
48
     * @param ConfigurationFile $newConfigurationFile
49
     *
50
     * @return ConfigurationFile
51
     */
52 1
    public function merge(ConfigurationFile $baseConfigurationFile, ConfigurationFile $newConfigurationFile)
53
    {
54 1
        return new ConfigurationFile(
55 1
            $this->mergeConfiguration(
56 1
                $baseConfigurationFile->getConfiguration(),
57 1
                $newConfigurationFile->getConfiguration()
58 1
            ),
59 1
            $this->mergeKeyList(
60 1
                $baseConfigurationFile->getKeyList(),
61 1
                $newConfigurationFile->getKeyList()
62 1
            )
63 1
        );
64
    }
65
66 1
    protected function mergeConfiguration(Configuration $baseConfiguration, Configuration $newConfiguration)
67
    {
68 1
        return new Configuration(
69 1
            $this->plainValueUpdater->update(
70 1
                $newConfiguration->getPackageName(),
71 1
                $baseConfiguration->getPackageName()
72 1
            ),
73 1
            $this->plainValueUpdater->update(
74 1
                $newConfiguration->getType(),
75 1
                $baseConfiguration->getType()
76 1
            ),
77 1
            $this->plainValueUpdater->update(
78 1
                $newConfiguration->getLicense(),
79 1
                $baseConfiguration->getLicense()
80 1
            ),
81 1
            $this->plainValueUpdater->update(
82 1
                $newConfiguration->getPackageVersion(),
83 1
                $baseConfiguration->getPackageVersion()
84 1
            ),
85 1
            $this->plainValueUpdater->update(
86 1
                $newConfiguration->getDescription(),
87 1
                $baseConfiguration->getDescription()
88 1
            ),
89 1
            $this->keywordListUpdater->update(
90 1
                $newConfiguration->getKeywordList(),
91 1
                $baseConfiguration->getKeywordList()
92 1
            ),
93 1
            $this->authorListUpdater->update($newConfiguration->getAuthorList(), $baseConfiguration->getAuthorList()),
94 1
            $this->listUpdater->update(
95 1
                $newConfiguration->getProvidedPackageList(),
96 1
                $baseConfiguration->getProvidedPackageList()
97 1
            ),
98 1
            $this->listUpdater->update(
99 1
                $newConfiguration->getSuggestedPackageList(),
100 1
                $baseConfiguration->getSuggestedPackageList()
101 1
            ),
102 1
            $this->listUpdater->update($newConfiguration->getSupportList(), $baseConfiguration->getSupportList()),
103 1
            $this->listUpdater->update($newConfiguration->getAutoloadList(), $baseConfiguration->getAutoloadList()),
104 1
            $this->listUpdater->update(
105 1
                $newConfiguration->getAutoloadDevList(),
106 1
                $baseConfiguration->getAutoloadDevList()
107 1
            ),
108 1
            $this->listUpdater->update(
109 1
                $newConfiguration->getRequiredPackageList(),
110 1
                $baseConfiguration->getRequiredPackageList()
111 1
            ),
112 1
            $this->listUpdater->update(
113 1
                $newConfiguration->getRequiredDevPackageList(),
114 1
                $baseConfiguration->getRequiredDevPackageList()
115 1
            ),
116 1
            $this->listUpdater->update($newConfiguration->getScriptList(), $baseConfiguration->getScriptList()),
117 1
            $this->listUpdater->updateRaw(
118 1
                $newConfiguration->getUnmanagedPropertyList(),
119 1
                $baseConfiguration->getUnmanagedPropertyList()
120 1
            )
121 1
        );
122
    }
123
124 1
    protected function mergeKeyList(array $baseKeyList, array $newKeyList)
125
    {
126 1
        return array_values(array_unique(array_merge($baseKeyList, $newKeyList)));
127
    }
128
}
129