Config::loadFromArray()   A
last analyzed

Complexity

Conditions 5
Paths 5

Size

Total Lines 25
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 5.0113

Importance

Changes 0
Metric Value
eloc 12
dl 0
loc 25
ccs 12
cts 13
cp 0.9231
rs 9.5555
c 0
b 0
f 0
cc 5
nc 5
nop 2
crap 5.0113
1
<?php
2
namespace DevOp\Core;
3
4
class Config
5
{
6
7
    /**
8
     * @var mixed
9
     */
10
    private $container = [];
11
12
    /**
13
     * @param mixed $resources
14
     * @param string|null $environment
15
     * @param array|null $params
16
     */
17 12
    public function __construct($resources, $environment = null, array $params = [])
18
    {
19 12
        $this->load($resources, $environment, $params);
20 12
    }
21
22
    /**
23
     * @param string $name
24
     * @return boolean
25
     */
26 6
    public function has($name)
27
    {
28 6
        return isset($this->container[$name]);
29
    }
30
31
    /**
32
     * @param string $name
33
     * @param mixed $default
34
     * @return mixed
35
     */
36 6
    public function get($name, $default = null)
37
    {
38 6
        if ($this->has($name)) {
39 6
            return $this->container[$name];
40
        }
41
42
        return $default;
43
    }
44
45
    /**
46
     * @param string $name
47
     * @param mixed $args
48
     */
49 2
    public function set($name, $args)
50
    {
51 2
        $this->container[$name] = $args;
52
53 2
        return $this;
54
    }
55
56
    /**
57
     * @return mixed
58
     */
59 2
    public function all()
60
    {
61 2
        return $this->container;
62
    }
63
64
    /**
65
     * @param mixed $resources
66
     * @param string|null $environment
67
     * @param array $params
68
     * @return Config
69
     */
70 12
    public static function init($resources, $environment = null, array $params = [])
71
    {
72 12
        return new Config($resources, $environment, $params);
73
    }
74
    
75
    /**
76
     * @param mixed $resources
77
     * @param string|null $environment
78
     * @param array $params
79
     * @return Config
80
     * @throws \RuntimeException
81
     */
82 12
    public function load($resources, $environment = null, array $params = [])
83
    {
84
85 12
        if (is_array($resources)) {
86 12
            $data = $this->loadFromArray($resources, $environment);
87 2
        } else if (file_exists($resources)) {
88
            $data = $this->loadFromArray([$resources], $environment);
89
        } else {
90 2
            throw new \RuntimeException('Invalid configuration source defined.');
91
        }
92
93 12
        $this->container = array_replace_recursive($data, $params);
94
        
95 12
        return $this;
96
    }
97
98
    /**
99
     * @param array $resources
100
     * @param string|null $environment
101
     * @return mixed
102
     * @throws \InvalidArgumentException
103
     */
104 12
    private function loadFromArray(array $resources = [], $environment = null)
105
    {
106 12
        $data = [];
107
108 12
        foreach ($resources AS $resource) {
109
            
110 12
            if (!file_exists($resource)) {
111
                throw new \InvalidArgumentException("Invalid resource {$resource}");
112
            }
113
114 12
            $data = array_replace_recursive($data, include $resource);
115
116 12
            if (null === $environment) {
117 2
                continue;
118
            }
119
120 12
            $pathinfo = pathinfo($resource);
121 12
            $filename = "{$pathinfo['filename']}_{$environment}.{$pathinfo['extension']}";
122
123 12
            if (file_exists($filename)) {
124 6
                $data = array_replace_recursive($data, include $filename);
125
            }
126
        }
127
128 12
        return $data;
129
    }
130
}
131