Passed
Push — master ( 9976ca...2f124f )
by Jean-Christophe
03:20
created

RestControllerParser::parse()   B

Complexity

Conditions 7
Paths 8

Size

Total Lines 17
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 27.6718

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 17
ccs 4
cts 16
cp 0.25
rs 8.8333
c 0
b 0
f 0
cc 7
nc 8
nop 2
crap 27.6718
1
<?php
2
3
namespace Ubiquity\cache\parser;
4
5
use Ubiquity\orm\parser\Reflexion;
6
use Ubiquity\cache\ClassUtils;
7
8
class RestControllerParser {
9
	private $controllerClass;
10
	private $resource;
11
	private $route;
12
	private $rest;
13
	private $authorizationMethods;
14
15 1
	public function __construct() {
16 1
		$this->rest=false;
17 1
		$this->authorizationMethods=[ ];
18 1
	}
19
20 1
	public function parse($controllerClass, $config) {
21 1
		$this->controllerClass=$controllerClass;
22 1
		$reflect=new \ReflectionClass($controllerClass);
23 1
		if (!$reflect->isAbstract() && $reflect->isSubclassOf("Ubiquity\\controllers\\rest\\RestController")) {
24
			$restAnnotsClass=Reflexion::getAnnotationClass($controllerClass, "@rest");
25
			if (\sizeof($restAnnotsClass) > 0) {
26
				$routeAnnotsClass=Reflexion::getAnnotationClass($controllerClass, "@route");
27
				if (\sizeof($routeAnnotsClass) > 0) {
28
					$this->route=$routeAnnotsClass[0]->path;
29
				}
30
				$this->resource=$this->_getResourceName($config, $restAnnotsClass[0]->resource);
31
				$this->rest=true;
32
				$methods=Reflexion::getMethods($controllerClass, \ReflectionMethod::IS_PUBLIC);
33
				foreach ( $methods as $method ) {
34
					$annots=Reflexion::getAnnotationsMethod($controllerClass, $method->name, "@authorization");
35
					if ($annots !== false) {
36
						$this->authorizationMethods[]=$method->name;
37
					}
38
				}
39
			}
40
		}
41 1
	}
42
43
	private function _getResourceName($config, $name) {
44
		$modelsNS=$config["mvcNS"]["models"];
45
		return ClassUtils::getClassNameWithNS($modelsNS, $name);
46
	}
47
48
	public function asArray() {
49
		return [ $this->controllerClass => [ "resource" => $this->resource,"authorizations" => $this->authorizationMethods,"route" => $this->route ] ];
50
	}
51
52 1
	public function isRest() {
53 1
		return $this->rest;
54
	}
55
}
56