Completed
Branch master (3adcdb)
by Raffael
08:09 queued 04:17
created

ContainerBuilder   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

Changes 0
Metric Value
wmc 6
lcom 0
cbo 2
dl 0
loc 62
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A get() 0 9 1
A loadConfig() 0 11 2
A detectApps() 0 16 3
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * balloon
7
 *
8
 * @copyright   Copryright (c) 2012-2018 gyselroth GmbH (https://gyselroth.com)
9
 * @license     GPL-3.0 https://opensource.org/licenses/GPL-3.0
10
 */
11
12
namespace Balloon\Bootstrap;
13
14
use Balloon\App;
15
use Composer\Autoload\ClassLoader as Composer;
16
use Micro\Container\Container;
17
use Noodlehaus\Config;
18
use Psr\Container\ContainerInterface;
19
20
class ContainerBuilder
21
{
22
    /**
23
     * Init bootstrap.
24
     *
25
     * @param Composer $composer
26
     *
27
     * @return ContainerInterface
28
     */
29
    public static function get(Composer $composer): ContainerInterface
30
    {
31
        $configs = self::detectApps($composer);
32
        $config = self::loadConfig($configs);
33
        $container = new Container($config);
0 ignored issues
show
Documentation introduced by
$config is of type object<Noodlehaus\Config>, but the function expects a object<Micro\Container\iterable>|array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
34
        $container->add(get_class($composer), $composer);
35
36
        return $container;
37
    }
38
39
    /**
40
     * Load config.
41
     *
42
     * @param array $configs
43
     *
44
     * @return Config
45
     */
46
    protected static function loadConfig(array $configs): Config
47
    {
48
        $global = __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'.container.config.php';
49
        array_unshift($configs, $global);
50
51
        foreach (glob(constant('BALLOON_CONFIG_DIR').DIRECTORY_SEPARATOR.'*.yaml') as $path) {
52
            $configs[] = $path;
53
        }
54
55
        return new Config($configs);
56
    }
57
58
    /**
59
     * Find apps.
60
     *
61
     * @param Composer $composer
62
     *
63
     * @return array
64
     */
65
    protected static function detectApps(Composer $composer): array
66
    {
67
        $configs = [];
68
69
        foreach (glob(constant('BALLOON_PATH').DIRECTORY_SEPARATOR.'src'.DIRECTORY_SEPARATOR.'app'.DIRECTORY_SEPARATOR.'*') as $app) {
70
            $name = basename($app);
71
            $ns = str_replace('.', '\\', $name).'\\';
72
            $composer->addPsr4($ns, $app);
73
74
            if (file_exists($app.DIRECTORY_SEPARATOR.'.container.config.php')) {
75
                $configs[] = $app.DIRECTORY_SEPARATOR.'.container.config.php';
76
            }
77
        }
78
79
        return $configs;
80
    }
81
}
82