Normalizer   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

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

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getPipelineBuilder() 0 3 1
A __construct() 0 8 2
A normalize() 0 10 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 8
    public function __construct(array $rules)
27
    {
28 8
        $this->rules = $rules;
29
30 8
        $pipelineBuilder = $this->getPipelineBuilder();
31
32 8
        foreach ($rules as $propName => $filterNames) {
33 8
            $this->pipelines[$propName] = $pipelineBuilder->make($filterNames);
34
        }
35 8
    }
36
37 8
    public function normalize(array $in) {
38 8
        $out = $in;
39
40 8
        foreach ($this->pipelines as $propName => $pipeline) {
41
            $out = DotChainOperator::update($out, $propName, function ($in) use ($pipeline) {
42 8
                return $pipeline->apply($in);
43 8
            });
44
        }
45
46 8
        return $out;
47
    }
48
49 8
    private function getPipelineBuilder() {
50 8
        $pipelineBuilderFactory = Container::container()->get(PipelineBuilderFactoryContract::class);
51 8
        return $pipelineBuilderFactory->make();
52
    }
53
}