Route   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 6
Bugs 1 Features 0
Metric Value
wmc 8
c 6
b 1
f 0
lcom 2
cbo 1
dl 0
loc 64
ccs 19
cts 19
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A run() 0 10 2
A shouldCompile() 0 9 2
A compileRoute() 0 6 3
A __sleep() 0 6 1
1
<?php namespace MaartenStaa\Routing;
2
3
/**
4
 * Copyright (c) 2015 by Maarten Staa.
5
 *
6
 * Some rights reserved.
7
 *
8
 * Redistribution and use in source and binary forms, with or without
9
 * modification, are permitted provided that the following conditions are
10
 * met:
11
 *
12
 *     * Redistributions of source code must retain the above copyright
13
 *       notice, this list of conditions and the following disclaimer.
14
 *
15
 *     * Redistributions in binary form must reproduce the above
16
 *       copyright notice, this list of conditions and the following
17
 *       disclaimer in the documentation and/or other materials provided
18
 *       with the distribution.
19
 *
20
 *     * The names of the contributors may not be used to endorse or
21
 *       promote products derived from this software without specific
22
 *       prior written permission.
23
 *
24
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
 */
36
37
use Illuminate\Routing\Route as LaravelRoute;
38
39
class Route extends LaravelRoute
40
{
41
    /**
42
     * Whether routes should be compiled. Laravel version dependent.
43
     *
44
     * @var null|bool
45
     */
46
    public static $shouldCompileRoute = null;
47
48
    /**
49
     * Run the route action and return the response.
50
     *
51
     * @return mixed
52
     */
53 12
    public function run()
54
    {
55 12
        $app = app();
56
57 12
        if ($app['router']->routingToController($this->action) === true) {
58 8
            $this->action = $app['router']->makeControllerActionClosure($this->action);
59 8
        }
60
61 12
        return parent::run();
62
    }
63
64
    /**
65
     * Determines whether routes should be compiled. Caches the value at a class
66
     * level.
67
     *
68
     * @return bool
69
     */
70 40
    protected function shouldCompile()
71
    {
72 40
        if (static::$shouldCompileRoute === null) {
73
            // If the compiled variable exists, we should compile.
74 4
            static::$shouldCompileRoute = array_key_exists('compiled', get_object_vars($this));
75 4
        }
76
77 40
        return static::$shouldCompileRoute;
78
    }
79
80
    /**
81
     * Compile the route into a Symfony CompiledRoute instance.
82
     */
83 40
    protected function compileRoute()
84
    {
85 40
        if ($this->shouldCompile() === true && $this->compiled === null) {
86 40
            parent::compileRoute();
87 40
        }
88 40
    }
89
90
    /**
91
     * Prepare to go to sleep. Compiles the route so that doesn't have to happen
92
     * on every subsequent request.
93
     *
94
     * @return array<string>
0 ignored issues
show
Documentation introduced by
Should the return type not be array<integer|string>?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
95
     */
96 32
    public function __sleep()
97
    {
98 32
        $this->compileRoute();
99
100 32
        return array_keys(get_object_vars($this));
101
    }
102
}
103