Completed
Pull Request — master (#33)
by Tom
03:43
created

ConfigureContainer::fromFiles()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 8
rs 9.4285
cc 1
eloc 4
nc 1
nop 3
1
<?php
2
3
namespace TomPHP\ConfigServiceProvider;
4
5
final class ConfigureContainer
6
{
7
    /**
8
     * @api
9
     *
10
     * @param object $container
11
     * @param array  $patterns
12
     * @param array  $settings
13
     *
14
     * @return void
15
     */
16
    public static function fromFiles($container, array $patterns, $settings = [])
17
    {
18
        $settings = self::prepareSettings($settings);
19
20
        $appConfig = ApplicationConfig::fromFiles($patterns, $settings['config_separator']);
21
22
        self::configureContainer($container, $appConfig, $settings);
23
    }
24
25
    /**
26
     * @api
27
     *
28
     * @param object $container
29
     * @param array  $config
30
     * @param array  $settings
31
     *
32
     * @return void
33
     */
34
    public static function fromArray($container, array $config, $settings = [])
35
    {
36
        $settings = self::prepareSettings($settings);
37
38
        $appConfig = new ApplicationConfig($config, $settings['config_separator']);
39
40
        self::configureContainer($container, $appConfig, $settings);
41
    }
42
43
    /**
44
     * @param array $settings
45
     *
46
     * @return array
47
     */
48
    private static function prepareSettings(array $settings)
49
    {
50
        return array_merge(
51
            [
52
                'config_prefix'    => 'config',
53
                'config_separator' => '.',
54
                'services_key'     => 'di.services',
55
                'inflectors_key'   => 'di.inflectors',
56
            ],
57
            $settings
58
        );
59
    }
60
61
    private static function configureContainer($container, ApplicationConfig $appConfig, array $settings)
0 ignored issues
show
Coding Style Best Practice introduced by
Please use __construct() instead of a PHP4-style constructor that is named after the class.
Loading history...
62
    {
63
        $factory = new ConfiguratorFactory([
64
            'League\Container\Container' => 'TomPHP\ConfigServiceProvider\League\Configurator',
65
            'Pimple\Container'           => 'TomPHP\ConfigServiceProvider\Pimple\Configurator',
66
        ]);
67
68
        $configurator = $factory->create($container);
69
70
        $configurator->addApplicationConfig($container, $appConfig, $settings['config_prefix']);
71
72
        if (isset($appConfig[$settings['services_key']])) {
73
            $configurator->addServiceConfig($container, new ServiceConfig($appConfig[$settings['services_key']]));
74
        }
75
76
        if (isset($appConfig[$settings['inflectors_key']])) {
77
            $configurator->addInflectorConfig($container, new InflectorConfig($appConfig[$settings['inflectors_key']]));
78
        }
79
    }
80
}
81