Passed
Push — compileapp ( a8c2a1...cbb59f )
by Akihito
02:15
created

CompileDependencies::__invoke()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 10
c 1
b 0
f 0
dl 0
loc 15
rs 9.9332
cc 2
nc 2
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BEAR\Package\Compiler;
6
7
use Ray\Di\AbstractModule;
8
9
use function array_keys;
10
use function assert;
11
use function is_int;
12
use function sort;
13
use function strpos;
14
use function substr;
15
16
final class CompileDependencies
17
{
18
    public function __construct(
19
        private NewInstance $newInstance,
20
    ) {
21
    }
22
23
    public function __invoke(AbstractModule $module): AbstractModule
24
    {
25
        $container = $module->getContainer()->getContainer();
26
        $dependencies = array_keys($container);
27
        sort($dependencies);
28
        foreach ($dependencies as $dependencyIndex) {
29
            $pos = strpos((string) $dependencyIndex, '-');
30
            assert(is_int($pos));
31
            /** @var ''|class-string $interface */
32
            $interface = substr((string) $dependencyIndex, 0, $pos);
33
            $name = substr((string) $dependencyIndex, $pos + 1);
34
            ($this->newInstance)($interface, $name);
35
        }
36
37
        return $module;
38
    }
39
}
40