Passed
Push — master ( ea2da2...4787d7 )
by tsugumu
01:44
created

Normalizer::getPipelineBuilder()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
namespace TKuni\PhpNormalizer;
3
4
5
use TKuni\PhpNormalizer\Contracts\NormalizerContract;
6
use TKuni\PhpNormalizer\Contracts\PipelineBuilderContract;
7
use TKuni\PhpNormalizer\Contracts\PipelineBuilderFactoryContract;
8
use TKuni\PhpNormalizer\Filters\CamelToSnakeFilter;
9
use TKuni\PhpNormalizer\Filters\EmptyToNullFilter;
10
use TKuni\PhpNormalizer\Filters\IntegerFilter;
11
use TKuni\PhpNormalizer\Filters\TrimFilter;
12
use TKuni\PhpNormalizer\Helper\DotChainOperator;
13
14
class Normalizer implements NormalizerContract
15
{
16
    /**
17
     * @var array
18
     */
19
    private $rules;
20
21
    /**
22
     * @var array
23
     */
24
    private $pipelines = [];
25
26
    public function __construct(array $rules)
27
    {
28
        $this->rules = $rules;
29
30
        $pipelineBuilder = $this->getPipelineBuilder();
31
32
        foreach ($rules as $propName => $filterNames) {
33
            $this->pipelines[$propName] = $pipelineBuilder->make($filterNames);
34
        }
35
    }
36
37
    public function normalize(array $in) {
38
        $out = $in;
39
40
        foreach ($this->pipelines as $propName => $pipeline) {
41
            $out = DotChainOperator::update($out, $propName, function ($in) use ($pipeline) {
42
                return $pipeline->apply($in);
43
            });
44
        }
45
46
        return $out;
47
    }
48
49
    private function getPipelineBuilder() {
50
        $pipelineBuilderFactory = Container::container()->get(PipelineBuilderFactoryContract::class);
51
        return $pipelineBuilderFactory->make();
52
    }
53
}