Stack   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 5
eloc 10
c 2
b 0
f 0
dl 0
loc 46
ccs 14
cts 14
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A handle() 0 9 2
A prependMiddleWare() 0 3 1
A addMiddleWare() 0 3 1
1
<?php
2
3
namespace Bone\Http\Middleware;
4
5
use Bone\Http\RouterInterface;
6
use Psr\Http\Message\ResponseInterface;
7
use Psr\Http\Message\ServerRequestInterface;
8
use Psr\Http\Server\MiddlewareInterface;
9
use Psr\Http\Server\RequestHandlerInterface;
10
11
class Stack implements RequestHandlerInterface
12
{
13
    /** @var MiddlewareInterface[] $middleware */
14
    private $middleware = [];
15
16
    /** @var RouterInterface $router */
17
    private $router;
18
19
    /**
20
     * Stack constructor.
21
     * @param RouterInterface $router
22
     */
23 1
    public function __construct(RouterInterface $router)
24
    {
25 1
        $this->router = $router;
26 1
    }
27
28
    /**
29
     * @param MiddlewareInterface $middleware
30
     */
31 1
    public function addMiddleWare(MiddlewareInterface $middleware): void
32
    {
33 1
        $this->middleware[] = $middleware;
34 1
    }
35
36
    /**
37
     * @param MiddlewareInterface $middleware
38
     */
39 1
    public function prependMiddleWare(MiddlewareInterface $middleware): void
40
    {
41 1
        array_unshift($this->middleware, $middleware);
42 1
    }
43
44
    /**
45
     * @param ServerRequestInterface $request
46
     * @return ResponseInterface
47
     */
48 1
    public function handle(ServerRequestInterface $request): ResponseInterface
49
    {
50 1
        $middleware = array_shift($this->middleware);
51
52 1
        if ($middleware === null) {
53 1
            return $this->router->handle($request);
54
        }
55
56 1
        return $middleware->process($request, $this);
57
    }
58
}
59