Passed
Push — master ( 3109ad...89528c )
by Peter
02:44
created

WithBuildersTrait   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 8
c 1
b 0
f 0
dl 0
loc 35
rs 10
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A buildTemplateData() 0 8 2
A addBuilder() 0 5 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace AbterPhp\Website\Template\Loader;
6
7
use AbterPhp\Framework\Exception\Config;
8
use AbterPhp\Framework\Template\IBuilder;
9
use AbterPhp\Framework\Template\IData;
10
use AbterPhp\Framework\Template\ParsedTemplate;
11
12
trait WithBuildersTrait
13
{
14
    /**
15
     * @var IBuilder[]
16
     */
17
    protected $builders;
18
19
    /**
20
     * @param string   $name
21
     * @param IBuilder $builder
22
     *
23
     * @return $this
24
     */
25
    public function addBuilder(string $name, IBuilder $builder): self
26
    {
27
        $this->builders[$name] = $builder;
28
29
        return $this;
30
    }
31
32
    /**
33
     * @param ParsedTemplate $parsedTemplate
34
     * @param mixed          $data
35
     * @param string|null    $defaultBuilder
36
     *
37
     * @return IData
38
     */
39
    protected function buildTemplateData(ParsedTemplate $parsedTemplate, $data, ?string $defaultBuilder = null): IData
40
    {
41
        $builderName = $parsedTemplate->getAttribute('builder', $defaultBuilder);
42
        if (!array_key_exists($builderName, $this->builders)) {
43
            throw new Config(__CLASS__);
44
        }
45
46
        return $this->builders[$builderName]->build($data, $parsedTemplate);
47
    }
48
}
49