RequestHandler   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Test Coverage

Coverage 92.31%

Importance

Changes 0
Metric Value
eloc 15
c 0
b 0
f 0
dl 0
loc 41
ccs 12
cts 13
cp 0.9231
rs 10
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A handle() 0 13 3
1
<?php
2
/**
3
 * @author  PhileCMS
4
 * @link    https://philecms.github.io
5
 * @license http://opensource.org/licenses/MIT
6
 */
7
8
namespace Phile\Http;
9
10
use Psr\Http\Message\ResponseFactoryInterface;
11
use Psr\Http\Message\ResponseInterface;
12
use Psr\Http\Message\ServerRequestInterface;
13
use Psr\Http\Server\RequestHandlerInterface;
14
15
/**
16
 * Implements a PSR-15 compatible request handler
17
 */
18
class RequestHandler implements RequestHandlerInterface
19
{
20
    /** @var \Iterator the middleware to process */
21
    protected $queue;
22
23
    /** @var ResponseFactoryInterface PSR-17 HTTP response factory */
24
    protected $responseFactory;
25
26
    /** @var integer level */
27
    protected $level = 0;
28
29
    /**
30
     * Constructor
31
     *
32
     * @param ResponseFactoryInterface $responseFactory
33
     */
34 8
    public function __construct(MiddlewareQueue $queue, ResponseFactoryInterface $responseFactory)
35
    {
36 8
        $this->responseFactory = $responseFactory;
37 8
        $this->queue = $queue->getIterator();
38
    }
39
40
    /**
41
     * Handle the request and return a response.
42
     *
43
     * @param ServerRequestInterface $request
44
     * @return ResponseInterface
45
     */
46 8
    public function handle(ServerRequestInterface $request): ResponseInterface
47
    {
48 8
        if ($this->level++ === 0) {
49 8
            $this->queue->rewind();
50
        }
51 8
        $current = $this->queue->current();
52 8
        if (!$current) {
53
            return $this->responseFactory->createResponse();
54
        }
55 8
        $this->queue->next();
56 8
        $result = call_user_func_array([$current, 'process'], [$request, $this]);
57 5
        $this->level--;
58 5
        return $result;
59
    }
60
}
61