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

RouterModifierTrait::_addRoute()   B

Complexity

Conditions 7
Paths 14

Size

Total Lines 25
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 21.5206

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
dl 0
loc 25
ccs 6
cts 18
cp 0.3333
rs 8.8333
c 1
b 0
f 0
cc 7
nc 14
nop 12
crap 21.5206

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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