DirectoryResourceDefinition::__construct()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 31
rs 9.424
c 0
b 0
f 0
cc 4
nc 4
nop 4
1
<?php
2
3
namespace Goetas\TwitalBundle\DependencyInjection;
4
5
use Goetas\TwitalBundle\Assetic\Factory\DirectoryResource;
6
use Symfony\Component\DependencyInjection\Definition;
7
use Symfony\Component\DependencyInjection\Reference;
8
9
class DirectoryResourceDefinition extends Definition
10
{
11
    /**
12
     * Constructor.
13
     *
14
     * @param string $bundle A bundle name or empty string
15
     * @param string $engine The templating engine
16
     * @param array $dirs An array of directories to merge
17
     */
18
    public function __construct($bundle, $engine, $regex, array $dirs)
19
    {
20
        if (!count($dirs)) {
21
            throw new \InvalidArgumentException('You must provide at least one directory.');
22
        }
23
24
        parent::__construct();
25
26
        $this
27
            ->addTag('assetic.templating.' . $engine)
28
            ->addTag('assetic.formula_resource', array('loader' => $engine));;
29
30
        if (1 == count($dirs)) {
31
            // no need to coalesce
32
            self::configureDefinition($this, $regex, reset($dirs));
33
34
            return;
35
        }
36
37
        // gather the wrapped resource definitions
38
        $resources = array();
39
        foreach ($dirs as $dir) {
40
            $resources[] = $resource = new Definition();
41
            self::configureDefinition($resource, $regex, $dir);
42
        }
43
44
        $this
45
            ->setClass('%assetic.coalescing_directory_resource.class%')
46
            ->addArgument($resources)
47
            ->setPublic(false);
48
    }
49
50
    private static function configureDefinition(Definition $definition, $regex, $dir)
51
    {
52
        $definition
53
            ->setClass('Goetas\TwitalBundle\Assetic\Factory\DirectoryResource')
54
            ->addArgument(new Reference('templating.loader'))
55
            ->addArgument($dir)
56
            ->addArgument($regex)
57
            ->setPublic(false);
58
    }
59
}
60