ConfigHelper::generatorConfig()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 4
nop 1
dl 0
loc 14
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Lbil\LaravelGenerator\Helpers;
4
5
use Lbil\LaravelGenerator\Exceptions\LaravelGeneratorException;
6
7
class ConfigHelper
8
{
9
    /**
10
     * Get config.
11
     *
12
     * @param  string|null  $generatorName
13
     * @return array
14
     *
15
     * @throws LaravelGeneratorException
16
     */
17
    public function generatorConfig(?string $generatorName = null): array
18
    {
19
        if ($generatorName === null) {
20
            $generatorName = config('laravel-generator.default');
21
        }
22
23
        $defaults = config('laravel-generator.defaults', []);
24
        $generators = config('laravel-generator.generators', []);
25
26
        if (!isset($generators[$generatorName])) {
27
            throw new LaravelGeneratorException('Generator name not found');
28
        }
29
30
        return $this->mergeConfig($defaults, $generators[$generatorName]);
31
    }
32
33
    /**
34
     * Merge config.
35
     *
36
     * @param  array  $defaults
37
     * @param  array  $generatorName
38
     * @return array
39
     */
40
    private function mergeConfig(array $defaults, array $generatorName): array
41
    {
42
        $merged = $defaults;
43
44
        foreach ($generatorName as $key => &$value) {
45
            if (isset($defaults[$key])
46
                && $this->isAssociativeArray($defaults[$key])
47
                && $this->isAssociativeArray($value)
48
            ) {
49
                $merged[$key] = $this->mergeConfig($defaults[$key], $value);
50
                continue;
51
            }
52
53
            $merged[$key] = $value;
54
        }
55
56
        return $merged;
57
    }
58
59
    /**
60
     * Check is associative key array.
61
     *
62
     * @param  mixed  $key
63
     * @return bool
64
     */
65
    private function isAssociativeArray(mixed $key): bool
66
    {
67
        return is_array($key) && count(array_filter(array_keys($key), 'is_string')) > 0;
68
    }
69
}
70