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

AttributeReaderCompilerPass   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 21
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 9
c 1
b 0
f 0
dl 0
loc 21
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A process() 0 8 4
A shouldBeCached() 0 7 2
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