LaragenOptions::getInstance()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 3
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 6
rs 10
1
<?php
2
namespace Prateekkarki\Laragen\Models;
3
use Prateekkarki\Laragen\Models\Module;
4
5
class LaragenOptions
6
{
7
    protected $modules;
8
    protected $options;
9
    private static $instance;
10
11
    private function __construct()
12
    {
13
        $this->options = config('laragen.options');
14
15
        $this->modules = [];
16
        foreach ($this->getValidatedModules() as $moduleName => $moduleData) {
17
            $this->modules = array_merge($this->modules, $this->getModulesRecursive($moduleName, $moduleData));
18
        }
19
    }
20
21
    private function getValidatedModules()
22
    {
23
        // ToDo: Validate laragen.modules
24
        return config('laragen.modules');
25
    }
26
27
    public static function getInstance()
28
    {
29
        if (!isset(self::$instance)) {
30
            self::$instance = new LaragenOptions();
31
        }
32
        return self::$instance;
33
    }
34
35
    public function getOptions() {
36
        return $this->options;
37
    }
38
39
    public function getOption($option) {
40
        return $this->options[$option] ?? null;
41
    }
42
43
    public function getModules() {
44
        return $this->modules;
45
    }
46
47
    public function getModule($name) {
48
        if(isset($this->modules[$name])){
49
            return $this->modules[$name];
50
        }
51
        else{
52
            throw new \Exception("Module '". $name. "' not found");
53
        }
54
    }
55
56
    protected function getModulesRecursive($moduleName, $moduleData) {
57
        $modules = [];
58
        $module = new Module($moduleName, $moduleData);
59
        $childColumns = $module->getFilteredColumns(['isMultipleType', 'hasMultipleFiles']);
60
        $modules[$moduleName] = $module;
61
        foreach ($childColumns as $childColumn) {
62
            $modules = array_merge($modules, $this->getModulesRecursive($childColumn->getPivotTable(), $childColumn->getLaragenColumns()));
63
        }
64
        return $modules;
65
    }
66
67
    public function getGenerators() {
68
        return $this->configToGenerators($this->options['items_to_generate']);
69
    }
70
71
    public function generatorExists($str) {
72
        foreach ($this->getGenerators() as $generator) {
73
            if (substr($generator, -strlen($str)) === $str) {
74
                return true;
75
            }
76
        }
77
        return false;
78
    }
79
80
    protected function configToGenerators($array) {
81
        $generators = [];
82
        foreach ($array as $ns => $items) {
83
            foreach ($items as $item) {
84
                $generators[] = "\\Prateekkarki\\Laragen\\Generators\\".$ns."\\".$item;
85
            }
86
        }
87
        return $generators;
88
    }
89
}
90