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

Broker   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 2
dl 0
loc 74
ccs 24
cts 24
cp 1
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A handle() 0 6 1
A process() 0 6 1
A always() 0 4 1
A when() 0 15 3
A alwaysTrue() 0 6 1
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