Passed
Push — master ( 1d8bae...a79f58 )
by Vadim
02:18
created

AttributeReaderCompilerPass::process()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 5
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 8
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Kafkiansky\SymfonyMiddleware\DependencyInjection;
6
7
use Kafkiansky\SymfonyMiddleware\Attribute\Reader\AttributeReader;
8
use Kafkiansky\SymfonyMiddleware\Attribute\Reader\CacheAttributesReader;
9
use Kafkiansky\SymfonyMiddleware\Attribute\Reader\ClassMethodAttributeReader;
10
use Psr\Cache\CacheItemPoolInterface;
11
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
12
use Symfony\Component\DependencyInjection\ContainerBuilder;
13
use Symfony\Component\DependencyInjection\Definition;
14
use Symfony\Component\DependencyInjection\Reference;
15
16
final class AttributeReaderCompilerPass implements CompilerPassInterface
17
{
18
    public function process(ContainerBuilder $container): void
19
    {
20
        if ($container->hasDefinition(AttributeReader::class) && $this->shouldBeCached($container)) {
21
            $definition = $container->findDefinition(AttributeReader::class);
22
23
            $container->setDefinition(AttributeReader::class, new Definition(CacheAttributesReader::class, [
24
                new Reference(CacheItemPoolInterface::class),
25
                new Reference($definition->getClass() ?: ClassMethodAttributeReader::class),
26
            ]));
27
        }
28
    }
29
30
    private function shouldBeCached(ContainerBuilder $container): bool
31
    {
32
        if ($container->hasParameter('app.cache_middleware')) {
33
            return (bool) $container->getParameter('app.cache_middleware');
34
        }
35
36
        return $container->getParameter('kernel.environment') === 'prod';
37
    }
38
}
39