Passed
Push — develop ( 212af8...a3b9d2 )
by Brent
02:06
created

RendererFactory   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 4

Test Coverage

Coverage 92.59%

Importance

Changes 0
Metric Value
dl 0
loc 57
c 0
b 0
f 0
ccs 25
cts 27
cp 0.9259
rs 10
wmc 10
lcom 2
cbo 4

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A make() 0 4 1
A addExtension() 0 4 1
A create() 0 14 3
A loadExtensions() 0 6 2
A setTwigRule() 0 10 2
1
<?php
2
3
namespace Stitcher\Renderer;
4
5
use Stitcher\DynamicFactory;
6
use Stitcher\Renderer;
7
8
class RendererFactory extends DynamicFactory
9
{
10
    protected $templateDirectory;
11
    protected $rendererConfiguration;
12
    protected $extensions = [];
13
14 2
    public function __construct(string $templateDirectory, ?string $rendererConfiguration = 'twig')
15
    {
16 2
        $this->templateDirectory = $templateDirectory;
17 2
        $this->rendererConfiguration = $rendererConfiguration;
18
19 2
        $this->setTwigRule();
20 2
    }
21
22 1
    public static function make(string $templateDirectory, ?string $renderer = 'twig'): RendererFactory
23
    {
24 1
        return new self($templateDirectory, $renderer);
25
    }
26
27 1
    public function addExtension(Extension $extension)
28
    {
29 1
        $this->extensions[$extension->name()] = $extension;
30 1
    }
31
32 2
    public function create(): ?Renderer
33
    {
34 2
        foreach ($this->getRules() as $rule) {
35 2
            $templateRenderer = $rule($this->rendererConfiguration);
36
37 2
            if ($templateRenderer) {
38 2
                $this->loadExtensions($templateRenderer);
39
40 2
                return $templateRenderer;
41
            }
42
        }
43
44
        return null;
45
    }
46
47 2
    protected function loadExtensions(Renderer $renderer)
48
    {
49 2
        foreach ($this->extensions as $extension) {
50 1
            $renderer->customExtension($extension);
51
        }
52 2
    }
53
54
    private function setTwigRule(): void
55
    {
56 2
        $this->setRule(TwigRenderer::class, function ($value) {
57 2
            if ($value === 'twig') {
58 2
                return TwigRenderer::make($this->templateDirectory);
59
            }
60
61
            return null;
62 2
        });
63 2
    }
64
}
65