Passed
Push — develop ( 6ce970...717361 )
by Brent
02:09
created

RendererFactory   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 2

Test Coverage

Coverage 89.47%

Importance

Changes 0
Metric Value
dl 0
loc 42
ccs 17
cts 19
cp 0.8947
rs 10
c 0
b 0
f 0
wmc 7
lcom 2
cbo 2

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A make() 0 4 1
A create() 0 12 3
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
    private $templateDirectory;
11
    private $renderer;
12
13 2
    public function __construct(string $templateDirectory, ?string $renderer = 'twig')
14
    {
15 2
        $this->templateDirectory = $templateDirectory;
16 2
        $this->renderer = $renderer;
17
18 2
        $this->setTwigRule();
19 2
    }
20
21 1
    public static function make(string $templateDirectory, ?string $renderer = 'twig'): RendererFactory
22
    {
23 1
        return new self($templateDirectory, $renderer);
24
    }
25
26 2
    public function create(): ?Renderer
27
    {
28 2
        foreach ($this->getRules() as $rule) {
29 2
            $templateRenderer = $rule($this->renderer);
30
31 2
            if ($templateRenderer) {
32 2
                return $templateRenderer;
33
            }
34
        }
35
36
        return null;
37
    }
38
39
    private function setTwigRule(): void
40
    {
41 2
        $this->setRule(TwigRenderer::class, function ($value) {
42 2
            if ($value === 'twig') {
43 2
                return TwigRenderer::make($this->templateDirectory);
44
            }
45
46
            return null;
47 2
        });
48 2
    }
49
}
50