Passed
Push — master ( 2aad05...4fe473 )
by Yo
02:45
created

ConfigurationDenormalizer   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 138
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 2
dl 0
loc 138
ccs 79
cts 79
cp 1
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 15 1
A denormalize() 0 65 1
A getNormalizedOrDefault() 0 4 2
A valueOrNull() 0 4 2
A extractKeywordList() 0 6 2
1
<?php
2
namespace Yoanm\ComposerConfigManager\Application\Serializer\Normalizer;
3
4
use Yoanm\ComposerConfigManager\Domain\Model\Configuration;
5
6
/**
7
 * Class ConfigurationDenormalizer
8
 */
9
class ConfigurationDenormalizer implements DenormalizerInterface
10
{
11
    /** @var AuthorListNormalizer */
12
    private $authorListNormalizer;
13
    /** @var PackageListNormalizer */
14
    private $packageListNormalizer;
15
    /** @var SuggestedPackageListNormalizer */
16
    private $suggestedPackageListNormalizer;
17
    /** @var SupportListNormalizer */
18
    private $supportListNormalizer;
19
    /** @var AutoloadListNormalizer */
20
    private $autoloadListNormalizer;
21
    /** @var ScriptListNormalizer */
22
    private $scriptListNormalizer;
23
24 2
    public function __construct(
25
        AuthorListNormalizer $authorListNormalizer,
26
        PackageListNormalizer $packageListNormalizer,
27
        SuggestedPackageListNormalizer $suggestedPackageListNormalizer,
28
        SupportListNormalizer $supportListNormalizer,
29
        AutoloadListNormalizer $autoloadListNormalizer,
30
        ScriptListNormalizer $scriptListNormalizer
31
    ) {
32 2
        $this->authorListNormalizer = $authorListNormalizer;
33 2
        $this->packageListNormalizer = $packageListNormalizer;
34 2
        $this->suggestedPackageListNormalizer = $suggestedPackageListNormalizer;
35 2
        $this->supportListNormalizer = $supportListNormalizer;
36 2
        $this->autoloadListNormalizer = $autoloadListNormalizer;
37 2
        $this->scriptListNormalizer = $scriptListNormalizer;
38 2
    }
39
40
    /**
41
     * @param array $configuration
42
     *
43
     * @return Configuration
44
     */
45 2
    public function denormalize(array $configuration)
46
    {
47 2
        return new Configuration(
48 2
            $this->valueOrNull($configuration, ConfigurationNormalizer::KEY_NAME),
49 2
            $this->valueOrNull($configuration, ConfigurationNormalizer::KEY_TYPE),
50 2
            $this->valueOrNull($configuration, ConfigurationNormalizer::KEY_LICENSE),
51 2
            $this->valueOrNull($configuration, ConfigurationNormalizer::KEY_VERSION),
52 2
            $this->valueOrNull($configuration, ConfigurationNormalizer::KEY_DESCRIPTION),
53 2
            $this->extractKeywordList($configuration),
54 2
            $this->getNormalizedOrDefault(
55 2
                $this->authorListNormalizer,
56 2
                $configuration,
57 2
                ConfigurationNormalizer::KEY_AUTHORS,
58 2
                []
59 2
            ),
60 2
            $this->getNormalizedOrDefault(
61 2
                $this->packageListNormalizer,
62 2
                $configuration,
63 2
                ConfigurationNormalizer::KEY_PROVIDE,
64 2
                []
65 2
            ),
66 2
            $this->getNormalizedOrDefault(
67 2
                $this->suggestedPackageListNormalizer,
68 2
                $configuration,
69 2
                ConfigurationNormalizer::KEY_SUGGEST,
70 2
                []
71 2
            ),
72 2
            $this->getNormalizedOrDefault(
73 2
                $this->supportListNormalizer,
74 2
                $configuration,
75 2
                ConfigurationNormalizer::KEY_SUPPORT,
76 2
                []
77 2
            ),
78 2
            $this->getNormalizedOrDefault(
79 2
                $this->autoloadListNormalizer,
80 2
                $configuration,
81 2
                ConfigurationNormalizer::KEY_AUTOLOAD,
82 2
                []
83 2
            ),
84 2
            $this->getNormalizedOrDefault(
85 2
                $this->autoloadListNormalizer,
86 2
                $configuration,
87 2
                ConfigurationNormalizer::KEY_AUTOLOAD_DEV,
88 2
                []
89 2
            ),
90 2
            $this->getNormalizedOrDefault(
91 2
                $this->packageListNormalizer,
92 2
                $configuration,
93 2
                ConfigurationNormalizer::KEY_REQUIRE,
94 2
                []
95 2
            ),
96 2
            $this->getNormalizedOrDefault(
97 2
                $this->packageListNormalizer,
98 2
                $configuration,
99 2
                ConfigurationNormalizer::KEY_REQUIRE_DEV,
100 2
                []
101 2
            ),
102 2
            $this->getNormalizedOrDefault(
103 2
                $this->scriptListNormalizer,
104 2
                $configuration,
105 2
                ConfigurationNormalizer::KEY_SCRIPT,
106 2
                []
107 2
            )
108 2
        );
109
    }
110
111
    /**
112
     * @param DenormalizerInterface $denormalizer
113
     * @param array                 $configuration
114
     * @param string                $key
115
     * @param mixed                 $default
116
     *
117
     * @return array
118
     */
119 2
    protected function getNormalizedOrDefault(DenormalizerInterface $denormalizer, array $configuration, $key, $default)
120
    {
121 2
        return isset($configuration[$key]) ? $denormalizer->denormalize($configuration[$key]) : $default;
122
    }
123
124
    /**
125
     * @param array  $configuration
126
     * @param string $key
127
     *
128
     * @return string|null
129
     */
130 2
    protected function valueOrNull(array $configuration, $key)
131
    {
132 2
        return isset($configuration[$key]) ? $configuration[$key] : null;
133
    }
134
135
    /**
136
     * @param array $configuration
137
     *
138
     * @return array
139
     */
140 2
    protected function extractKeywordList(array $configuration)
141
    {
142 2
        return isset($configuration[ConfigurationNormalizer::KEY_KEYWORDS])
143 2
            ? $configuration[ConfigurationNormalizer::KEY_KEYWORDS]
144 2
            : [];
145
    }
146
}
147