Passed
Push — feature/improve ( ac8030...d3c170 )
by Yo
02:14
created

LoggerSubExtension   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 104
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 95%

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 6
dl 0
loc 104
ccs 38
cts 40
cp 0.95
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getConfigKey() 0 4 1
A initialize() 0 3 1
A configure() 0 20 1
B load() 0 46 1
A process() 0 3 1
1
<?php
2
namespace Yoanm\Behat3SymfonyExtension\ServiceContainer\SubExtension;
3
4
use Behat\Testwork\ServiceContainer\ExtensionManager;
5
use Monolog\Handler\StreamHandler;
6
use Monolog\Logger;
7
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
8
use Symfony\Component\DependencyInjection\ContainerBuilder;
9
use Symfony\Component\DependencyInjection\Reference;
10
use Yoanm\Behat3SymfonyExtension\Logger\SfKernelEventLogger;
11
use Yoanm\Behat3SymfonyExtension\ServiceContainer\AbstractExtension;
12
13
class LoggerSubExtension extends AbstractExtension
14
{
15
    /**
16
     * @inheritDoc
17
     */
18 2
    public function getConfigKey()
19
    {
20 2
        return 'logger';
21
    }
22
23
    // @codeCoverageIgnoreStart
24
    // Not possible to cover this because ExtensionManager is a final class
25
    /**
26
     * {@inheritdoc}
27
     */
28
    public function initialize(ExtensionManager $extensionManager)
29
    {
30
    }
31
    // @codeCoverageIgnoreEnd
32
33
    // @codeCoverageIgnoreStart
34
    // Will be covered by FT
35
    /**
36
     * @inheritDoc
37
     */
38
    public function configure(ArrayNodeDefinition $builder)
39
    {
40
        $builder
41
            ->addDefaultsIfNotSet()
42
            ->children()
43
                ->scalarNode('path')
44
                    ->defaultValue('var/log/behat.log')
45
                ->end()
46
                ->scalarNode('level')
47
                    ->beforeNormalization()
48
                    ->always()
49
                    ->then(function ($value) {
50
                        return Logger::toMonologLevel($value);
51
                    })
52
                    ->end()
53
                    ->defaultValue(Logger::DEBUG)
54
                ->end()
55
            ->end()
56
        ->end();
57
    }
58
    // @codeCoverageIgnoreEnd
59
60
    /**
61
     * {@inheritdoc}
62
     */
63 1
    public function load(ContainerBuilder $container, array $config)
64
    {
65 1
        $loggerConfig = $config[$this->getConfigKey()];
66 1
        $baseHandlerServiceId = 'logger.handler';
67
        // Handler
68 1
        $this->createService(
69 1
            $container,
70 1
            $baseHandlerServiceId,
71 1
            StreamHandler::class,
72
            [
73 1
                sprintf(
74 1
                    '%s/%s',
75 1
                    '%behat.paths.base%',
76 1
                    $loggerConfig['path']
77 1
                ),
78 1
                $loggerConfig['level'],
79
            ]
80 1
        );
81
        // Logger
82 1
        $this->createService(
83 1
            $container,
84 1
            'logger',
85 1
            Logger::class,
86
            [
87 1
                'behat3Symfony',
88 1
                $loggerConfig['level'],
89 1
            ],
90 1
            ['event_dispatcher.subscriber'],
91
            [
92
                [
93 1
                    'pushHandler',
94 1
                    [new Reference($this->buildContainerId($baseHandlerServiceId))]
95 1
                ]
96 1
            ]
97 1
        );
98
        // SfKernelEventLogger
99 1
        $this->createService(
100 1
            $container,
101 1
            'logger.sf_kernel_logger',
102 1
            SfKernelEventLogger::class,
103
            [
104 1
                new Reference($this->buildContainerId('kernel'))
105 1
            ],
106 1
            ['event_dispatcher.subscriber']
107 1
        );
108 1
    }
109
110
    /**
111
     * {@inheritdoc}
112
     */
113
    public function process(ContainerBuilder $container)
114
    {
115
    }
116
}
117