Passed
Pull Request — master (#11)
by Dominik
02:22
created

getObjectMapping()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 14
ccs 0
cts 11
cp 0
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 7
nc 4
nop 1
crap 12
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Chubbyphp\Deserialization\Doctrine\Denormalizer;
6
7
use Chubbyphp\Deserialization\Denormalizer\DenormalizerObjectMappingRegistryInterface;
8
use Chubbyphp\Deserialization\DeserializerLogicException;
9
use Chubbyphp\Deserialization\Mapping\DenormalizationObjectMappingInterface;
10
use Doctrine\Common\Persistence\Proxy;
11
12
final class DenormalizerObjectMappingRegistry implements DenormalizerObjectMappingRegistryInterface
13
{
14
    /**
15
     * @var DenormalizationObjectMappingInterface[]
16
     */
17
    private $objectMappings;
18
19
    /**
20
     * @param array $objectMappings
21
     */
22
    public function __construct(array $objectMappings)
23
    {
24
        $this->objectMappings = [];
25
        foreach ($objectMappings as $objectMapping) {
26
            $this->addObjectMapping($objectMapping);
27
        }
28
    }
29
30
    /**
31
     * @param DenormalizationObjectMappingInterface $objectMapping
32
     */
33
    private function addObjectMapping(DenormalizationObjectMappingInterface $objectMapping)
34
    {
35
        $this->objectMappings[$objectMapping->getClass()] = $objectMapping;
36
    }
37
38
    /**
39
     * @param string $class
40
     *
41
     * @return DenormalizationObjectMappingInterface
42
     *
43
     * @throws DeserializerLogicException
44
     */
45
    public function getObjectMapping(string $class): DenormalizationObjectMappingInterface
46
    {
47
        $reflectionClass = new \ReflectionClass($class);
48
49
        if (in_array(Proxy::class, $reflectionClass->getInterfaceNames(), true)) {
50
            $class = ($reflectionClass->getParentClass())->name;
51
        }
52
53
        if (isset($this->objectMappings[$class])) {
54
            return $this->objectMappings[$class];
55
        }
56
57
        throw DeserializerLogicException::createMissingMapping($class);
58
    }
59
}
60