FeatureFinderFactoryPass   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 5
eloc 26
c 1
b 0
f 0
dl 0
loc 37
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A process() 0 35 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Pheature\Community\Symfony\DependencyInjection;
6
7
use Doctrine\DBAL\Connection;
8
use Pheature\Core\Toggle\Read\ChainToggleStrategyFactory;
9
use Pheature\Core\Toggle\Read\FeatureFinder;
10
use Pheature\Core\Toggle\Write\FeatureRepository;
11
use Pheature\Crud\Psr11\Toggle\FeatureFinderFactory;
12
use Pheature\Crud\Psr11\Toggle\FeatureRepositoryFactory;
13
use Pheature\Crud\Psr11\Toggle\ToggleConfig;
14
use Pheature\InMemory\Toggle\InMemoryFeatureFactory;
15
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
16
use Symfony\Component\DependencyInjection\ContainerBuilder;
17
use Symfony\Component\DependencyInjection\Reference;
18
use Webmozart\Assert\Assert;
19
20
final class FeatureFinderFactoryPass implements CompilerPassInterface
21
{
22
    public function process(ContainerBuilder $container): void
23
    {
24
        /** @var array<array<mixed>> $pheatureFlagsConfig */
25
        $pheatureFlagsConfig = $container->getExtensionConfig('pheature_flags');
26
        $mergedConfig = array_merge(...$pheatureFlagsConfig);
27
28
        $finder = $container->register(FeatureFinder::class, FeatureFinder::class)
29
            ->setAutowired(false)
30
            ->setLazy(true)
31
            ->setFactory([FeatureFinderFactory::class, 'create'])
32
            ->addArgument(new Reference(ToggleConfig::class))
33
            ->addArgument(new Reference(ChainToggleStrategyFactory::class));
34
35
        Assert::keyExists($mergedConfig, 'driver');
36
        Assert::string($mergedConfig['driver']);
37
        Assert::keyExists($mergedConfig, 'driver_options');
38
        Assert::isArray($mergedConfig['driver_options']);
39
40
        if (
41
            ToggleConfig::DRIVER_DBAL === $mergedConfig['driver']
42
            || true === in_array(ToggleConfig::DRIVER_DBAL, $mergedConfig['driver_options'], true)
43
        ) {
44
            $finder->addArgument(new Reference(Connection::class));
45
        } else {
46
            $finder->addArgument(null);
47
        }
48
49
        if (
50
            ToggleConfig::DRIVER_IN_MEMORY === $mergedConfig['driver']
51
            || true === in_array(ToggleConfig::DRIVER_IN_MEMORY, $mergedConfig['driver_options'], true)
52
        ) {
53
            $container->register(InMemoryFeatureFactory::class, InMemoryFeatureFactory::class)
54
                ->setAutowired(false)
55
                ->setLazy(true)
56
                ->addArgument(new Reference(ChainToggleStrategyFactory::class));
57
        }
58
    }
59
}
60