Passed
Push — master ( e37ab6...297052 )
by Koldo
02:10
created

ConfigTranslator   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 19
dl 0
loc 33
ccs 0
cts 21
cp 0
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A parse() 0 8 1
A __invoke() 0 21 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Antidot\SymfonyConfigTranslator\Container\Config;
6
7
use Antidot\SymfonyConfigTranslator\AliasTranslator;
8
use Antidot\SymfonyConfigTranslator\ConditionalTranslator;
9
use Antidot\SymfonyConfigTranslator\FactoryTranslator;
10
use Antidot\SymfonyConfigTranslator\InvokableTranslator;
11
use DateTimeImmutable;
12
13
use function array_merge_recursive;
14
use function json_decode;
15
use function json_encode;
16
use function str_replace;
17
18
class ConfigTranslator
19
{
20
    public function __invoke(array $config): array
21
    {
22
        if (false === empty($config['parameters'])) {
23
            $config['parameters'] = json_decode(
24
                str_replace(
25
                    '%date%',
26
                    (new DateTimeImmutable())->format('Y-m-d'),
27
                    json_encode($config['parameters']) ?: ''
28
                ),
29
                true
30
            );
31
            $config = array_merge_recursive($config, $config['parameters'] ?? []);
32
            unset($config['parameters']);
33
        }
34
35
        if (false === empty($config['services'])) {
36
            $config = $this->parse($config);
37
            unset($config['services']);
38
        }
39
40
        return $config;
41
    }
42
43
    private function parse(array $defaultConfig): array
44
    {
45
        return array_merge_recursive(
46
            (new FactoryTranslator())->process($defaultConfig),
47
            (new ConditionalTranslator())->process($defaultConfig),
48
            (new AliasTranslator())->process($defaultConfig['services']),
49
            (new InvokableTranslator())->process($defaultConfig['services']),
50
            $defaultConfig
51
        );
52
    }
53
}
54