Completed
Push — master ( 15f141...d8571c )
by
unknown
04:34
created

RestApiEventSubscriber::getSubscribedEvents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 18
ccs 15
cts 15
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 11
nc 1
nop 0
crap 1
1
<?php
2
3
namespace MediaMonks\RestApi\EventSubscriber;
4
5
use MediaMonks\RestApi\Request\RequestMatcherInterface;
6
use MediaMonks\RestApi\Request\RequestTransformerInterface;
7
use MediaMonks\RestApi\Response\ResponseTransformerInterface;
8
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
9
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
10
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
11
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
12
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
13
use Symfony\Component\HttpKernel\Event\KernelEvent;
14
use Symfony\Component\HttpKernel\KernelEvents;
15
16
class RestApiEventSubscriber implements EventSubscriberInterface
17
{
18
    /**
19
     * @var RequestMatcherInterface
20
     */
21
    private $requestMatcher;
22
23
    /**
24
     * @var RequestTransformerInterface
25
     */
26
    private $requestTransformer;
27
28
    /**
29
     * @var ResponseTransformerInterface
30
     */
31
    private $responseTransformer;
32
33
    /**
34
     * @param RequestMatcherInterface $requestMatcher
35
     * @param RequestTransformerInterface $requestTransformer
36
     * @param ResponseTransformerInterface $responseTransformer
37
     */
38 11
    public function __construct(
39
        RequestMatcherInterface $requestMatcher,
40
        RequestTransformerInterface $requestTransformer,
41
        ResponseTransformerInterface $responseTransformer
42
    ) {
43 11
        $this->requestMatcher = $requestMatcher;
44 11
        $this->requestTransformer = $requestTransformer;
45 11
        $this->responseTransformer = $responseTransformer;
46 11
    }
47
48
    /**
49
     * @return array
50
     */
51 6
    public static function getSubscribedEvents()
52
    {
53
        return [
54 6
            KernelEvents::REQUEST   => [
55 6
                ['onRequest', 512],
56 6
            ],
57 6
            KernelEvents::EXCEPTION => [
58 6
                ['onException', 512],
59 6
            ],
60 6
            KernelEvents::VIEW      => [
61 6
                ['onView', 0],
62 6
            ],
63 6
            KernelEvents::RESPONSE  => [
64 6
                ['onResponseEarly', 0],
65 6
                ['onResponseLate', -512],
66 6
            ],
67 6
        ];
68
    }
69
70
    /**
71
     * @param GetResponseEvent $event
72
     */
73 2
    public function onRequest(GetResponseEvent $event)
74
    {
75 2
        if (!$this->eventRequestMatches($event)) {
76 1
            return;
77
        }
78 1
        $this->requestTransformer->transform($event->getRequest());
79 1
    }
80
81
    /**
82
     * convert exception to rest api response
83
     *
84
     * @param GetResponseForExceptionEvent $event
85
     */
86 2
    public function onException(GetResponseForExceptionEvent $event)
87
    {
88 2
        if (!$this->eventRequestMatches($event)) {
89 1
            return;
90
        }
91 1
        $event->setResponse($this->responseTransformer->createResponseFromContent($event->getException()));
92 1
    }
93
94
    /**
95
     * convert response to rest api response
96
     *
97
     * @param GetResponseForControllerResultEvent $event
98
     */
99 2
    public function onView(GetResponseForControllerResultEvent $event)
100
    {
101 2
        if (!$this->eventRequestMatches($event)) {
102 1
            return;
103
        }
104 1
        $event->setResponse($this->responseTransformer->createResponseFromContent($event->getControllerResult()));
105 1
    }
106
107
    /**
108
     * converts content to correct output format
109
     *
110
     * @param FilterResponseEvent $event
111
     */
112 2
    public function onResponseEarly(FilterResponseEvent $event)
113
    {
114 2
        if (!$this->eventRequestMatches($event)) {
115 1
            return;
116
        }
117 1
        $event->setResponse($this->responseTransformer->transformEarly($event->getRequest(), $event->getResponse()));
118 1
    }
119
120
    /**
121
     * wrap the content if needed
122
     *
123
     * @param FilterResponseEvent $event
124
     */
125 2
    public function onResponseLate(FilterResponseEvent $event)
126
    {
127 2
        if (!$this->eventRequestMatches($event)) {
128 1
            return;
129
        }
130 1
        $this->responseTransformer->transformLate($event->getRequest(), $event->getResponse());
131 1
    }
132
133
    /**
134
     * @param KernelEvent $event
135
     * @return bool
136
     */
137 10
    protected function eventRequestMatches(KernelEvent $event)
138
    {
139 10
        return $this->requestMatcher->matches($event->getRequest(), $event->getRequestType());
140
    }
141
142
}
143