Test Failed
Push — master ( 7e410e...bf8e81 )
by Alexey
04:20
created

RouteDispatcher   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 66.67%

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 5
lcom 1
cbo 6
dl 0
loc 54
ccs 10
cts 15
cp 0.6667
rs 10
c 2
b 0
f 1

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
B next() 0 24 4
1
<?php declare(strict_types = 1);
2
3
namespace Venta\Routing;
4
5
use Psr\Http\Message\ResponseInterface;
6
use Psr\Http\Message\ServerRequestInterface;
7
use Venta\Contracts\Adr\Input;
8
use Venta\Contracts\Adr\Payload;
9
use Venta\Contracts\Adr\Responder;
10
use Venta\Contracts\Container\Container;
11
use Venta\Contracts\Http\Request as RequestContract;
12
use Venta\Contracts\Routing\Route as RouteContract;
13
use Venta\Contracts\Routing\RouteDispatcher as RouteDispatcherContract;
14
use Venta\Http\Request;
15
16
/**
17
 * Class RouteDispatcher
18
 *
19
 * @package Venta\Routing
20
 */
21
final class RouteDispatcher implements RouteDispatcherContract
22
{
23
24
    /**
25
     * @var Container
26
     */
27
    private $container;
28
29
    /**
30
     * @var RouteContract
31
     */
32
    private $route;
33
34
    /**
35
     * RouteDispatcher constructor.
36
     *
37
     * @param RouteContract $route
38
     * @param Container $container
39
     */
40 3
    public function __construct(RouteContract $route, Container $container)
41
    {
42 3
        $this->route = $route;
43 3
        $this->container = $container;
44 3
    }
45
46
    /**
47
     * @inheritDoc
48
     */
49 1
    public function next(ServerRequestInterface $request): ResponseInterface
50
    {
51 1
        if (!$request instanceof RequestContract) {
52
            // Decorate PSR-7 ServerRequest.
53
            $request = new Request($request);
54
        }
55
56
        // Add current route to the request.
57 1
        $request = $request->withRoute($this->route);
58
59 1
        if ($this->container->isCallable($this->route->getDomain())) {
60
            if ($this->container->has($this->route->getInput())) {
61
                /** @var Input $input */
62
                $input = $this->container->get($this->route->getInput());
63
                $arguments = $input->process($request);
64
            }
65
            /** @var Payload $payload */
66
            $payload = $this->container->call($this->route->getDomain(), $arguments ?? []);
67
        }
68
        /** @var Responder $responder */
69 1
        $responder = $this->container->get($this->route->getResponder());
70
        
71 1
        return $responder->run($request, $payload ?? null);
72
    }
73
74
}