Passed
Branch master (941c30)
by Jean-Christophe
08:38
created

RouterModifierTrait   A

Complexity

Total Complexity 23

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Test Coverage

Coverage 47.54%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 23
eloc 41
dl 0
loc 96
ccs 29
cts 61
cp 0.4754
rs 10
c 1
b 0
f 0

12 Methods

Rating   Name   Duplication   Size   Complexity  
A addRouteToRoutes() 0 4 2
A addRoute() 0 2 1
A post() 0 2 1
A patch() 0 2 1
A addCallableRoute() 0 4 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 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.2
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 36
	public static function addRoute($path, $controller, $action = "index", $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
30 36
		self::addRouteToRoutes ( self::$routes, $path, $controller, $action, $methods, $name, $cache, $duration, $requirements, $priority );
31 36
	}
32
33 36
	public static function addRouteToRoutes(&$routesArray, $path, $controller, $action = "index", $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0, $callback = null) {
34 36
		if (\class_exists ( $controller )) {
35 36
			$method = new \ReflectionMethod ( $controller, $action );
36 36
			self::_addRoute ( $method, $routesArray, $path, $controller, $action, $methods, $name, $cache, $duration, $requirements, $priority, $callback );
37
		}
38 36
	}
39
40 36
	private static function _addRoute(\ReflectionMethod $method, &$routesArray, $path, $controller, $action = "index", $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0, $callback = null) {
41 36
		$result = [ ];
42 36
		ControllerParser::parseRouteArray ( $result, $controller, [ "path" => $path,"methods" => $methods,"name" => $name,"cache" => $cache,"duration" => $duration,"requirements" => $requirements,"priority" => $priority,"callback" => $callback ], $method, $action );
43 36
		if ($priority <= 0) {
44 36
			foreach ( $result as $k => $v ) {
45 36
				$routesArray [$k] = $v;
46
			}
47
		} else {
48
			$count = \count ( $routesArray );
49
			$newArray = [ ];
50
			foreach ( $routesArray as $k => $v ) {
51
				if ($priority < $count --) {
52
					$newArray [$k] = $v;
53
				} else {
54
					break;
55
				}
56
			}
57
			$routesArray = array_diff_key ( $routesArray, $newArray );
58
			foreach ( $result as $k => $v ) {
59
				$newArray [$k] = $v;
60
			}
61
			foreach ( $routesArray as $k => $v ) {
62
				$newArray [$k] = $v;
63
			}
64
			$routesArray = $newArray;
65
		}
66 36
	}
67
68 36
	public static function addCallableRoute($path, $callable, $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
69 36
		if (is_callable ( $callable )) {
70 36
			$reflectionFunction = new \ReflectionFunction ( $callable );
71 36
			self::_addCallableRoute ( $reflectionFunction, self::$routes, $path, $callable, $methods, $name, $cache, $duration, $requirements, $priority );
72
		}
73 36
	}
74
75 36
	public static function get($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
76 36
		self::addCallableRoute ( $path, $callable, [ 'get' ], $name, $cache, $duration, $requirements, $priority );
77 36
	}
78
79
	public static function post($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
80
		self::addCallableRoute ( $path, $callable, [ 'post' ], $name, $cache, $duration, $requirements, $priority );
81
	}
82
83
	public static function delete($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
84
		self::addCallableRoute ( $path, $callable, [ 'delete' ], $name, $cache, $duration, $requirements, $priority );
85
	}
86
87
	public static function put($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
88
		self::addCallableRoute ( $path, $callable, [ 'put' ], $name, $cache, $duration, $requirements, $priority );
89
	}
90
91
	public static function patch($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
92
		self::addCallableRoute ( $path, $callable, [ 'patch' ], $name, $cache, $duration, $requirements, $priority );
93
	}
94
95
	public static function options($path, $callable, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
96
		self::addCallableRoute ( $path, $callable, [ 'options' ], $name, $cache, $duration, $requirements, $priority );
97
	}
98
99 36
	private static function _addCallableRoute(\ReflectionFunction $reflectionFunction, &$routesArray, $path, $callable, $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
100 36
		$result = [ ];
101 36
		CallableParser::parseRouteArray ( $result, $callable, [ "path" => $path,"methods" => $methods,"name" => $name,"cache" => $cache,"duration" => $duration,"requirements" => $requirements,"priority" => $priority ], $reflectionFunction );
102 36
		foreach ( $result as $k => $v ) {
103 36
			$routesArray [$k] = $v;
104
		}
105 36
	}
106
107
	public static function addRoutesToRoutes(&$routesArray, $paths, $controller, $action = "index", $methods = null, $name = "", $cache = false, $duration = null, $requirements = [], $priority = 0) {
108
		if (\class_exists ( $controller )) {
109
			$method = new \ReflectionMethod ( $controller, $action );
110
			foreach ( $paths as $path ) {
111
				self::_addRoute ( $method, $routesArray, $path, $controller, $action, $methods, $name, $cache, $duration, $requirements, $priority );
112
			}
113
		}
114
	}
115
}
116
117