BaseGenerator   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Test Coverage

Coverage 96.67%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 24
c 1
b 0
f 0
dl 0
loc 51
ccs 29
cts 30
cp 0.9667
rs 10
wmc 11

5 Methods

Rating   Name   Duplication   Size   Complexity  
A addRenderer() 0 7 2
A render() 0 3 1
A prepare() 0 21 5
A findRenderer() 0 4 2
A sortMetaData() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SeoHelper\Generator;
6
7
use SeoHelper\MetaData\BaseMetaData;
8
use SeoHelper\Renderer\RendererInterface;
9
10
class BaseGenerator implements GeneratorInterface
11
{
12 9
    /** @var RendererInterface[] */
13
    private array $renderers = [];
14 9
15
    public function render(BaseMetaData $metaData): string
16
    {
17 9
        return implode("\n", $this->prepare($metaData));
18
    }
19 9
20 9
    private function prepare(BaseMetaData $metaData): array
21 9
    {
22 9
        $items = [];
23
        foreach ($this->sortMetaData($metaData->get()) as $key => $value) {
24 9
            $keyParts = explode(':', $key);
25 9
            $type = current($keyParts);
26 3
            /* @var $renderer RendererInterface */
27
            $renderer = $this->findRenderer($type);
28 6
            if (!$renderer) {
29 6
                continue;
30
            }
31
            $item = $renderer->render($type, $key, $value);
32 6
            if (!$item) {
33 6
                continue;
34 2
            }
35 6
            if (!is_array($item)) {
36 3
                $item = [$item];
37 9
            }
38
            $items = array_merge($items, $item);
39
        }
40 6
        return $items;
41
    }
42 6
43 6
    public function addRenderer(RendererInterface $renderer): static
44 6
    {
45 2
        $renderer->init();
46 6
        foreach ($renderer->getTypes() as $type) {
47
            $this->renderers[$type] = $renderer;
48
        }
49 6
        return $this;
50
    }
51 6
52
    protected function sortMetaData(array $metaData): array
53
    {
54 9
        return $metaData;
55
    }
56 9
57 9
    private function findRenderer($type): ?RendererInterface
58
    {
59
        $renderer = $this->renderers[$type] ?? null;
60
        return $renderer ?: ($this->renderers['default'] ?? null);
61
    }
62
}
63