Completed
Push — master ( 2451d4...76a997 )
by Woody
01:21
created

Broker::resolveMiddleware()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 1
crap 2
1
<?php
2
3
namespace Northwoods\Broker;
4
5
use Interop\Http\ServerMiddleware\DelegateInterface;
6
use Interop\Http\ServerMiddleware\MiddlewareInterface;
7
use Psr\Container\ContainerInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
use SplObjectStorage;
10
11
class Broker implements MiddlewareInterface
12
{
13
    /**
14
     * @var ContainerInterface
15
     */
16
    private $container;
17
18
    /**
19
     * @var array
20
     */
21
    private $middleware = [];
22
23 4
    public function __construct(ContainerInterface $container = null)
24
    {
25 4
        $this->container = $container;
26 4
    }
27
28
    /**
29
     * @return \Psr\Http\Message\ResponseInterface
30
     */
31 1
    public function handle(ServerRequestInterface $request, callable $default)
32
    {
33 1
        $delegate = new CallableDelegate($default);
34
35 1
        return $this->process($request, $delegate);
36
    }
37
38
    // MiddlewareInterface
39 4
    public function process(ServerRequestInterface $request, DelegateInterface $delegate)
40
    {
41 4
        $delegate = new Delegate($this->middleware, $delegate, $this->container);
42
43 4
        return $delegate->process($request);
44
    }
45
46
    /**
47
     * @param array|string|MiddlewareInterface $middleware
48
     * @return self
49
     */
50 3
    public function always($middleware)
51
    {
52 3
        return $this->when($this->alwaysTrue(), $middleware);
53
    }
54
55
    /**
56
     * @param array|string|MiddlewareInterface $middleware
57
     * @return self
58
     */
59 3
    public function when(callable $condition, $middleware)
60
    {
61 3
        if (!is_array($middleware)) {
62 2
            $middleware = [$middleware];
63 2
        }
64
65 3
        foreach ($middleware as $mw) {
66 3
            $this->middleware[] = [
67 3
                $condition,
68
                $mw
69 3
            ];
70 3
        }
71
72 3
        return $this;
73
    }
74
75
    /**
76
     * @return callable
77
     */
78
    private function alwaysTrue()
79
    {
80 3
        return static function () {
81 3
            return true;
82 3
        };
83
    }
84
}
85