Passed
Push — master ( 3a5a7b...e59e29 )
by Jean-Christophe
13:15
created

RouterModifierTrait   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 98
Duplicated Lines 0 %

Test Coverage

Coverage 66.67%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 23
eloc 43
dl 0
loc 98
ccs 42
cts 63
cp 0.6667
rs 10
c 2
b 0
f 0

12 Methods

Rating   Name   Duplication   Size   Complexity  
A addRoute() 0 2 1
A post() 0 2 1
A patch() 0 2 1
A addCallableRoute() 0 5 2
A options() 0 2 1
A put() 0 2 1
A get() 0 2 1
A _addCallableRoute() 0 5 2
A addRoutesToRoutes() 0 5 3
A addRouteToRoutes() 0 5 2
A delete() 0 2 1
B _addRoute() 0 25 7
1
<?php
2
3
namespace Ubiquity\controllers\traits;
4
5
use Ubiquity\cache\parser\ControllerParser;
6
use Ubiquity\cache\parser\CallableParser;
7
8
/**
9
 * Ubiquity\controllers\traits$RouterModifierTrait
10
 * This class is part of Ubiquity
11
 *
12
 * @author jcheron <[email protected]>
13
 * @version 1.0.3
14
 *
15
 */
16
trait RouterModifierTrait {
17
18
	/**
19
	 *
20
	 * @param string $path
21
	 * @param string $controller
22
	 * @param string $action
23
	 * @param array|null $methods
24
	 * @param string $name
25
	 * @param boolean $cache
26
	 * @param int $duration
27
	 * @param array $requirements
28
	 */
29 37
	public static function addRoute($path, $controller, $action = "index", $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
30 37
		self::addRouteToRoutes ( self::$routes, $path, $controller, $action, $methods, $name, $cache, $duration, $requirements, $priority );
31 37
	}
32
33 37
	public static function addRouteToRoutes(&$routesArray, $path, $controller, $action = "index", $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0, $callback = null) {
34 37
		if (\class_exists ( $controller )) {
35 37
			$method = new \ReflectionMethod ( $controller, $action );
36 37
			$path = ControllerParser::parseMethodPath ( $method, $path );
37 37
			self::_addRoute ( $method, $routesArray, $path, $controller, $action, $methods, $name, $cache, $duration, $requirements, $priority, $callback );
38
		}
39 37
	}
40
41 37
	private static function _addRoute(\ReflectionMethod $method, &$routesArray, $path, $controller, $action = "index", $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0, $callback = null) {
42 37
		$result = [ ];
43 37
		ControllerParser::parseRouteArray ( $result, $controller, [ "path" => $path,"methods" => $methods,"name" => $name,"cache" => $cache,"duration" => $duration,"requirements" => $requirements,"priority" => $priority,"callback" => $callback ], $method, $action );
44 37
		if ($priority <= 0) {
45 37
			foreach ( $result as $k => $v ) {
46 37
				$routesArray [$k] = $v;
47
			}
48
		} else {
49 1
			$count = \count ( $routesArray );
50 1
			$newArray = [ ];
51 1
			foreach ( $routesArray as $k => $v ) {
52 1
				if ($priority < $count --) {
53
					$newArray [$k] = $v;
54
				} else {
55 1
					break;
56
				}
57
			}
58 1
			$routesArray = array_diff_key ( $routesArray, $newArray );
59 1
			foreach ( $result as $k => $v ) {
60 1
				$newArray [$k] = $v;
61
			}
62 1
			foreach ( $routesArray as $k => $v ) {
63 1
				$newArray [$k] = $v;
64
			}
65 1
			$routesArray = $newArray;
66
		}
67 37
	}
68
69 37
	public static function addCallableRoute($path, $callable, $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
70 37
		if (is_callable ( $callable )) {
71 37
			$reflectionFunction = new \ReflectionFunction ( $callable );
72 37
			$path = ControllerParser::parseMethodPath ( $reflectionFunction, $path );
73 37
			self::_addCallableRoute ( $reflectionFunction, self::$routes, $path, $callable, $methods, $name, $cache, $duration, $requirements, $priority );
74
		}
75 37
	}
76
77 37
	public static function get($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
78 37
		self::addCallableRoute ( $path, $callable, [ 'get' ], $name, $cache, $duration, $requirements, $priority );
79 37
	}
80
81
	public static function post($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
82
		self::addCallableRoute ( $path, $callable, [ 'post' ], $name, $cache, $duration, $requirements, $priority );
83
	}
84
85
	public static function delete($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
86
		self::addCallableRoute ( $path, $callable, [ 'delete' ], $name, $cache, $duration, $requirements, $priority );
87
	}
88
89
	public static function put($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
90
		self::addCallableRoute ( $path, $callable, [ 'put' ], $name, $cache, $duration, $requirements, $priority );
91
	}
92
93
	public static function patch($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
94
		self::addCallableRoute ( $path, $callable, [ 'patch' ], $name, $cache, $duration, $requirements, $priority );
95
	}
96
97
	public static function options($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
98
		self::addCallableRoute ( $path, $callable, [ 'options' ], $name, $cache, $duration, $requirements, $priority );
99
	}
100
101 37
	private static function _addCallableRoute(\ReflectionFunction $reflectionFunction, &$routesArray, $path, $callable, $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
102 37
		$result = [ ];
103 37
		CallableParser::parseRouteArray ( $result, $callable, [ "path" => $path,"methods" => $methods,"name" => $name,"cache" => $cache,"duration" => $duration,"requirements" => $requirements,"priority" => $priority ], $reflectionFunction );
104 37
		foreach ( $result as $k => $v ) {
105 37
			$routesArray [$k] = $v;
106
		}
107 37
	}
108
109
	public static function addRoutesToRoutes(&$routesArray, $paths, $controller, $action = "index", $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
110
		if (\class_exists ( $controller )) {
111
			$method = new \ReflectionMethod ( $controller, $action );
112
			foreach ( $paths as $path ) {
113
				self::_addRoute ( $method, $routesArray, $path, $controller, $action, $methods, $name, $cache, $duration, $requirements, $priority );
114
			}
115
		}
116
	}
117
}
118
119