ResourceCreatedListener::setMetadata()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 14
ccs 9
cts 9
cp 1
rs 9.2
cc 4
eloc 7
nc 4
nop 2
crap 4
1
<?php
2
3
namespace Alchemy\RestBundle\EventListener;
4
5
use Alchemy\Rest\Response\ArrayTransformer;
6
use Alchemy\Rest\Result\ResourceCreatedResult;
7
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
8
use Symfony\Component\HttpFoundation\JsonResponse;
9
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
10
use Symfony\Component\HttpKernel\KernelEvents;
11
12
class ResourceCreatedListener implements EventSubscriberInterface
13
{
14
15
    private $transformer;
16
17 4
    public function __construct(ArrayTransformer $transformer)
18
    {
19 4
        $this->transformer = $transformer;
20 4
    }
21
22 4
    public function onKernelView(GetResponseForControllerResultEvent $event)
23
    {
24 4
        $result = $event->getControllerResult();
25 4
        $request = $event->getRequest();
26
27 4
        if (! $result instanceof ResourceCreatedResult) {
28 2
            return;
29
        }
30
31 2
        $transformerKey = $request->attributes->get('_rest[transform]', null, true);
32
33 2
        $transformedData = $this->transformer->transform($transformerKey, $result->getResource());
34 2
        $transformedData = $this->setMetadata($transformedData, $result);
35
36 2
        $event->setControllerResult(new JsonResponse($transformedData, 201));
37 2
    }
38
39 2
    public static function getSubscribedEvents()
40
    {
41 2
        return array(KernelEvents::VIEW => 'onKernelView');
42
    }
43
44
    /**
45
     * @param $transformedData
46
     * @param $result
47
     * @return mixed
48
     */
49 2
    private function setMetadata($transformedData, $result)
50
    {
51 2
        if (!isset($transformedData['meta']) && !count($result->getMetadata())) {
52 2
            $transformedData['meta'] = array();
53 2
        }
54
55 2
        $transformedData['meta'] = array_merge($transformedData['meta'], $result->getMetadata());
56
57 2
        if (empty($transformedData['meta'])) {
58 2
            unset($transformedData['meta']);
59 2
        }
60
61 2
        return $transformedData;
62
    }
63
}
64