Test Setup Failed
Push — master ( ecdc34...0769f8 )
by Gabriel
02:46 queued 11s
created

HasBaseRoutesTrait::generateStandardRoute()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 6
dl 0
loc 15
ccs 6
cts 6
cp 1
crap 2
rs 9.7666
c 0
b 0
f 0
1
<?php
2
3
namespace Nip\Router\RouteFactory;
4
5
use Nip\Router\Route\LiteralRoute;
6
use Nip\Router\Route\Route;
7
use Nip\Router\Route\StandardRoute;
8
use Nip\Router\RouteCollection;
9
10
/**
11
 * Trait HasBaseRoutesTrait
12
 * @package Nip\Router\RouteFactory
13
 */
14
trait HasBaseRoutesTrait
15
{
16
17
    /**
18
     * @param RouteCollection $collection
19
     * @param $name
20
     * @param $class
21
     * @param string $mapPrefix
22
     * @return mixed
23
     */
24 7
    public static function generateIndexRoute(
25
        $collection,
26
        $name,
27
        $class = null,
28
        $mapPrefix = ''
29
    ) {
30 7
        $params = ["controller" => "index", "action" => "index"];
31
32 7
        self::generateLiteralRoute(
33 7
            $collection, $name . '.slash', $class, $mapPrefix, '', $params
34
        );
35
36 7
        return self::generateLiteralRoute(
37 7
            $collection, $name, $class, $mapPrefix, '/', $params
38
        );
39
    }
40
41
    /**
42
     * @param RouteCollection $collection
43
     * @param $name
44
     * @param $class
45
     * @param string $mapPrefix
46
     * @param string $map
47
     * @param array $params
48
     * @return mixed
49
     */
50 13
    public static function generateLiteralRoute(
51
        $collection,
52
        $name,
53
        $class = null,
54
        $mapPrefix = '',
55
        $map = '/',
56
        $params = []
57
    ) {
58 13
        $map = $mapPrefix . $map;
59 13
        $class = empty($class) ? LiteralRoute::class : $class;
60
61 13
        return self::generateGenericRoute($collection, $name, $class, $map, $params);
62
    }
63
64
    /**
65
     * @param RouteCollection $collection
66
     * @param $name
67
     * @param $class
68
     * @param string $map
69
     * @param array $params
70
     * @return mixed
71
     */
72 25
    public static function generateGenericRoute(
73
        $collection,
74
        $name,
75
        $class = null,
76
        $map,
77
        $params = []
78
    ) {
79 25
        $map = str_replace('//', '/', $map);
80 25
        $class = static::generateRouteClassName($class);
81
82 25
        $route = new $class($map, $params);
83 25
        return $collection->addRoute($route, $name);
84
    }
85
86
    /**
87
     * @param RouteCollection $collection
88
     * @param $name
89
     * @param $class
90
     * @param string $mapPrefix
91
     * @param string $map
92
     * @param array $params
93
     */
94 18
    public static function generateStandardRoute(
95
        $collection,
96
        $name,
97
        $class = null,
98
        $mapPrefix = '',
99
        $map = '/{controller}/{action?index}',
100
        $params = []
101
    ) {
102 18
        $class = empty($class) ? StandardRoute::class : $class;
103 18
        self::generateGenericRoute($collection, $name, $class, $mapPrefix . $map, $params);
104
105 18
        $params['action'] = 'index';
106 18
        self::generateGenericRoute($collection, $name . '.index', $class, $mapPrefix . '/{controller}/',
107
            $params);
108 18
    }
109
110
    /**
111
     * @param null $class
112
     * @return string
113
     */
114 25
    protected static function generateRouteClassName($class = null)
115
    {
116 25
        if (empty($class)) {
117
            return Route::class;
118
        }
119
120 25
        if (class_exists($class)) {
121 21
            return $class;
122
        }
123
124
        $maps = [
125 4
            LiteralRoute::class => ['_Literal', '\Literal'],
126
            StandardRoute::class => ['_Standard', '\Standard']
127
        ];
128 4
        foreach ($maps as $routeClass => $needles) {
129 4
            foreach ($needles as $needle) {
130 4
                if (strpos($class, $needle) !== false) {
131 4
                    return $routeClass;
132
                }
133
            }
134
        }
135
136
        return Route::class;
137
    }
138
}
139