Passed
Push — master ( 0a1cb3...4693d1 )
by n
03:02
created

MiddlewareStack::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 5
cts 5
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 3
nc 2
nop 1
crap 2
1
<?php
2
3
namespace N1215\Jugoya;
4
5
use Interop\Http\ServerMiddleware\DelegateInterface;
6
use Interop\Http\ServerMiddleware\MiddlewareInterface;
7
use Psr\Http\Message\ResponseInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
10
class MiddlewareStack implements MiddlewareInterface
11
{
12
13
    /**
14
     * @var MiddlewareInterface[]
15
     */
16
    private $stack = [];
17
18
    /**
19
     * @param MiddlewareInterface[] $queue
20
     */
21 4
    public function __construct(array $queue)
22
    {
23 4
        foreach ($queue as $middleware) {
24 4
            $this->add($middleware);
25 4
        }
26 4
    }
27
28
    /**
29
     * @param MiddlewareInterface $middleware
30
     * @return MiddlewareStack
31
     */
32 4
    private function add(MiddlewareInterface $middleware)
33
    {
34 4
        $this->stack[] = $middleware;
35 4
        return $this;
36
    }
37
38
    /**
39
     * @param ServerRequestInterface $request
40
     * @param DelegateInterface $delegate
41
     * @return ResponseInterface
42
     */
43 4
    public function process(ServerRequestInterface $request, DelegateInterface $delegate)
44
    {
45
        /** @var DelegateInterface $stackDelegate */
46 4
        $stackDelegate = array_reduce(
47 4
            array_reverse($this->stack),
48 4
            function(DelegateInterface $delegate, MiddlewareInterface $middleware) {
49 4
                return new MiddlewareWrappedDelegate($delegate, $middleware);
50 4
            },
51
            $delegate
52 4
        );
53
54 4
        return $stackDelegate->process($request);
55
    }
56
}
57