ResponseNormalizerListener   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 87.1%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 4
dl 0
loc 71
ccs 27
cts 31
cp 0.871
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
D filterResponse() 0 43 9
A getRouter() 0 4 1
1
<?php
2
3
namespace ScayTrase\Api\Cruds\Listener;
4
5
use Doctrine\Common\Collections\Collection;
6
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
7
use Symfony\Component\Routing\RouterInterface;
8
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
9
10
final class ResponseNormalizerListener
11
{
12
    use CrudsRequestCheckerTrait;
13
14
    /** @var  NormalizerInterface */
15
    private $normalizer;
16
    /** @var  RouterInterface */
17
    private $router;
18
19
    /**
20
     * ResponseNormalizerListener constructor.
21
     *
22
     * @param NormalizerInterface $normalizer
23
     * @param RouterInterface     $router
24
     */
25 26
    public function __construct(NormalizerInterface $normalizer, RouterInterface $router)
26
    {
27 26
        $this->normalizer = $normalizer;
28 26
        $this->router     = $router;
29 26
    }
30
31 26
    public function filterResponse(GetResponseForControllerResultEvent $event)
32
    {
33 26
        if (!$this->checkRequest($event)) {
34
            return;
35
        }
36
37 26
        $result = $event->getControllerResult();
38
39 26
        if (is_scalar($result)) {
40 6
            return;
41
        }
42
43 20
        $entities = $result;
44
45 20
        if (null === $entities) {
46 4
            return null;
47
        }
48
49 16
        if ($entities instanceof Collection) {
50 4
            $entities = $entities->toArray();
51
        }
52
53 16
        $isArray = true;
54 16
        if (!is_array($entities)) {
55 12
            $isArray  = false;
56 12
            $entities = [$entities];
57
        }
58
59 16
        $options = $this->getNormalizedCrudApiOptions($event);
60 16
        if (!$options['enabled']) {
61
            return;
62
        }
63
64 16
        $context = $options['context'];
65 16
        foreach ($entities as &$entity) {
66 16
            $entity = $this->normalizer->normalize($entity, null, $context);
67
        }
68 16
        unset($entity);
69
70 16
        $entities = $isArray ? $entities : array_shift($entities);
71
72 16
        $event->setControllerResult($entities);
73 16
    }
74
75
    /** {@inheritdoc} */
76
    protected function getRouter()
77
    {
78
        return $this->router;
79
    }
80
}
81