PimpleFilterManager::add()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 2
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Rs\XmlFilter\Filter\Manager;
6
7
use Pimple\Container;
8
use Rs\XmlFilter\Document\Element;
9
use Rs\XmlFilter\Filter\Filter;
10
use Symfony\Component\OptionsResolver\OptionsResolver;
11
12
class PimpleFilterManager extends Container implements FilterManager
13
{
14 30
    public function filter(Element $element, string $filter, array $options)
15
    {
16 30
        $filter = $this[$this->normalizeId($filter)];
17
        /* @var Filter $filter */
18
19 30
        $options = $this->resolveOptions($filter, $options);
20
21 29
        return $filter->find($element, $options);
22
    }
23
24 30
    private function resolveOptions(Filter $filter, array $options) : array
25
    {
26 30
        $resolver = new OptionsResolver();
27 30
        $filter->getOptions($resolver);
28
29 30
        return $resolver->resolve($options);
30
    }
31
32 31
    public function offsetGet($id)
33
    {
34 31
        $filter = parent::offsetGet($id);
35
36 31
        if ('manager' !== $id && !$filter instanceof Filter) {
37 1
            throw new \RuntimeException('invalid service, should implement Filter');
38
        }
39
40 30
        return $filter;
41
    }
42
43 30
    private function normalizeId($id)
44
    {
45 30
        return str_replace('\\\\', '\\', $id);
46
    }
47
48
    /**
49
     * @param Filter|callable $filter
50
     */
51 2
    public function add(string $name, $filter)
52
    {
53 2
        $this[$name] = $filter;
54 2
    }
55
}
56