Test Failed
Push — master ( 2179ad...53dcee )
by Mike
02:35
created

ArrayHandler::validateArrayKey()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 9
ccs 6
cts 6
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 3
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Xervice\ArrayHandler\Business\Model;
5
6
7
use Xervice\ArrayHandler\Business\Model\ArrayLocator\ArrayLocatorInterface;
8
use Xervice\ArrayHandler\Dependency\FieldHandlerPluginInterface;
9
10
class ArrayHandler implements ArrayHandlerInterface
11
{
12
    /**
13
     * @var \Xervice\ArrayHandler\Dependency\FieldHandlerPluginInterface
14
     */
15
    private $fieldHandler;
16
17
    /**
18
     * @var \Xervice\ArrayHandler\Business\Model\ArrayLocator\ArrayLocatorInterface
19
     */
20
    private $arrayLocator;
21
22
    /**
23
     * ArrayHandler constructor.
24
     *
25
     * @param \Xervice\ArrayHandler\Dependency\FieldHandlerPluginInterface $fieldHandler
26
     * @param \Xervice\ArrayHandler\Business\Model\ArrayLocator\ArrayLocatorInterface $arrayLocator
27
     */
28
    public function __construct(
29
        FieldHandlerPluginInterface $fieldHandler,
30
        ArrayLocatorInterface $arrayLocator
31
    ) {
32
        $this->fieldHandler = $fieldHandler;
33
        $this->arrayLocator = $arrayLocator;
34
    }
35
36
    /**
37
     * @param array $payload
38
     * @param array $config
39
     *
40
     * @return array
41
     */
42
    public function handleArray(array $payload, array $config): array
43
    {
44
        $this->arrayLocator->init($payload);
45
46
        foreach ($config as $key => $configItem) {
47
            if (is_string($configItem)) {
48
                $payload = $this->validateField($payload, $configItem, $configItem);
49
            } elseif ($key === '*') {
50
                foreach ($payload as $dataKey => $subdata) {
51
                    $payload[$dataKey] = $this->handleArray($subdata, $configItem);
52
                }
53
            } else {
54
                $payload = $this->validateNested($payload, $configItem);
55
            }
56
        }
57
58
        return $payload;
59
    }
60
61
    /**
62
     * @param array $payload
63
     * @param array $config
64
     *
65
     * @return array
66
     */
67
    protected function validateNested(array $payload, array $config): array
68
    {
69
        foreach ($config as $configKeys => $configValue) {
70
            $keys = $this->arrayLocator->getKeysByPath($configKeys);
0 ignored issues
show
Unused Code introduced by
The assignment to $keys is dead and can be removed.
Loading history...
71
        }
72
73
        return $payload;
74
    }
75
76
    /**
77
     * @param array $data
78
     * @param string $fieldName
79
     * @param mixed $config
80
     *
81
     * @return array
82
     */
83
    protected function validateField(array $data, string $fieldName, $config): array
84
    {
85
        if (is_string($config)) {
86
            $data = $this->fieldHandler->handleSimpleConfig($data, $fieldName, $config);
87
        } elseif (is_array($config)) {
88
            $data = $this->fieldHandler->handleNestedConfig($data, $fieldName, $config);
89
        } elseif (is_callable($config)) {
90
            $data = $this->fieldHandler->handleCallableConfig($data, $fieldName, $config);
91
        }
92
93
        return $data;
94
    }
95
}