FactoryTranslator::getFactoryWithArguments()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 23
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 3

Importance

Changes 0
Metric Value
eloc 16
c 0
b 0
f 0
dl 0
loc 23
ccs 15
cts 15
cp 1
rs 9.7333
cc 3
nc 4
nop 3
crap 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Antidot\SymfonyConfigTranslator;
6
7
use function array_key_exists;
8
use function array_shift;
9
use function is_array;
10
use function is_string;
11
12
class FactoryTranslator
13
{
14 6
    public function process(array &$symfonyFactory): array
15
    {
16 6
        $factories = [];
17
18 6
        foreach ($symfonyFactory['services'] ?? [] as $serviceName => $service) {
19 6
            if (!is_array($service)) {
20 4
                continue;
21
            }
22 5
            if (array_key_exists('factory', $service) && array_key_exists('arguments', $service)) {
23 1
                $factories[$serviceName] = $this->getFactoryWithArguments($symfonyFactory, $serviceName, $service);
24 1
                unset($symfonyFactory['services'][$serviceName]);
25 1
                continue;
26
            }
27 5
            if (array_key_exists('factory', $service)) {
28 2
                $factories[$serviceName] = $service['factory'];
29 2
                unset($symfonyFactory['services'][$serviceName]);
30 2
                continue;
31
            }
32
        }
33
34
        return [
35
            'dependencies' => [
36 6
                'factories' => $factories,
37
            ],
38
        ];
39
    }
40
41 1
    private function getFactoryWithArguments(array &$symfonyFactory, string $serviceName, array $service): array
42
    {
43 1
        $config = [];
44 1
        if (is_string($service['factory'])) {
45 1
            $arguments = (new ArgumentTranslator())->process(
46 1
                $symfonyFactory,
47
                $service
48
            );
49 1
            unset($symfonyFactory['services'][$serviceName]);
50 1
            $config = [$service['factory'], '__invoke', $arguments];
51
        }
52 1
        if (is_array($service['factory'])) {
53 1
            $factory = array_shift($service['factory']);
54 1
            $method = array_shift($service['factory']);
55 1
            $arguments = (new ArgumentTranslator())->process(
56 1
                $symfonyFactory,
57
                $service
58
            );
59 1
            unset($symfonyFactory['services'][$serviceName]);
60 1
            $config = [$factory, $method, $arguments];
61
        }
62
63 1
        return $config;
64
    }
65
}
66