Passed
Push — master ( 94c8c0...745243 )
by Alain
03:42
created

ConfigFactory   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 78.56%

Importance

Changes 3
Bugs 0 Features 2
Metric Value
wmc 13
c 3
b 0
f 2
lcom 1
cbo 2
dl 0
loc 107
ccs 22
cts 28
cp 0.7856
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
C createFromFile() 0 36 7
A createFromArray() 0 10 2
A create() 0 14 4
1
<?php
2
/**
3
 * Bright Nucleus Config Component.
4
 *
5
 * @package   BrightNucleus\Config
6
 * @author    Alain Schlesser <[email protected]>
7
 * @license   MIT
8
 * @link      http://www.brightnucleus.com/
9
 * @copyright 2016 Alain Schlesser, Bright Nucleus
10
 */
11
12
namespace BrightNucleus\Config;
13
14
use Exception;
15
16
/**
17
 * Create new object instances that implement ConfigInterface.
18
 *
19
 * @since   0.3.0
20
 *
21
 * @package BrightNucleus\Config
22
 * @author  Alain Schlesser <[email protected]>
23
 */
24
class ConfigFactory
25
{
26
27
    /**
28
     * Cached contents of the config files.
29
     *
30
     * @since 0.4.3
31
     *
32
     * @var array
33
     */
34
    protected static $configFilesCache = [];
35
36
    /**
37
     * Create a new ConfigInterface object from a file.
38
     *
39
     * If a comma-separated list of files is provided, they are checked in sequence until the first one could be loaded
40
     * successfully.
41
     *
42
     * @since 0.3.0
43
     *
44
     * @param string|array $_ List of files.
45
     *
46
     * @return ConfigInterface Instance of a ConfigInterface implementation.
0 ignored issues
show
Documentation introduced by
Should the return type not be Config|null?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
47
     */
48 2
    public static function createFromFile($_)
0 ignored issues
show
Unused Code introduced by
The parameter $_ is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
49
    {
50 2
        $files = array_reverse(func_get_args());
51
52 2
        if (is_array($files[0])) {
53 1
            $files = $files[0];
54
        }
55
56 2
        while (count($files) > 0) {
57
            try {
58 2
                $file = array_pop($files);
59
60 2
                if (! is_readable($file)) {
61 1
                    continue;
62
                }
63
64 2
                if (! array_key_exists($file, static::$configFilesCache)) {
65 1
                    static::$configFilesCache[$file] = Loader::load($file);
66
                }
67
68 2
                $config = static::createFromArray(
69 2
                    static::$configFilesCache[$file]
70
                );
71
72 2
                if (null === $config) {
73
                    continue;
74
                }
75
76 2
                return $config;
77
            } catch (Exception $exception) {
78
                // Fail silently and try next file.
79
            }
80
        }
81
82
        return static::createFromArray([]);
83
    }
84
85
    /**
86
     * Create a new ConfigInterface object from an array.
87
     *
88
     * @since 0.3.0
89
     *
90
     * @param array $array Array with configuration values.
91
     *
92
     * @return ConfigInterface Instance of a ConfigInterface implementation.
0 ignored issues
show
Documentation introduced by
Should the return type not be Config|null?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
93
     */
94 2
    public static function createFromArray(array $array)
95
    {
96
        try {
97 2
            return new Config($array);
98
        } catch (Exception $exception) {
99
            // Fail silently and try next file.
100
        }
101
102
        return null;
103
    }
104
105
    /**
106
     * Create a new ConfigInterface object.
107
     *
108
     * Tries to deduce the correct creation method by inspecting the provided arguments.
109
     *
110
     * @since 0.3.0
111
     *
112
     * @param mixed $_ Array with configuration values.
113
     *
114
     * @return ConfigInterface Instance of a ConfigInterface implementation.
0 ignored issues
show
Documentation introduced by
Should the return type not be Config|null?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
115
     */
116 4
    public static function create($_)
0 ignored issues
show
Unused Code introduced by
The parameter $_ is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
117
    {
118 4
        if (func_num_args() < 1) {
119
            return static::createFromArray([]);
120
        }
121
122 4
        $arguments = func_get_args();
123
124 4
        if (is_array($arguments[0]) && func_num_args() === 1) {
125 1
            return static::createFromArray($arguments[0]);
126
        }
127
128 3
        return static::createFromFile($arguments);
129
    }
130
}
131