Completed
Pull Request — master (#10)
by Tomáš
03:17
created

TwigLoaderPass::process()   B

Complexity

Conditions 6
Paths 16

Size

Total Lines 30
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 0
Metric Value
dl 0
loc 30
ccs 0
cts 25
cp 0
rs 8.439
c 0
b 0
f 0
cc 6
eloc 18
nc 16
nop 1
crap 42
1
<?php
2
3
/*
4
 * This file is a part of Sculpin.
5
 *
6
 * (c) Dragonfly Development Inc.
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Symplify\PHP7_Sculpin\TwigBundle\DependencyInjection\Compiler;
13
14
use Symfony\Component\DependencyInjection\Reference;
15
use Symfony\Component\DependencyInjection\ContainerBuilder;
16
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
17
18
final class TwigLoaderPass implements CompilerPassInterface
19
{
20
    /**
21
     * {@inheritdoc}
22
     */
23
    public function process(ContainerBuilder $container)
24
    {
25
        $definition = $container->getDefinition('sculpin_twig.loader');
26
        $arguments = $definition->getArguments();
27
        $loaders = $arguments[0];
28
29
        $prependedLoaders = [];
30
        $appendedLoaders = [];
31
32
        foreach ($container->findTaggedServiceIds('twig.loaders.prepend') as $id => $attributes) {
33
            $prependedLoaders[] = new Reference($id);
34
        }
35
36
        foreach ($container->findTaggedServiceIds('twig.loaders.append') as $id => $attributes) {
37
            $appendedLoaders[] = new Reference($id);
38
        }
39
40
        $sourceViewPaths = $container->getParameter('sculpin_twig.source_view_paths');
41
        foreach ($container->getParameter('kernel.bundles') as $class) {
42
            $reflection = new \ReflectionClass($class);
43
            foreach ($sourceViewPaths as $sourceViewPath) {
44
                if (is_dir($dir = dirname($reflection->getFilename()).'/Resources/'.$sourceViewPath)) {
45
                    $appendedLoaders[] = $dir;
46
                }
47
            }
48
        }
49
50
        $arguments[0] = array_merge($prependedLoaders, $loaders, $appendedLoaders);
51
        $definition->setArguments($arguments);
52
    }
53
}
54