KafkaExtension   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 4
dl 0
loc 50
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getAlias() 0 4 1
A loadInternal() 0 8 1
A addConfiguration() 0 4 1
A addServiceDefinition() 0 9 1
1
<?php declare(strict_types=1);
2
3
namespace Mgid\KafkaBundle\DependencyInjection;
4
5
use Mgid\KafkaBundle\Consumer;
6
use Mgid\KafkaBundle\Producer;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\DependencyInjection\Definition;
9
use Symfony\Component\DependencyInjection\Reference;
10
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
11
12
final class KafkaExtension extends ConfigurableExtension
13
{
14
    public const EXTENSION_ALIAS = 'mgid_kafka';
15
16
    /**
17
     * {@inheritdoc}
18
     */
19
    public function getAlias(): string
20
    {
21
        return self::EXTENSION_ALIAS;
22
    }
23
24
    /**
25
     * @param array<string,array> $configs
26
     * @param ContainerBuilder    $container
27
     */
28
    protected function loadInternal(array $configs, ContainerBuilder $container): void
29
    {
30
        $this->addConfiguration(Consumer\Configuration::class, $configs['consumers']['configuration'], $container);
31
        $this->addConfiguration(Producer\Configuration::class, $configs['producers']['configuration'], $container);
32
33
        $this->addServiceDefinition(Consumer\Consumer::class, Consumer\Configuration::class, $container);
34
        $this->addServiceDefinition(Producer\Producer::class, Producer\Configuration::class, $container);
35
    }
36
37
    /**
38
     * @param string              $id
39
     * @param array<string,mixed> $configs
40
     * @param ContainerBuilder    $container
41
     */
42
    private function addConfiguration(string $id, array $configs, ContainerBuilder $container): void
43
    {
44
        $container->setDefinition($id, new Definition($id, [$configs]));
45
    }
46
47
    /**
48
     * @param string           $id
49
     * @param string           $configClassName
50
     * @param ContainerBuilder $container
51
     */
52
    private function addServiceDefinition(string $id, string $configClassName, ContainerBuilder $container): void
53
    {
54
        $definition = new Definition($id, [new Reference($configClassName)]);
55
        $definition->setPublic(true);
56
        $definition->setAutowired(true);
57
        $definition->setAutoconfigured(true);
58
59
        $container->setDefinition($id, $definition);
60
    }
61
}
62