Passed
Push — master ( eff708...846edf )
by Felipe
02:06
created

StatusCodeMiddleware::process()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
/*
3
 * This file is part of coisa/http.
4
 *
5
 * (c) Felipe Sayão Lobato Abreu <[email protected]>
6
 *
7
 * This source file is subject to the license that is bundled
8
 * with this source code in the file LICENSE.
9
 */
10
11
namespace CoiSA\Http\Middleware;
12
13
use Fig\Http\Message\StatusCodeInterface;
14
use Psr\Http\Message\ResponseInterface;
15
use Psr\Http\Message\ServerRequestInterface;
16
use Psr\Http\Server\MiddlewareInterface;
17
use Psr\Http\Server\RequestHandlerInterface;
18
19
/**
20
 * Class StatusCodeMiddleware
21
 *
22
 * @package CoiSA\Http\Middleware
23
 */
24
final class StatusCodeMiddleware implements MiddlewareInterface
25
{
26
    /**
27
     * @var int
28
     */
29
    private $statusCode;
30
31
    /**
32
     * StatusCodeMiddleware constructor.
33
     *
34
     * @param int $statusCode
35
     *
36
     * @throws \ReflectionException
37
     */
38
    public function __construct(int $statusCode)
39
    {
40
        $this->statusCode = $statusCode;
41
42
        $reflection    = new \ReflectionClass(StatusCodeInterface::class);
43
        $allowedStatus = $reflection->getConstants();
44
45
        if (!\in_array($this->statusCode, $allowedStatus)) {
46
            throw new \UnexpectedValueException('Invalid HTTP Status Code');
47
        }
48
    }
49
50
    /**
51
     * {@inheritdoc}
52
     */
53
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
54
    {
55
        return $handler->handle($request)
56
            ->withStatus($this->statusCode);
57
    }
58
}
59