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

RedirectRendererMiddleware::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 2
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 1
rs 10
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