Stack::prependMiddleWare()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
cc 1
nc 1
nop 1
crap 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