BaseGenerator::prepare()   A
last analyzed

Complexity

Conditions 5
Paths 5

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 16
CRAP Score 5.005

Importance

Changes 0
Metric Value
dl 0
loc 22
ccs 16
cts 17
cp 0.9412
rs 9.2568
c 0
b 0
f 0
cc 5
nc 5
nop 1
crap 5.005
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