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

ConfigTranslator::searchDependency()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
cc 3
eloc 5
nc 3
nop 2
dl 0
loc 9
ccs 0
cts 8
cp 0
crap 12
rs 10
c 0
b 0
f 0
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