Completed
Pull Request — master (#93)
by Jan Philipp
02:53 queued 01:09
created

ConfigMerger::overrideHidden()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 2
1
<?php declare(strict_types=1);
2
3
namespace Shopware\Psh\Config;
4
5
class ConfigMerger
6
{
7
    /**
8
     * @param Config $config
9
     * @param Config|null $override
10
     * @return Config
11
     */
12
    public function merge(Config $config, Config $override = null): Config
13
    {
14
        if ($override === null) {
15
            return $config;
16
        }
17
18
        $header = $config->getHeader();
19
        $defaultEnvironment = $config->getDefaultEnvironment();
20
        $environments = $config->getEnvironments();
21
22
        if ($override->getHeader()) {
23
            $header = $override->getHeader();
24
        }
25
26
        if ($override->getEnvironments()) {
27
            $environments = $this->mergeConfigEnvironments($config, $override);
28
        }
29
30
        if ($override->getDefaultEnvironment()) {
31
            $defaultEnvironment = $override->getDefaultEnvironment();
32
        }
33
34
        return new Config($header, $defaultEnvironment, $environments, $config->getParams());
35
    }
36
37
    /**
38
     * @param Config $config
39
     * @param Config $override
40
     * @return array
41
     */
42
    private function mergeConfigEnvironments(Config $config, Config $override): array
43
    {
44
        $environments = [];
45
        foreach ($override->getEnvironments() as $name => $overrideEnv) {
46
            $originalConfigEnv = $config->getEnvironments()[$name];
47
48
            $environments[$name] = new ConfigEnvironment(
49
                $this->overrideHidden($originalConfigEnv, $overrideEnv),
50
                $this->overrideScriptsPaths($originalConfigEnv, $overrideEnv),
51
                $this->mergeDynamicVariables($config->getEnvironments()[$name], $overrideEnv),
52
                $this->mergeConstants($config->getEnvironments()[$name], $overrideEnv),
53
                $this->overrideTemplates($config->getEnvironments()[$name], $overrideEnv),
54
                $this->mergeDotenvPaths($originalConfigEnv, $overrideEnv)
55
            );
56
        }
57
58
        return $environments;
59
    }
60
61
    /**
62
     * @param ConfigEnvironment $configEnvironment
63
     * @param ConfigEnvironment $overrideEnv
64
     * @return array
65
     */
66
    private function mergeDynamicVariables(ConfigEnvironment $configEnvironment, ConfigEnvironment $overrideEnv): array
67
    {
68
        return array_merge($configEnvironment->getDynamicVariables(), $overrideEnv->getDynamicVariables());
69
    }
70
71
    /**
72
     * @param ConfigEnvironment $configEnvironment
73
     * @param ConfigEnvironment $overrideConfigEnv
74
     * @return ScriptsPath[]
75
     */
76
    private function mergeDotenvPaths(ConfigEnvironment $configEnvironment, ConfigEnvironment $overrideConfigEnv): array
77
    {
78
        return array_merge($configEnvironment->getDotenvPaths(), $overrideConfigEnv->getDotenvPaths());
79
    }
80
81
    /**
82
     * @param ConfigEnvironment $configEnvironment
83
     * @param ConfigEnvironment $overrideConfigEnv
84
     * @return ScriptsPath[]
85
     */
86
    private function overrideScriptsPaths(ConfigEnvironment $configEnvironment, ConfigEnvironment $overrideConfigEnv): array
87
    {
88
        if ($overrideConfigEnv->getAllScriptsPaths()) {
89
            return $overrideConfigEnv->getAllScriptsPaths();
90
        }
91
92
        return $configEnvironment->getAllScriptsPaths();
93
    }
94
95
    /**
96
     * @param ConfigEnvironment $configEnvironment
97
     * @param ConfigEnvironment $overrideConfigEnv
98
     * @return array
99
     */
100
    private function mergeConstants(ConfigEnvironment $configEnvironment, ConfigEnvironment $overrideConfigEnv): array
101
    {
102
        return array_merge($configEnvironment->getConstants(), $overrideConfigEnv->getConstants());
103
    }
104
105
    /**
106
     * @param ConfigEnvironment $configEnvironment
107
     * @param $overrideConfigEnv
108
     * @return array
109
     */
110
    private function overrideTemplates(ConfigEnvironment $configEnvironment, ConfigEnvironment $overrideConfigEnv): array
111
    {
112
        if ($overrideConfigEnv->getTemplates()) {
113
            return $overrideConfigEnv->getTemplates();
114
        }
115
116
        return $configEnvironment->getTemplates();
117
    }
118
119
    private function overrideHidden(ConfigEnvironment $originalConfigEnv, ConfigEnvironment $overrideEnv): bool
120
    {
121
        if ($overrideEnv->isHidden()) {
122
            return true;
123
        }
124
125
        return $originalConfigEnv->isHidden();
126
    }
127
}
128