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

Normalizer   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 14
dl 0
loc 38
rs 10
c 1
b 0
f 1
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A normalize() 0 10 2
A getPipelineBuilder() 0 3 1
A __construct() 0 8 2
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
}