EasyHtmlElementExtension   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 5
dl 0
loc 89
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A load() 0 10 1
A registerHtmlElement() 0 11 1
A registerEscaper() 0 14 1
A registerBranchValidator() 0 6 1
A registerTwigExtenstion() 0 10 1
1
<?php
2
3
namespace NatePage\EasyHtmlElement\Bridge\Symfony\DependencyInjection;
4
5
use NatePage\EasyHtmlElement\HtmlElement;
6
use NatePage\EasyHtmlElement\Bridge\Twig\EasyHtmlElementExtension as TwigExtension;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\DependencyInjection\Definition;
9
use Symfony\Component\DependencyInjection\Extension\Extension;
10
use Symfony\Component\DependencyInjection\Reference;
11
12
class EasyHtmlElementExtension extends Extension
13
{
14
    const SERVICE_NAME = 'easy_html_element';
15
    const TWIG_EXTENSION_NAME = self::SERVICE_NAME.'.twig_extension';
16
    const ESCAPER_NAME = self::SERVICE_NAME.'.escaper';
17
    const BRANCH_VALIDATOR_NAME = self::SERVICE_NAME.'.branch_validator';
18
19
    /**
20
     * {@inheritdoc}
21
     */
22
    public function load(array $configs, ContainerBuilder $container)
23
    {
24
        $config = new Configuration();
25
        $config = $this->processConfiguration($config, $configs);
26
27
        $this->registerEscaper($config, $container);
28
        $this->registerBranchValidator($config, $container);
29
        $this->registerHtmlElement($config, $container);
30
        $this->registerTwigExtenstion($container);
31
    }
32
33
    /**
34
     * Register EasyHtmlElement service.
35
     *
36
     * @param array            $config
37
     * @param ContainerBuilder $container
38
     */
39
    private function registerHtmlElement(array $config, ContainerBuilder $container)
40
    {
41
        $htmlElementDef = new Definition(HtmlElement::class, array($config['map']));
42
43
        $htmlElementDef
44
            ->addMethodCall('setEscaper', array(new Reference(self::ESCAPER_NAME)))
45
            ->addMethodCall('setBranchValidator', array(new Reference(self::BRANCH_VALIDATOR_NAME)))
46
        ;
47
48
        $container->setDefinition(self::SERVICE_NAME, $htmlElementDef);
49
    }
50
51
    /**
52
     * Register Escaper service.
53
     *
54
     * @param array            $config
55
     * @param ContainerBuilder $container
56
     */
57
    private function registerEscaper(array $config, ContainerBuilder $container)
58
    {
59
        $escaperDef = new Definition($config['escaper'], array($config['encoding']));
60
61
        $escaperDef
62
            ->addMethodCall('setEscapeHtml', array($config['escaping']['html']))
63
            ->addMethodCall('setEscapeHtmlAttr', array($config['escaping']['html_attr']))
64
            ->addMethodCall('setEscapeCss', array($config['escaping']['css']))
65
            ->addMethodCall('setEscapeJs', array($config['escaping']['js']))
66
            ->addMethodCall('setEscapeUrl', array($config['escaping']['url']))
67
        ;
68
69
        $container->setDefinition(self::ESCAPER_NAME, $escaperDef);
70
    }
71
72
    /**
73
     * Register Branch Validator service.
74
     *
75
     * @param array            $config
76
     * @param ContainerBuilder $container
77
     */
78
    public function registerBranchValidator(array $config, ContainerBuilder $container)
79
    {
80
        $branchValidatorDef = new Definition($config['branch_validator'], array(new Reference(self::SERVICE_NAME)));
81
82
        $container->setDefinition(self::BRANCH_VALIDATOR_NAME, $branchValidatorDef);
83
    }
84
85
    /**
86
     * Register Twig extension.
87
     *
88
     * @param ContainerBuilder $container
89
     */
90
    public function registerTwigExtenstion(ContainerBuilder $container)
91
    {
92
        $container
93
            ->setDefinition(self::TWIG_EXTENSION_NAME, new Definition(
94
                TwigExtension::class, array(new Reference(self::SERVICE_NAME))
95
            ))
96
            ->addTag('twig.extension')
97
            ->setPublic(false)
98
        ;
99
    }
100
}
101