Completed
Pull Request — master (#283)
by Phil
02:56
created

MiddlewareAwareTrait   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 91.43%

Importance

Changes 0
Metric Value
wmc 19
lcom 1
cbo 0
dl 0
loc 82
ccs 32
cts 35
cp 0.9143
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A getMiddlewareStack() 0 4 1
A lazyMiddlewares() 0 8 2
A lazyMiddleware() 0 5 1
A lazyPrependMiddleware() 0 5 1
A middleware() 0 5 1
A middlewares() 0 8 2
A prependMiddleware() 0 5 1
A shiftMiddleware() 0 10 2
B resolveMiddleware() 0 16 8
1
<?php
2
3
declare(strict_types=1);
4
5
namespace League\Route\Middleware;
6
7
use InvalidArgumentException;
8
use OutOfBoundsException;
9
use Psr\Container\ContainerInterface;
10
use Psr\Http\Server\MiddlewareInterface;
11
12
trait MiddlewareAwareTrait
13
{
14
    /**
15
     * @var array
16
     */
17
    protected $middleware = [];
18
19 54
    public function getMiddlewareStack(): iterable
20
    {
21 54
        return $this->middleware;
22
    }
23
24 3
    public function lazyMiddleware(string $middleware): MiddlewareAwareInterface
25
    {
26 3
        $this->middleware[] = $middleware;
27 3
        return $this;
28
    }
29
30 3
    public function lazyMiddlewares(array $middlewares): MiddlewareAwareInterface
31
    {
32 3
        foreach ($middlewares as $middleware) {
33 3
            $this->lazyMiddleware($middleware);
34
        }
35
36 3
        return $this;
37
    }
38
39 3
    public function lazyPrependMiddleware(string $middleware): MiddlewareAwareInterface
40
    {
41 3
        array_unshift($this->middleware, $middleware);
42 3
        return $this;
43
    }
44
45 30
    public function middleware(MiddlewareInterface $middleware): MiddlewareAwareInterface
46
    {
47 30
        $this->middleware[] = $middleware;
48 30
        return $this;
49
    }
50
51 3
    public function middlewares(array $middlewares): MiddlewareAwareInterface
52
    {
53 3
        foreach ($middlewares as $middleware) {
54 3
            $this->middleware($middleware);
55
        }
56
57 3
        return $this;
58
    }
59
60 51
    public function prependMiddleware(MiddlewareInterface $middleware): MiddlewareAwareInterface
61
    {
62 51
        array_unshift($this->middleware, $middleware);
63 51
        return $this;
64
    }
65
66 51
    public function shiftMiddleware(): MiddlewareInterface
67
    {
68 51
        $middleware =  array_shift($this->middleware);
69
70 51
        if ($middleware === null) {
71
            throw new OutOfBoundsException('Reached end of middleware stack. Does your controller return a response?');
72
        }
73
74 51
        return $middleware;
75
    }
76
77 3
    protected function resolveMiddleware($middleware, ?ContainerInterface $container = null): MiddlewareInterface
78
    {
79 3
        if ($container === null && is_string($middleware) && class_exists($middleware)) {
80 3
            $middleware = new $middleware();
81
        }
82
83 3
        if ($container !== null && is_string($middleware) && $container->has($middleware)) {
84
            $middleware = $container->get($middleware);
85
        }
86
87 3
        if ($middleware instanceof MiddlewareInterface) {
88 3
            return $middleware;
89
        }
90
91
        throw new InvalidArgumentException(sprintf('Could not resolve middleware class: %s', $middleware));
92
    }
93
}
94