Completed
Pull Request — master (#25)
by Dawid
03:13
created

Next::__invoke()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace Igni\Http\Middleware;
4
5
use Psr\Http\Message\ResponseInterface;
6
use Psr\Http\Message\ServerRequestInterface;
7
use Psr\Http\Server\RequestHandlerInterface;
8
use SplQueue;
9
10
/**
11
 * Iterates a queue of middleware and executes them.
12
 */
13
final class Next implements RequestHandlerInterface
14
{
15
    /**
16
     * @var RequestHandlerInterface
17
     */
18
    private $parent;
19
20
    /**
21
     * @var SplQueue
22
     */
23
    private $queue;
24
25
    /**
26
     * Next constructor.
27
     * @param SplQueue $queue
28
     * @param RequestHandlerInterface $parent
29
     */
30
    public function __construct(SplQueue $queue, RequestHandlerInterface $parent)
31
    {
32
        $this->queue = clone $queue;
33
        $this->parent = $parent;
34
    }
35
36
    public function __invoke(ServerRequestInterface $request): ResponseInterface
37
    {
38
        return $this->handle($request);
39
    }
40
41
    public function handle(ServerRequestInterface $request): ResponseInterface
42
    {
43
        if ($this->queue->isEmpty()) {
44
            return $this->parent->handle($request);
45
        }
46
47
        $middleware = $this->queue->dequeue();
48
49
        return $middleware->process($request, $this);
50
    }
51
}
52