PipelineBuilder::detectName()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 3
ccs 3
cts 3
cp 1
crap 1
rs 10
1
<?php
2
3
namespace TKuni\PhpNormalizer;
4
5
use TKuni\PhpNormalizer\Contracts\PipelineBuilderContract;
6
use TKuni\PhpNormalizer\Filters\CamelToSnakeFilter;
7
use TKuni\PhpNormalizer\Filters\Contracts\FilterContract;
8
9
class PipelineBuilder implements PipelineBuilderContract
10
{
11
    private $filterDict = [];
12
13 10
    public function registerFilter(FilterContract $filter, string $name = null): PipelineBuilderContract
14
    {
15 10
        if ($name === null) {
16 1
            $name = $this->detectName($filter);
17
        }
18 10
        $this->filterDict[$name] = $filter;
19 10
        return $this;
20
    }
21
22 10
    public function make($filterNames){
23
        $filters = array_map(function($name) {
24 10
            if (is_string($name)) {
25 10
                return $this->filterDict[$name];
26
            } else {
27 1
                return $name;
28
            }
29 10
        }, $filterNames);
30
31 10
        return new Pipeline($filters);
32
    }
33
34 1
    private function detectName(FilterContract $filter) {
35 1
        $key = preg_replace('/Filter$/', '', $this->getClassName($filter));
36 1
        return (new CamelToSnakeFilter())->apply($key);
37
    }
38
39 1
    private function getClassName($obj) {
40 1
        return (new \ReflectionClass($obj))->getShortName();
41
    }
42
43
    public function registerFilters(array $filters)
44
    {
45
        foreach ($filters as $filter) {
46
            $this->registerFilter($filter);
47
        }
48
    }
49
}