BaseGenerator   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 96.67%

Importance

Changes 0
Metric Value
wmc 13
lcom 1
cbo 2
dl 0
loc 52
ccs 29
cts 30
cp 0.9667
rs 10
c 0
b 0
f 0

5 Methods

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