ChainedResponder   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 3
dl 0
loc 54
ccs 17
cts 17
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 12 1
A __invoke() 0 12 2
A assertValid() 0 10 3
1
<?php
2
3
namespace Equip\Responder;
4
5
use Equip\Adr\PayloadInterface;
6
use Equip\Adr\ResponderInterface;
7
use Equip\Exception\ResponderException;
8
use Equip\Resolver\ResolverTrait;
9
use Equip\Structure\Set;
10
use Psr\Http\Message\ResponseInterface;
11
use Psr\Http\Message\ServerRequestInterface;
12
use Relay\ResolverInterface;
13
14
class ChainedResponder extends Set implements ResponderInterface
15
{
16
    use ResolverTrait;
17
18
    /**
19
     * @param ResolverInterface $resolver
20
     * @param array $responders
21
     */
22 5
    public function __construct(
23
        ResolverInterface $resolver,
24
        array $responders = [
25
            FormattedResponder::class,
26
            RedirectResponder::class,
27
            StatusResponder::class,
28
        ]
29
    ) {
30 5
        $this->resolver = $resolver;
31
32 5
        parent::__construct($responders);
33 5
    }
34
35
    /**
36
     * @inheritDoc
37
     */
38 3
    public function __invoke(
39
        ServerRequestInterface $request,
40
        ResponseInterface $response,
41
        PayloadInterface $payload
42
    ) {
43 3
        foreach ($this as $responder) {
44 3
            $responder = $this->resolve($responder);
45 3
            $response = $responder($request, $response, $payload);
46 3
        }
47
48 3
        return $response;
49
    }
50
51
    /**
52
     * @inheritDoc
53
     *
54
     * @throws ResponderException
55
     *  If $classes does not implement the correct interface.
56
     */
57 5
    protected function assertValid(array $classes)
58
    {
59 5
        parent::assertValid($classes);
60
61 5
        foreach ($classes as $responder) {
62 5
            if (!is_subclass_of($responder, ResponderInterface::class)) {
63 1
                throw ResponderException::invalidClass($responder);
64
            }
65 5
        }
66 5
    }
67
}
68