Completed
Push — master ( e5e74e...13adb5 )
by Yo
02:16
created

LoggerSubExtension::load()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 56
Code Lines 36

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 47
CRAP Score 3

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 56
ccs 47
cts 47
cp 1
rs 9.7251
cc 3
eloc 36
nc 4
nop 2
crap 3

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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