Completed
Push — master ( 6e909e...c441c1 )
by Phil
03:17
created

Route::dispatch()   C

Complexity

Conditions 13
Paths 60

Size

Total Lines 42
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 30
CRAP Score 13

Importance

Changes 5
Bugs 2 Features 1
Metric Value
c 5
b 2
f 1
dl 0
loc 42
ccs 30
cts 30
cp 1
rs 5.1234
cc 13
eloc 23
nc 60
nop 3
crap 13

1 Method

Rating   Name   Duplication   Size   Complexity  
C Route::getCallable() 0 26 11

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace League\Route;
4
5
use InvalidArgumentException;
6
use League\Container\ImmutableContainerAwareInterface;
7
use League\Container\ImmutableContainerAwareTrait;
8
use League\Route\Http\RequestAwareInterface;
9
use League\Route\Http\ResponseAwareInterface;
10
use League\Route\Middleware\StackAwareInterface as MiddlewareAwareInterface;
11
use League\Route\Middleware\StackAwareTrait as MiddlewareAwareTrait;
12
use League\Route\Strategy\StrategyAwareInterface;
13
use League\Route\Strategy\StrategyAwareTrait;
14
use Psr\Http\Message\ResponseInterface;
15
use Psr\Http\Message\ServerRequestInterface;
16
17
class Route implements ImmutableContainerAwareInterface, MiddlewareAwareInterface, StrategyAwareInterface
18
{
19
    use ImmutableContainerAwareTrait;
20
    use MiddlewareAwareTrait;
21
    use RouteConditionTrait;
22
    use StrategyAwareTrait;
23
24
    /**
25
     * @var string|callable
26
     */
27
    protected $callable;
28
29
    /**
30
     * @var \League\Route\RouteGroup
31
     */
32
    protected $group;
33
34
    /**
35
     * @var string[]
36
     */
37
    protected $methods = [];
38
39
    /**
40
     * @var string
41
     */
42
    protected $path;
43
44
    /**
45
     * Dispatch the route via the attached strategy.
46
     *
47
     * @param array $vars
48
     *
49
     * @return \League\Route\Middleware\ExecutionChain
50
     */
51 6
    public function getExecutionChain(array $vars)
52
    {
53 6
        return $this->getStrategy()->getExecutionChain($this, $vars);
54
    }
55
56
    /**
57
     * Get the callable.
58
     *
59
     * @throws \RuntimeException
60
     *
61
     * @return callable
62
     */
63 24
    public function getCallable()
64
    {
65 24
        $callable = $this->callable;
66
67 24
        if (is_string($callable) && strpos($callable, '::') !== false) {
68 6
            $callable = explode('::', $callable);
69 6
        }
70
71 24
        if (is_array($callable) && isset($callable[0]) && is_object($callable[0])) {
72 3
            $callable = [$callable[0], $callable[1]];
73 3
        }
74
75 24
        if (is_array($callable) && isset($callable[0]) && is_string($callable[0])) {
76 6
            $class = ($this->getContainer()->has($callable[0]))
77 6
                   ? $this->getContainer()->get($callable[0])
78 6
                   : new $callable[0];
79
80 6
            $callable = [$class, $callable[1]];
81 6
        }
82
83 24
        if (! is_callable($callable)) {
84 3
            throw new InvalidArgumentException('Could not resolve a callable for this route');
85
        }
86
87 21
        return $callable;
88
    }
89
90
    /**
91
     * Set the callable.
92
     *
93
     * @param string|callable $callable
94
     *
95
     * @return \League\Route\Route
96
     */
97 39
    public function setCallable($callable)
98
    {
99 39
        $this->callable = $callable;
100
101 39
        return $this;
102
    }
103
104
    /**
105
     * Get the parent group.
106
     *
107
     * @return \League\Route\RouteGroup
108
     */
109 3
    public function getParentGroup()
110
    {
111 3
        return $this->group;
112
    }
113
114
    /**
115
     * Set the parent group.
116
     *
117
     * @param \League\Route\RouteGroup $group
118
     *
119
     * @return \League\Route\Route
120
     */
121 6
    public function setParentGroup(RouteGroup $group)
122
    {
123 6
        $this->group = $group;
124
125 6
        return $this;
126
    }
127
128
    /**
129
     * Get the path.
130
     *
131
     * @return string
132
     */
133 18
    public function getPath()
134
    {
135 18
        return $this->path;
136
    }
137
138
    /**
139
     * Set the path.
140
     *
141
     * @param string $path
142
     *
143
     * @return \League\Route\Route
144
     */
145 24
    public function setPath($path)
146
    {
147 24
        $this->path = $path;
148
149 24
        return $this;
150
    }
151
152
    /**
153
     * Get the methods.
154
     *
155
     * @return string[]
156
     */
157 18
    public function getMethods()
158
    {
159 18
        return $this->methods;
160
    }
161
162
    /**
163
     * Get the methods.
164
     *
165
     * @param string[] $methods
166
     *
167
     * @return \League\Route\Route
168
     */
169 24
    public function setMethods(array $methods)
170
    {
171 24
        $this->methods = $methods;
172
173 24
        return $this;
174
    }
175
}
176