Passed
Push — master ( b13bff...ea2da2 )
by tsugumu
01:57
created

PipelineBuilder::detectName()   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 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
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
    public function registerFilter(FilterContract $filter) : PipelineBuilderContract
14
    {
15
        $name = $this->detectName($filter);
16
        $this->filterDict[$name] = $filter;
17
        return $this;
18
    }
19
20
    public function make($filterNames){
21
        $filters = array_map(function($name) {
22
            if (is_string($name)) {
23
                return $this->filterDict[$name];
24
            } else {
25
                return $name;
26
            }
27
        }, $filterNames);
28
29
        return new Pipeline($filters);
30
    }
31
32
    private function detectName(FilterContract $filter) {
33
        $key = preg_replace('/Filter$/', '', $this->getClassName($filter));
34
        return (new CamelToSnakeFilter())->apply($key);
35
    }
36
37
    private function getClassName($obj) {
38
        return (new \ReflectionClass($obj))->getShortName();
39
    }
40
}