ModuleControllerStage   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Test Coverage

Coverage 92.86%

Importance

Changes 2
Bugs 0 Features 1
Metric Value
eloc 21
c 2
b 0
f 1
dl 0
loc 63
ccs 26
cts 28
cp 0.9286
rs 10
wmc 15

5 Methods

Rating   Name   Duplication   Size   Complexity  
A processCommand() 0 4 3
A prepareClassAction() 0 5 3
A hasControllerName() 0 7 3
A parseActionForController() 0 13 5
A saveClassesInAction() 0 5 1
1
<?php
2
3
namespace Nip\Dispatcher\Resolver\Pipeline\Stages;
4
5
use Nip\Controllers\Controller;
6
use Nip\Dispatcher\Resolver\ClassResolver\NameGenerator;
7
8
/**
9
 * Class ModuleControllerStage
10
 * @package Nip\Dispatcher\Resolver\Pipeline\Stages
11
 */
12
class ModuleControllerStage extends AbstractStage
13
{
14
    /**
15
     * @return void
16
     * @throws \Exception
17
     */
18 4
    public function processCommand()
19
    {
20 4
        if (!$this->hasInstanceAction() && $this->hasControllerName()) {
21 2
            $this->parseActionForController();
22
        }
23 4
    }
24
25
    /**
26
     * @return bool
27
     */
28 3
    public function hasControllerName()
29
    {
30 3
        $action = $this->getCommand()->getAction();
31 3
        if (is_array($action) && isset($action['controller'])) {
32 2
            return true;
33
        }
34 1
        return false;
35
    }
36
37
    /**
38
     * @throws \Exception
39
     */
40 2
    public function parseActionForController()
41
    {
42 2
        $action = $this->getCommand()->getAction();
43 2
        $module = isset($action['module']) ? $action['module'] : '';
44 2
        $controller = isset($action['controller']) ? $action['controller'] : '';
45
46 2
        if (class_exists($controller) && is_subclass_of($controller, Controller::class)) {
47
            $this->getCommand()->setActionParam('class', [$controller]);
48
            return;
49
        }
50
51 2
        $classes = NameGenerator::generateClasses($module, $controller);
52 2
        $this->saveClassesInAction($classes);
53 2
    }
54
55
    /**
56
     * @param $classes
57
     * @throws \Exception
58
     */
59 2
    protected function saveClassesInAction($classes)
60
    {
61 2
        $class = $this->prepareClassAction($this->getCommand()->getActionParam('class'));
62 2
        $class = array_merge($class, $classes);
63 2
        $this->getCommand()->setActionParam('class', $class);
64 2
    }
65
66
    /**
67
     * @param $class
68
     * @return array|null
69
     */
70 2
    protected function prepareClassAction($class)
71
    {
72 2
        $class = $class != null ? $class : [];
73 2
        $class = is_array($class) ? $class : [$class];
74 2
        return $class;
75
    }
76
}
77