Test Failed
Push — feature/improve ( 3cba19 )
by Yo
03:30
created

LoggerSubExtension::initialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 0
cts 0
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 1
crap 2
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 3
     * @inheritDoc
20
     */
21 3
    public function getConfigKey()
22
    {
23
        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 2
     * {@inheritdoc}
65
     */
66 2
    public function load(ContainerBuilder $container, array $config)
67 2
    {
68
        $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
        $logFilePath = $loggerConfig['path'];
74 2
        $logFilePathUnderBasePath = sprintf(
75 2
            '%s/%s',
76 2
            '%paths.base%',
77 2
            $loggerConfig['path']
78 2
        );
79 2
        if (file_exists($logFilePathUnderBasePath)) {
80
            $logFilePath = $logFilePathUnderBasePath;
81 2
        }
82
        // Handler
83 2
        $this->createService(
84 2
            $container,
85 2
            $baseHandlerServiceId,
86 2
            StreamHandler::class,
87
            [
88 2
                $logFilePath,
89 2
                $loggerConfig['level'],
90 2
            ]
91 2
        );
92
        // Logger
93
        $this->createService(
94 2
            $container,
95 2
            'logger',
96 2
            Logger::class,
97 2
            ['behat3Symfony'],
98 2
            [],
99
            [
100 2
                [
101 1
                    'pushHandler',
102 1
                    [new Reference($this->buildContainerId($baseHandlerServiceId))]
103 1
                ]
104 1
            ]
105 1
        );
106 1
107 1
        $this->createService(
108 1
            $container,
109 1
            'initializer.logger_aware',
110 1
            LoggerAwareInitializer::class,
111 1
            [new Reference($this->buildContainerId('logger'))],
112 1
            ['context.initializer']
113 1
        );
114 1
        // SfKernelEventLogger
115 2
        if (true === $config['kernel']['debug']) {
116
            $this->createService(
117
                $container,
118
                'subscriber.sf_kernel_logger',
119
                SfKernelLoggerSubscriber::class,
120
                [new Reference($this->buildContainerId('logger.sf_kernel_logger'))],
121
                [EventDispatcherExtension::SUBSCRIBER_TAG]
122
            );
123
            $this->createService(
124
                $container,
125
                'logger.sf_kernel_logger',
126
                SfKernelEventLogger::class,
127
                [new Reference($this->buildContainerId('logger'))]
128
            );
129
        }
130
    }
131
132
    /**
133
     * {@inheritdoc}
134
     */
135
    public function process(ContainerBuilder $container)
136
    {
137
    }
138
}
139