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

CompileDependencies   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 22
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
eloc 10
dl 0
loc 22
rs 10
c 1
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 15 2
A __construct() 0 3 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