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

ConfigureContainer   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 6
c 2
b 0
f 1
lcom 1
cbo 4
dl 0
loc 76
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A fromFiles() 0 8 1
A fromArray() 0 8 1
A prepareSettings() 0 12 1
A configureContainer() 0 19 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