Passed
Pull Request — master (#37)
by Eugene
09:14
created

MiddlewareHandler::__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
eloc 2
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Tarantool Client package.
7
 *
8
 * (c) Eugene Leonovich <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Tarantool\Client\Handler;
15
16
use Tarantool\Client\Connection\Connection;
17
use Tarantool\Client\Middleware\Middleware;
18
use Tarantool\Client\Packer\Packer;
19
use Tarantool\Client\Request\Request;
20
use Tarantool\Client\Response;
21
22
final class MiddlewareHandler implements Handler
23
{
24
    private $middleware;
25
    private $handler;
26
    private $connection;
27
    private $packer;
28
29 8
    public function __construct(Middleware $middleware, Handler $handler)
30
    {
31 8
        $this->middleware = $middleware;
32 8
        $this->handler = $handler;
33 8
    }
34
35 232
    public static function create(Handler $handler, array $middlewares) : Handler
36
    {
37 232
        if (!$middlewares) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $middlewares of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
38 232
            return $handler;
39
        }
40
41 8
        $middleware = \end($middlewares);
42
43 8
        while ($middleware) {
44 8
            $handler = new self($middleware, $handler);
45 8
            $middleware = \prev($middlewares);
46
        }
47
48 8
        return $handler;
49
    }
50
51 2
    public function getConnection() : Connection
52
    {
53 2
        return $this->connection ?: $this->connection = $this->handler->getConnection();
54
    }
55
56
    public function getPacker() : Packer
57
    {
58
        return $this->packer ?: $this->packer = $this->handler->getPacker();
59
    }
60
61 8
    public function handle(Request $request) : Response
62
    {
63 8
        return $this->middleware->process($request, $this->handler);
64
    }
65
}
66