Passed
Push — feature/container-extend ( b81097...93c762 )
by Chema
03:26
created

AbstractFactory::getServicesToExtend()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 5
rs 10
ccs 4
cts 4
cp 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gacela\Framework;
6
7
use Closure;
8
use Gacela\Framework\ClassResolver\DependencyProvider\DependencyProviderResolver;
9
use Gacela\Framework\Config\Config;
10
use Gacela\Framework\Container\Container;
11
use Gacela\Framework\Container\Exception\ContainerKeyNotFoundException;
12
13
abstract class AbstractFactory
14
{
15
    use ConfigResolverAwareTrait;
16
17
    /** @var array<string,Container> */
18
    private static array $containers = [];
19
20
    /**
21
     * @throws ContainerKeyNotFoundException
22
     *
23
     * @return mixed
24
     */
25 20
    protected function getProvidedDependency(string $key)
26
    {
27 20
        return $this->getContainer()->get($key);
28
    }
29
30 20
    private function getContainer(): Container
31
    {
32 20
        $containerKey = static::class;
33
34 20
        if (!isset(self::$containers[$containerKey])) {
35 10
            self::$containers[$containerKey] = $this->createContainerWithProvidedDependencies();
36
        }
37
38 19
        return self::$containers[$containerKey];
39
    }
40
41 10
    private function createContainerWithProvidedDependencies(): Container
42
    {
43 10
        $container = new Container($this->getServicesToExtend());
44 10
        $dependencyProvider = $this->resolveDependencyProvider();
45 9
        $dependencyProvider->provideModuleDependencies($container);
46
47 9
        return $container;
48
    }
49
50
    /**
51
     * @return array<string,list<Closure>>
1 ignored issue
show
Documentation Bug introduced by
The doc comment array<string,list<Closure>> at position 4 could not be parsed: Expected '>' at position 4, but found 'list'.
Loading history...
52
     */
53 10
    private function getServicesToExtend(): array
54
    {
55 10
        return Config::getInstance()
56 10
            ->getSetupGacela()
57 10
            ->getServicesToExtend();
58
    }
59
60
    /**
61
     * @throws ClassResolver\DependencyProvider\DependencyProviderNotFoundException
62
     */
63 10
    private function resolveDependencyProvider(): AbstractDependencyProvider
64
    {
65 10
        return (new DependencyProviderResolver())->resolve($this);
66
    }
67
}
68