DependencyInjectionContainer::init()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 41

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 41
rs 9.264
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
declare(strict_types = 1);
3
namespace T3G\Elasticorn\Bootstrap;
4
5
use Elastica\Client;
6
use Symfony\Component\Console\Logger\ConsoleLogger;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\DependencyInjection\Reference;
9
use T3G\Elasticorn\Service\ConfigurationService;
10
use T3G\Elasticorn\Service\DocumentTypeService;
11
use T3G\Elasticorn\Service\IndexService;
12
use T3G\Elasticorn\Utility\ConfigurationParser;
13
14
class DependencyInjectionContainer
15
{
16
17
    public function init()
18
    {
19
        $container = new ContainerBuilder();
20
21
        $container
22
            ->register('configurationParser', ConfigurationParser::class)
23
            ->addArgument(new Reference('logger'));
24
25
        $container
26
            ->register('elasticaClient', Client::class)
27
            ->addArgument($this->getElasticaConfiguration())
28
            ->addArgument(null)
29
            ->addArgument(new Reference('logger'));
30
31
        $container
32
            ->register('logger', ConsoleLogger::class)
33
            ->addArgument('%logger.output%')
34
            ->addArgument('%logger.verbosityMap%');
35
36
        $container
37
            ->register('configurationService', ConfigurationService::class)
38
            ->addArgument(new Reference('elasticaClient'))
39
            ->addArgument(new Reference('configurationParser'))
40
            ->addArgument(new Reference('logger'));
41
42
        $container
43
            ->register('indexService', IndexService::class)
44
            ->addArgument(new Reference('elasticaClient'))
45
            ->addArgument(new Reference('configurationService'))
46
            ->addArgument(new Reference('logger'))
47
            ->addArgument('%index.name%');
48
49
        $container
50
            ->register('documentTypeService', DocumentTypeService::class)
51
            ->addArgument(new Reference('elasticaClient'))
52
            ->addArgument(new Reference('logger'))
53
            ->addArgument('%index.name%')
54
            ->addArgument('%type.name%');
55
56
        return $container;
57
    }
58
59
    private function getElasticaConfiguration()
60
    {
61
        return array_filter([
62
            'host' => getenv('elastica.host'),
63
            'port' => getenv('elastica.port'),
64
            'path' => getenv('elastica.path'),
65
            'url' => getenv('elastica.url'),
66
            'proxy' => getenv('elastica.proxy'),
67
            'transport' => getenv('elastica.transport'),
68
            'persistent' => getenv('elastica.persistent') ?? true,
69
            'timeout' => getenv('elastica.timeout'),
70
            'log' => true,
71
            'username' => getenv('elastica.username'),
72
            'password' => getenv('elastica.password'),
73
        ]);
74
    }
75
}