JSBlockExtension   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

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

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getTokenParsers() 0 6 1
A render() 0 4 1
A start() 0 9 2
A stop() 0 6 1
1
<?php declare(strict_types = 1);
2
3
namespace Fousky\JSBlockBundle\Twig;
4
5
use Fousky\JSBlockBundle\Twig\TokenParser\JSTokenParser;
6
use Twig\Extension\AbstractExtension;
7
8
class JSBlockExtension extends AbstractExtension
9
{
10
    /** @var array $collected */
11
    protected $collected = [];
12
13
    /** @var bool $lock */
14
    protected $lock = false;
15
16
    public function getTokenParsers(): array
17
    {
18
        return [
19
            new JSTokenParser(), // {% jsblock %}
20
        ];
21
    }
22
23
    public function render(): string
24
    {
25
        return implode("\n    ", $this->collected)."\n";
26
    }
27
28
    public function start(): void
29
    {
30
        if ($this->lock) {
31
            throw new \BadFunctionCallException('Cannot use {% jsblock \'start\' %} inside multiple nesting level.');
32
        }
33
34
        $this->lock = true;
35
        \ob_start();
36
    }
37
38
    public function stop(): void
39
    {
40
        $data = \ob_get_clean();
41
        $this->lock = false;
42
        $this->collected[] = $data;
43
    }
44
}
45