Passed
Push — master ( 473b48...eb1314 )
by Jelmer
01:55
created

RedirectRendererMiddleware   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 14
dl 0
loc 30
ccs 13
cts 13
cp 1
rs 10
c 0
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A render() 0 16 5
1
<?php declare(strict_types = 1);
2
3
namespace jschreuder\Middle\View;
4
5
use Psr\Http\Message\ResponseFactoryInterface;
6
use Psr\Http\Message\ResponseInterface;
7
use Psr\Http\Message\ServerRequestInterface;
8
9
final class RedirectRendererMiddleware implements RendererInterface
10
{
11
    /** @var  RendererInterface */
12
    private $renderer;
13
14
    /** @var  ResponseFactoryInterface */
15
    private $responseFactory;
16
17 4
    public function __construct(RendererInterface $renderer, ResponseFactoryInterface $responseFactory)
18
    {
19 4
        $this->renderer = $renderer;
20 4
        $this->responseFactory = $responseFactory;
21
    }
22
23 3
    public function render(ServerRequestInterface $request, ViewInterface $view): ResponseInterface
24
    {
25 3
        if ($view->getStatusCode() < 300 || $view->getStatusCode() >= 400) {
26 1
            return $this->renderer->render($request, $view);
27
        }
28
29 2
        $headers = $view->getHeaders();
30 2
        if (!isset($headers['Location'])) {
31 1
            throw new \UnderflowException('Location header must be set on View');
32
        }
33
34 1
        $response = $this->responseFactory->createResponse($view->getStatusCode());
35 1
        foreach ($headers as $name => $value) {
36 1
            $response = $response->withHeader($name, $value);
37
        }
38 1
        return $response;
39
    }
40
}
41