TransformerRegistry   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
eloc 17
dl 0
loc 45
ccs 16
cts 16
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A addTransformer() 0 15 3
A getTransformer() 0 12 3
1
<?php
2
3
namespace Lneicelis\Transformer;
4
5
use Lneicelis\Transformer\Contract\CanTransform;
6
use Lneicelis\Transformer\Exception\DuplicateResourceTransformerException;
7
use Lneicelis\Transformer\Exception\TransformerNotFoundException;
8
9
class TransformerRegistry
10
{
11
    /** @var CanTransform[] */
12
    protected $transformerByResourceClass = [];
13
14
    /**
15
     * @param CanTransform $transformer
16
     * @param bool $override
17
     * @return $this
18
     * @throws DuplicateResourceTransformerException
19
     */
20 12
    public function addTransformer(CanTransform $transformer, bool $override = false)
21
    {
22 12
        $resourceClass = $transformer->getResourceClass();
23
24 12
        if ($override === false && array_key_exists($resourceClass, $this->transformerByResourceClass)) {
25 1
            throw new DuplicateResourceTransformerException(sprintf(
26 1
                'Transformer for resource "%s" already registered in "%s"',
27 1
                $resourceClass,
28 1
                get_class($this->transformerByResourceClass[$resourceClass])
29
            ));
30
        }
31
32 12
        $this->transformerByResourceClass[$resourceClass] = $transformer;
33
34 12
        return $this;
35
    }
36
37
    /**
38
     * @param mixed $resource
39
     * @return CanTransform
40
     * @throws TransformerNotFoundException
41
     */
42 12
    public function getTransformer($resource): CanTransform
43
    {
44 12
        $className = get_class($resource);
45
46
        do {
47 12
            if (isset($this->transformerByResourceClass[$className])) {
48 11
                return $this->transformerByResourceClass[$className];
49
            }
50 3
        } while ($className = get_parent_class($className));
51
52 1
        throw new TransformerNotFoundException(
53 1
            sprintf('Transformer for resource "%s" is missing', get_class($resource))
54
        );
55
    }
56
}
57