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

Next   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 37
ccs 0
cts 11
cp 0
rs 10
c 0
b 0
f 0
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A __invoke() 0 3 1
A handle() 0 9 2
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