ConfigurationNormalizer   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 161
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 7
dl 0
loc 161
ccs 81
cts 81
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 15 1
B normalize() 0 97 1
A appendIfNotEmpty() 0 8 2
A appendIfDefined() 0 8 2
1
<?php
2
namespace Yoanm\ComposerConfigManager\Application\Serializer\Normalizer;
3
4
use Yoanm\ComposerConfigManager\Domain\Model\Configuration;
5
use Yoanm\ComposerConfigManager\Domain\Model\ConfigurationFile;
6
7
class ConfigurationNormalizer
8
{
9
    /** @var AuthorListNormalizer */
10
    private $authorListNormalizer;
11
    /** @var PackageListNormalizer */
12
    private $packageListNormalizer;
13
    /** @var SuggestedPackageListNormalizer */
14
    private $suggestedPackageListNormalizer;
15
    /** @var SupportListNormalizer */
16
    private $supportListNormalizer;
17
    /** @var AutoloadListNormalizer */
18
    private $autoloadListNormalizer;
19
    /** @var ScriptListNormalizer */
20
    private $scriptListNormalizer;
21
22 4
    public function __construct(
23
        AuthorListNormalizer $authorListNormalizer,
24
        PackageListNormalizer $packageListNormalizer,
25
        SuggestedPackageListNormalizer $suggestedPackageListNormalizer,
26
        SupportListNormalizer $supportListNormalizer,
27
        AutoloadListNormalizer $autoloadListNormalizer,
28
        ScriptListNormalizer $scriptListNormalizer
29
    ) {
30 4
        $this->authorListNormalizer = $authorListNormalizer;
31 4
        $this->packageListNormalizer = $packageListNormalizer;
32 4
        $this->suggestedPackageListNormalizer = $suggestedPackageListNormalizer;
33 4
        $this->supportListNormalizer = $supportListNormalizer;
34 4
        $this->autoloadListNormalizer = $autoloadListNormalizer;
35 4
        $this->scriptListNormalizer = $scriptListNormalizer;
36 4
    }
37
38 4
    public function normalize(Configuration $configuration)
39
    {
40 4
        $normalizedConfiguration = [];
41
42
        // name
43 4
        $normalizedConfiguration = $this->appendIfDefined(
44 4
            $normalizedConfiguration,
45 4
            $configuration->getPackageName(),
46
            ConfigurationFile::KEY_NAME
47 4
        );
48
        // type
49 4
        $normalizedConfiguration = $this->appendIfDefined(
50 4
            $normalizedConfiguration,
51 4
            $configuration->getType(),
52
            ConfigurationFile::KEY_TYPE
53 4
        );
54
        // license
55 4
        $normalizedConfiguration = $this->appendIfDefined(
56 4
            $normalizedConfiguration,
57 4
            $configuration->getLicense(),
58
            ConfigurationFile::KEY_LICENSE
59 4
        );
60
        // package version
61 4
        $normalizedConfiguration = $this->appendIfDefined(
62 4
            $normalizedConfiguration,
63 4
            $configuration->getPackageVersion(),
64
            ConfigurationFile::KEY_VERSION
65 4
        );
66
        // description
67 4
        $normalizedConfiguration = $this->appendIfDefined(
68 4
            $normalizedConfiguration,
69 4
            $configuration->getDescription(),
70
            ConfigurationFile::KEY_DESCRIPTION
71 4
        );
72
        // keywords
73 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
74 4
            $normalizedConfiguration,
75 4
            $configuration->getKeywordList(),
76
            ConfigurationFile::KEY_KEYWORDS
77 4
        );
78
        // authors
79 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
80 4
            $normalizedConfiguration,
81 4
            $this->authorListNormalizer->normalize($configuration->getAuthorList()),
82
            ConfigurationFile::KEY_AUTHORS
83 4
        );
84
        // provide
85 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
86 4
            $normalizedConfiguration,
87 4
            $this->packageListNormalizer->normalize($configuration->getProvidedPackageList()),
88
            ConfigurationFile::KEY_PROVIDE
89 4
        );
90
        // suggest
91 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
92 4
            $normalizedConfiguration,
93 4
            $this->suggestedPackageListNormalizer->normalize($configuration->getSuggestedPackageList()),
94
            ConfigurationFile::KEY_SUGGEST
95 4
        );
96
        // support
97 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
98 4
            $normalizedConfiguration,
99 4
            $this->supportListNormalizer->normalize($configuration->getSupportList()),
100
            ConfigurationFile::KEY_SUPPORT
101 4
        );
102
        // require
103 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
104 4
            $normalizedConfiguration,
105 4
            $this->packageListNormalizer->normalize($configuration->getRequiredPackageList()),
106
            ConfigurationFile::KEY_REQUIRE
107 4
        );
108
        // require-dev
109 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
110 4
            $normalizedConfiguration,
111 4
            $this->packageListNormalizer->normalize($configuration->getRequiredDevPackageList()),
112
            ConfigurationFile::KEY_REQUIRE_DEV
113 4
        );
114
        // autoload
115 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
116 4
            $normalizedConfiguration,
117 4
            $this->autoloadListNormalizer->normalize($configuration->getAutoloadList()),
118
            ConfigurationFile::KEY_AUTOLOAD
119 4
        );
120
        // autoload-dev
121 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
122 4
            $normalizedConfiguration,
123 4
            $this->autoloadListNormalizer->normalize($configuration->getAutoloadDevList()),
124
            ConfigurationFile::KEY_AUTOLOAD_DEV
125 4
        );
126
        // script
127 4
        $normalizedConfiguration = $this->appendIfNotEmpty(
128 4
            $normalizedConfiguration,
129 4
            $this->scriptListNormalizer->normalize($configuration->getScriptList()),
130
            ConfigurationFile::KEY_SCRIPTS
131 4
        );
132
133 4
        return array_merge($normalizedConfiguration, $configuration->getUnmanagedPropertyList());
134
    }
135
136
    /**
137
     * @param array  $normalizedConfiguration
138
     * @param array  $list
139
     * @param string $key
140
     *
141
     * @return array
142
     */
143 4
    protected function appendIfNotEmpty(array $normalizedConfiguration, array $list, $key)
144
    {
145 4
        if (count($list)) {
146 2
            $normalizedConfiguration[$key] = $list;
147 2
        }
148
149 4
        return $normalizedConfiguration;
150
    }
151
152
    /**
153
     * @param array  $normalizedConfiguration
154
     * @param string $value
155
     * @param string $key
156
     *
157
     * @return array
158
     */
159 4
    protected function appendIfDefined(array $normalizedConfiguration, $value, $key)
160
    {
161 4
        if ($value) {
162 4
            $normalizedConfiguration[$key] = $value;
163 4
        }
164
165 4
        return $normalizedConfiguration;
166
    }
167
}
168