RouteHandler   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Test Coverage

Coverage 57.89%

Importance

Changes 0
Metric Value
eloc 18
dl 0
loc 40
ccs 11
cts 19
cp 0.5789
rs 10
c 0
b 0
f 0
wmc 9

2 Methods

Rating   Name   Duplication   Size   Complexity  
A resolveArguments() 0 16 6
A __construct() 0 17 3
1
<?php declare(strict_types=1);
2
3
/*
4
 * This file is part of Biurad opensource projects.
5
 *
6
 * @copyright 2019 Biurad Group (https://biurad.com/)
7
 * @license   https://opensource.org/licenses/BSD-3-Clause License
8
 *
9
 * For the full copyright and license information, please view the LICENSE
10
 * file that was distributed with this source code.
11
 */
12
13
namespace Flange\Handler;
14
15
use Biurad\Http\Request;
16
use Flange\Event\ControllerEvent;
17
use Flight\Routing\Handlers\RouteHandler as BaseRouteHandler;
18
use Psr\Http\Message\ServerRequestInterface;
19
20
/**
21
 * Default route's handler for rade framework.
22
 *
23
 * @author Divine Niiquaye Ibok <[email protected]>
24
 */
25
class RouteHandler extends BaseRouteHandler
26
{
27 4
    public function __construct(\Flange\Application $container)
28
    {
29 4
        if ($container->has('events.dispatcher')) {
30
            $resolver = static function (mixed $handler, array $parameters) use ($container) {
31
                $event = new ControllerEvent($container, $parameters[ServerRequestInterface::class], $handler, $parameters);
32
                $container->getDispatcher()->dispatch($event);
33
                $request = $event->getRequest();
34
35
                if ($request instanceof Request) {
36
                    $container->get('request_stack')->push($request->getRequest());
37
                }
38
39
                return $container->call($event->getController(), $event->getArguments());
40
            };
41
        }
42
43 4
        parent::__construct($container->get('psr17.factory'), $resolver ?? [$container->getResolver(), 'resolve']);
44
    }
45
46
    /**
47
     * {@inheritdoc}
48
     */
49 4
    protected function resolveArguments(ServerRequestInterface $request, $parameters): array
50
    {
51 4
        if (!\is_array($parameters)) {
52
            $parameters = $parameters->getArguments();
53
        }
54 4
        $requests = \array_merge([$request::class], \class_implements($request) ?: [], \class_parents($request) ?: []);
55
56 4
        foreach ($requests as $psr7Interface) {
57 4
            if (\Stringable::class === $psr7Interface) {
58 4
                continue;
59
            }
60
61 4
            $parameters[$psr7Interface] = $request;
62
        }
63
64 4
        return $parameters;
65
    }
66
}
67