Completed
Push — master ( f964ee...0d92c3 )
by Alexpts
02:31
created

MiddlewareManager::__invoke()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace PTS\PSR15\MiddlewareManager;
4
5
use Psr\Http\Message\ResponseInterface;
6
use Psr\Http\Message\ServerRequestInterface;
7
use Psr\Http\Server\MiddlewareInterface;
8
use Psr\Http\Server\RequestHandlerInterface;
9
10
class MiddlewareManager implements RequestHandlerInterface
11
{
12
    /** @var callable[] */
13
    protected $middlewares = [];
14
15
    /**
16
     * @param ServerRequestInterface $request
17
     *
18
     * @return ResponseInterface
19
     * @throws \Throwable
20
     */
21
    public function __invoke(ServerRequestInterface $request): ResponseInterface
22
    {
23
        return $this->handle($request);
24
    }
25
26
    /**
27
     * @param MiddlewareInterface $middleware
28
     *
29
     * @return $this
30
     */
31
    public function push(MiddlewareInterface $middleware): self
32
    {
33
        $this->middlewares[] = $middleware;
34
        return $this;
35
    }
36
37
    /**
38
     * @param ServerRequestInterface $request
39
     *
40
     * @return ResponseInterface
41
     * @throws \Throwable
42
     */
43
    public function handle(ServerRequestInterface $request): ResponseInterface
44
    {
45
        $runner = $this->createRunner($this->middlewares);
46
        return $runner->handle($request);
47
    }
48
49
    /**
50
     * @param array $handlers
51
     *
52
     * @return Runner
53
     */
54
    protected function createRunner(array $handlers): Runner
55
    {
56
        return new Runner($handlers);
57
    }
58
}
59