Completed
Push — master ( ca1131...42ef77 )
by Woody
03:33
created

ChainedResponder::validate()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 14
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 3
Metric Value
dl 0
loc 14
ccs 10
cts 10
cp 1
rs 9.4285
cc 3
eloc 8
nc 3
nop 1
crap 3

1 Method

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