Module::buildModuleFromData()   B
last analyzed

Complexity

Conditions 6
Paths 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 9
cts 9
cp 1
rs 8.8571
c 0
b 0
f 0
cc 6
eloc 9
nc 1
nop 1
crap 6
1
<?php
2
namespace Samurai\Module;
3
4
use Samurai\Alias\Alias;
5
6
/**
7
 * Class Module
8
 * @package Samurai\module
9
 * @author Raphaël Lefebvre <[email protected]>
10
 */
11
class Module extends Alias
12
{
13
    /**
14
     * @var bool
15
     */
16
    private $isEnable;
17
18
    /**
19
     * modules which must be executed before the current module.
20
     *
21
     * @var Modules
22
     */
23
    private $dependencies = [];
24
25
    /**
26
     * commands to run for the current module.
27
     *
28
     * @var array
29
     */
30
    private $tasks = [];
31
32
    /**
33
     * constructor
34
     */
35 40
    public function __construct()
36
    {
37 40
        $this->setDependencies(new Modules());
38 40
    }
39
40
    /**
41
     * Getter of $isEnable
42
     *
43
     * @return boolean
44
     */
45 14
    public function isEnable()
46
    {
47 14
        return $this->isEnable;
48
    }
49
50
    /**
51
     * Getter of $isEnable
52
     *
53
     * @return boolean
54
     */
55
    public function getIsEnable()
56
    {
57
        return $this->isEnable;
58
    }
59
60
    /**
61
     * Setter of $isEnable
62
     *
63
     * @param boolean $isEnable
64
     */
65 23
    public function setIsEnable($isEnable)
66
    {
67 23
        $this->isEnable = (boolean)$isEnable;
68 23
    }
69
    /**
70
     * Getter of $dependencyNames
71
     *
72
     * @return Modules
73
     */
74 17
    public function getDependencies()
75
    {
76 17
        return $this->dependencies;
77
    }
78
79
    /**
80
     * Setter of $dependencyNames
81
     *
82
     * @param Modules $dependencies
83
     */
84 40
    public function setDependencies($dependencies)
85
    {
86 40
        if(is_array($dependencies)){//todo should not be allowed + unit test with the ModuleManager!
87 5
            $dependencies = $this->buildModulesFromData($dependencies);
88 5
        }
89 40
        $this->dependencies = $dependencies;
90 40
    }
91
92
    /**
93
     * @param Modules $modules
94
     * @return Modules
95
     */
96 6
    public function retrieveDependents(Modules $modules)
97
    {
98 6
        $dependents = new Modules();
99
        /**
100
         * @var Module[] $modules
101
         */
102 6
        foreach($modules as $key => $module) {
103 4
            foreach($module->getDependencies() as $dependency){
104 2
                if($dependency->getPackage() === $this->getPackage()){
105 2
                    $dependents[$key] = $module;
106 2
                }
107 4
            }
108 6
        }
109 6
        return $dependents;
110
    }
111
112
    /**
113
     * Getter of $tasks
114
     *
115
     * @return array
116
     */
117 12
    public function getTasks()
118
    {
119 12
        return $this->tasks;
120
    }
121
122
    /**
123
     * Setter of $tasks
124
     *
125
     * @param array $tasks
126
     */
127 11
    public function setTasks(array $tasks)
128
    {
129 11
        $this->tasks = $tasks;
130 11
    }
131
132
    /**
133
     * @return array
134
     */
135 9
    public function toArray()
136
    {
137 9
        return array_merge(
138 9
            parent::toArray(),
139
            [
140 9
                'isEnable' => $this->isEnable(),
141 9
                'tasks' => $this->getTasks(),
142 9
                'dependencies' => $this->getDependencies()->toArray()
143 9
            ]
144 9
        );
145
    }
146
147
    /**
148
     * @param array $dependenciesData
149
     * @return Modules
150
     */
151 5
    private function buildModulesFromData(array $dependenciesData)
152
    {
153 5
        $modules = new Modules();
154 5
        foreach ($dependenciesData as $key => $dependencyData) {
155 2
            $modules[$key] = $this->buildModuleFromData($dependencyData);
156 5
        }
157 5
        return $modules;
158
    }
159
160
    /**
161
     * @param array $data
162
     * @return Module
163
     */
164 2
    private function buildModuleFromData(array $data)
165
    {
166 2
        $module = new Module();
167 2
        $module->setName(!empty($data['name']) ? $data['name'] : null);
168 2
        $module->setPackage(!empty($data['package']) ? $data['package'] : null);
169 2
        $module->setVersion(!empty($data['version']) ? $data['version'] : null);
170 2
        $module->setDescription(!empty($data['description']) ? $data['description'] : null);
171 2
        $module->setSource(!empty($data['source']) ? $data['source'] : null);
172 2
        $module->setIsEnable(true);
173 2
        return $module;
174
    }
175
}
176