Completed
Push — master ( d2e043...09ed12 )
by Changwan
12:25
created

Route::middleware()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3.0261

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 4
nop 2
dl 0
loc 10
ccs 6
cts 7
cp 0.8571
crap 3.0261
rs 9.4285
c 0
b 0
f 0
1
<?php
2
namespace Wandu\Router;
3
4
use Psr\Http\Message\ServerRequestInterface;
5
use Wandu\Router\Contracts\ClassLoaderInterface;
6
use Wandu\Router\Contracts\ResponsifierInterface;
7
8
class Route
9
{
10
    /**
11
     * @param array $dataSet
12
     * @return static
13
     */
14 2
    public static function __set_state(array $dataSet)
15
    {
16 2
        return new static(
17 2
            $dataSet['className'],
18 2
            $dataSet['methodName'],
19 2
            $dataSet['middlewares']
20
        );
21
    }
22
23
    /** @var string */
24
    protected $className;
25
26
    /** @var string */
27
    protected $methodName;
28
29
    /** @var array */
30
    protected $middlewares;
31
32
    /**
33
     * @param string $className
34
     * @param string $methodName
35
     * @param array $middlewares
36
     */
37 26
    public function __construct($className, $methodName, array $middlewares = [])
38
    {
39 26
        $this->className = $className;
40 26
        $this->methodName = $methodName;
41 26
        $this->middlewares = $middlewares;
42 26
    }
43
44
    /**
45
     * @param string|array $middlewares
46
     * @param bool $overwrite
47
     * @return \Wandu\Router\Route
48
     */
49 1
    public function middleware($middlewares, $overwrite = false)
50
    {
51 1
        if (is_string($middlewares)) {
52 1
            $middlewares = [$middlewares];
53
        }
54 1
        $this->middlewares = $overwrite
55
            ? $middlewares
56 1
            : array_merge($this->middlewares, $middlewares);
57 1
        return $this;
58
    }
59
60
    /**
61
     * @param \Psr\Http\Message\ServerRequestInterface $request
62
     * @param \Wandu\Router\Contracts\ClassLoaderInterface|null $loader
63
     * @param \Wandu\Router\Contracts\ResponsifierInterface|null $responsifier
64
     * @return \Psr\Http\Message\ResponseInterface
65
     */
66 25
    public function execute(
67
        ServerRequestInterface $request,
68
        ClassLoaderInterface $loader = null,
69
        ResponsifierInterface $responsifier = null
70
    ) {
71 25
        $pipeline = new RouteExecutor($loader, $responsifier);
72 25
        return $pipeline->execute($request, $this->className, $this->methodName, $this->middlewares);
73
    }
74
}
75