Completed
Push — master ( 6c3722...239355 )
by Matthew
19:49 queued 17:50
created

DtcQueueExtension   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 15
lcom 0
cbo 6
dl 0
loc 58
ccs 0
cts 46
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
B load() 0 22 5
A configRabbitMQ() 0 11 4
B configBeanstalkd() 0 15 5
A getAlias() 0 4 1
1
<?php
2
3
namespace Dtc\QueueBundle\DependencyInjection;
4
5
use Symfony\Component\Config\Definition\Processor;
6
use Symfony\Component\DependencyInjection\ContainerBuilder;
7
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
8
use Symfony\Component\Config\FileLocator;
9
use Symfony\Component\DependencyInjection\Loader;
10
11
class DtcQueueExtension extends Extension
12
{
13
    public function load(array $configs, ContainerBuilder $container)
14
    {
15
        $processor = new Processor();
16
        $configuration = new Configuration();
17
18
        $config = $processor->processConfiguration($configuration, $configs);
19
        $this->configBeanstalkd($config, $container);
20
        $this->configRabbitMQ($config, $container);
21
22
        $container->setParameter('dtc_queue.default_manager', $config['default_manager']);
23
        $container->setParameter('dtc_queue.document_manager', $config['document_manager']);
24
        $container->setParameter('dtc_queue.entity_manager', $config['entity_manager']);
25
        $container->setParameter('dtc_queue.class_job', isset($config['class_job']) ? $config['class_job'] : null);
26
        $container->setParameter('dtc_queue.class_job_archive', isset($config['class_job_archive']) ? $config['class_job_archive'] : null);
27
        $container->setParameter('dtc_queue.class_run', isset($config['class_run']) ? $config['class_run'] : null);
28
        $container->setParameter('dtc_queue.class_run_archive', isset($config['class_run_archive']) ? $config['class_run_archive'] : null);
29
30
        // Load Grid if Dtc\GridBundle Bundle is registered
31
        $yamlLoader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
32
33
        $yamlLoader->load('queue.yml');
34
    }
35
36
    protected function configRabbitMQ(array $config, ContainerBuilder $container)
37
    {
38
        if (isset($config['rabbit_mq'])) {
39
            foreach (['host', 'port', 'user', 'password'] as $value) {
40
                if (!isset($config['rabbit_mq'][$value])) {
41
                    throw new \Exception('dtc_queue: rabbit_mq must have '.$value.' in config.yml');
42
                }
43
            }
44
            $container->setParameter('dtc_queue.rabbit_mq', $config['rabbit_mq']);
45
        }
46
    }
47
48
    protected function configBeanstalkd(array $config, ContainerBuilder $container)
49
    {
50
        if (isset($config['beanstalkd'])) {
51
            if (!isset($config['beanstalkd']['host'])) {
52
                throw new \Exception('dtc_queue: beanstalkd requires host in config.yml');
53
            }
54
        }
55
56
        if (isset($config['beanstalkd']['host'])) {
57
            $container->setParameter('dtc_queue.beanstalkd.host', $config['beanstalkd']['host']);
58
        }
59
        if (isset($config['beanstalkd']['tube'])) {
60
            $container->setParameter('dtc_queue.beanstalkd.tube', $config['beanstalkd']['tube']);
61
        }
62
    }
63
64
    public function getAlias()
65
    {
66
        return 'dtc_queue';
67
    }
68
}
69