ControllerResponseHandler   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
eloc 29
dl 0
loc 79
ccs 34
cts 34
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A validateAction() 0 8 2
A validateController() 0 7 2
A cleanResponse() 0 8 1
A handleResponse() 0 20 2
1
<?php
2
declare(strict_types=1);
3
4
5
namespace Xervice\Controller\Business\Model\ResponseHandler;
6
use Xervice\Controller\Business\Exception\ControllerException;
7
use Xervice\Core\Plugin\AbstractBusinessPlugin;
8
use Xervice\Web\Business\Model\Executor\ResponseHandler\ResponseHandlerInterface;
9
10
11
/**
12
 * @method \Xervice\Controller\Business\ControllerBusinessFactory getFactory()
13
 */
14
class ControllerResponseHandler extends AbstractBusinessPlugin implements ResponseHandlerInterface
15
{
16
    /**
17
     * @param mixed $response
18
     *
19
     * @throws \Xervice\Controller\Business\Exception\ControllerException
20
     */
21 6
    public function handleResponse($response): void
22
    {
23 6
        $controllerName = $response['_controller'];
24 6
        $action = $response['_action'];
25
26 6
        $this->validateController($controllerName);
27
28 5
        $controller = new $controllerName();
29 5
        if (method_exists($controller, 'setKernel')) {
30 5
            $controller->setKernel($this->getFactory()->createKernelBridge());
31
        }
32
33 5
        $this->validateAction($controller, $action, $controllerName);
34
35 4
        $response = $this->cleanResponse($response);
36
37 4
        $this->getFactory()->createOutputProcessor()->processOutput(
38 4
            $controller->$action(
39 4
                $this->getFactory()->createSymfonyRequest(),
40 4
                ...array_values($response)
41
            )
42
        );
43 4
    }
44
45
    /**
46
     * @param array $response
47
     *
48
     * @return array
49
     */
50 4
    private function cleanResponse(array $response): array
51
    {
52 4
        return array_filter(
53 4
            $response,
54
            function ($value) {
55 4
                return $value{0} !== '_';
56 4
            },
57 4
            ARRAY_FILTER_USE_KEY
58
        );
59
    }
60
61
    /**
62
     * @param string $controllerName
63
     *
64
     * @throws \Xervice\Controller\Business\Exception\ControllerException
65
     */
66 6
    private function validateController(string $controllerName): void
67
    {
68 6
        if (!class_exists($controllerName)) {
69 1
            throw new ControllerException(
70 1
                sprintf(
71 1
                    'Controller %s was not found',
72 1
                    $controllerName
73
                )
74
            );
75
        }
76 5
    }
77
78
    /**
79
     * @param mixed $controller
80
     * @param string $action
81
     * @param string $controllerName
82
     *
83
     * @throws \Xervice\Controller\Business\Exception\ControllerException
84
     */
85 5
    private function validateAction($controller, string $action, string $controllerName): void
86
    {
87 5
        if (!method_exists($controller, $action)) {
88 1
            throw new ControllerException(
89 1
                sprintf(
90 1
                    'Method %s not found in controller %s',
91 1
                    $action,
92 1
                    $controllerName
93
                )
94
            );
95
        }
96 4
    }
97
98
}