Failed Conditions
Pull Request — master (#11)
by Yo
04:22 queued 02:14
created

Behat3SymfonyExtension   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 11

Test Coverage

Coverage 7.69%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 11
dl 0
loc 75
ccs 2
cts 26
cp 0.0769
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getConfigKey() 0 4 1
A initialize() 0 11 1
A configure() 0 17 3
A load() 0 6 2
A process() 0 6 2
1
<?php
2
namespace Yoanm\Behat3SymfonyExtension\ServiceContainer;
3
4
use Behat\Testwork\ServiceContainer\Extension;
5
use Behat\Testwork\ServiceContainer\ExtensionManager;
6
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
7
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
8
use Symfony\Component\DependencyInjection\ContainerBuilder;
9
use Yoanm\Behat3SymfonyExtension\ServiceContainer\Driver\Behat3SymfonyDriverFactory;
10
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\AbstractSubExtension;
11
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\HandlerSubExtension;
12
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\InitializerSubExtension;
13
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\KernelSubExtension;
14
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\LoggerSubExtension;
15
use Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension\SubscriberSubExtension;
16
17
class Behat3SymfonyExtension implements Extension
18
{
19
    const BASE_CONTAINER_ID = 'behat3_symfony_extension';
20
    const KERNEL_SERVICE_ID = 'behat3_symfony_extension.kernel';
21
22
    /** @var AbstractSubExtension[] */
23
    private $subExtensionList = array();
24
25
    /**
26
     * {@inheritdoc}
27
     */
28 1
    public function getConfigKey()
29
    {
30 1
        return 'behat3_symfony';
31
    }
32
33
    // @codeCoverageIgnoreStart
34
    // Not possible to cover this because ExtensionManager is a final class
35
    /**
36
     * {@inheritdoc}
37
     */
38
    public function initialize(ExtensionManager $extensionManager)
39
    {
40
        $extensionManager->getExtension('mink')
41
            ->registerDriverFactory(new Behat3SymfonyDriverFactory());
42
43
        $this->subExtensionList[] = new KernelSubExtension();
44
        $this->subExtensionList[] = new LoggerSubExtension();
45
        $this->subExtensionList[] = new HandlerSubExtension();
46
        $this->subExtensionList[] = new InitializerSubExtension();
47
        $this->subExtensionList[] = new SubscriberSubExtension();
48
    }
49
    // @codeCoverageIgnoreEnd
50
51
    /**
52
     * {@inheritdoc}
53
     */
54
    public function configure(ArrayNodeDefinition $builder)
55
    {
56
        $node = $builder
57
            ->addDefaultsIfNotSet()
58
            ->children();
59
        foreach ($this->subExtensionList as $subExtension) {
60
            $configKey = $subExtension->getConfigKey();
61
            if (is_string($configKey)) {
62
                $tree = new TreeBuilder();
63
                $subBuilder = $tree->root($configKey);
64
                $subExtension->configure($subBuilder);
65
                $node->append($subBuilder);
66
            }
67
        }
68
69
        $node->end();
70
    }
71
72
    /**
73
     * {@inheritdoc}
74
     */
75
    public function load(ContainerBuilder $container, array $config)
76
    {
77
        foreach ($this->subExtensionList as $subExtension) {
78
            $subExtension->load($container, $config);
79
        }
80
    }
81
82
    /**
83
     * {@inheritdoc}
84
     */
85
    public function process(ContainerBuilder $container)
86
    {
87
        foreach ($this->subExtensionList as $subExtension) {
88
            $subExtension->process($container);
89
        }
90
    }
91
}
92