Passed
Push — master ( c0f6da...b424db )
by Jelmer
04:57
created

FilterValidationMiddleware::process()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 22
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 22
ccs 9
cts 9
cp 1
rs 8.9197
c 0
b 0
f 0
cc 4
eloc 10
nc 6
nop 2
crap 4
1
<?php declare(strict_types = 1);
2
3
namespace jschreuder\Middle\Controller;
4
5
use jschreuder\Middle\HttpMiddlewareInterface;
6
use jschreuder\Middle\DelegateInterface;
7
use Psr\Http\Message\ResponseInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
10
class FilterValidationMiddleware implements HttpMiddlewareInterface
11
{
12
    /** @var  callable */
13
    private $errorHandler;
14
15 5
    public function __construct(callable $errorHandler)
16
    {
17 5
        $this->errorHandler = $errorHandler;
18 5
    }
19
20 4
    public function process(ServerRequestInterface $request, DelegateInterface $delegate) : ResponseInterface
21
    {
22 4
        $controller = $request->getAttribute('controller');
23
24 4
        if ($controller instanceof RequestFilterInterface) {
25
            // Execute the request-filter from the controller
26 1
            $request = $controller->filterRequest($request);
27
        }
28
29 4
        if ($controller instanceof RequestValidatorInterface) {
30
            // Execute the request-validator from the controller
31
            try {
32 2
                $controller->validateRequest($request);
33 1
            } catch (ValidationFailedException $exception) {
34
                // Hand of to error-handler on failure
35 1
                return ($this->errorHandler)($request, $exception);
36
            }
37
        }
38
39
        // Filtered and validated (if applicable), let's continue on
40 3
        return $delegate->next($request);
41
    }
42
}
43