Passed
Push — master ( acf3f9...98cfe3 )
by Derek Stephen
03:04
created

AbstractFieldRender   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 6
eloc 13
c 1
b 0
f 1
dl 0
loc 55
ccs 14
cts 14
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A createElementFromField() 0 9 2
A render() 0 6 1
A setAttribute() 0 9 3
1
<?php declare(strict_types=1);
2
3
namespace Del\Form\Renderer\Field;
4
5
use Del\Form\Field\ArrayValueInterface;
6
use Del\Form\Field\FieldInterface;
7
use Del\Form\Traits\HasDomTrait;
8
use DOMDocument;
9
use DOMElement;
10
11
abstract class AbstractFieldRender implements FieldRendererInterface
12
{
13
    use HasDomTrait;
14
15
    /**
16
     * @param DOMDocument $dom
17
     * @return DOMElement
18
     */
19 34
    public function render(DOMDocument $dom, FieldInterface $field)
20
    {
21 34
        $this->setDom($dom);
22 34
        $element = $this->createElementFromField($field);
23
24 34
        return $this->renderBlock($field, $element);
25
    }
26
27
    /**
28
     * @param FieldInterface $field
29
     * @return DOMElement
30
     */
31 34
    public function createElementFromField(FieldInterface $field): DOMElement
32
    {
33 34
        $element = $this->createElement($field->getTag());
34
35 34
        foreach ($field->getAttributes() as $key => $value) {
36 34
            $element = $this->setAttribute($field, $element, $key, $value);
37
        }
38
39 34
        return $element;
40
    }
41
42
    /**
43
     * @param FieldInterface $field
44
     * @param DOMElement $element
45
     * @param $key
46
     * @param $value
47
     * @return DOMElement
48
     */
49 34
    private function setAttribute(FieldInterface $field, DOMElement $element, $key, $value): DOMElement
50
    {
51 34
        if ($field instanceof ArrayValueInterface && $key === 'value') {
52 11
            return $element;
53
        }
54
55 34
        $element->setAttribute($key, (string) $value);
56
57 34
        return $element;
58
    }
59
60
    /**
61
     * @param FieldInterface $field
62
     * @param DOMElement $element
63
     * @return DOMElement
64
     */
65
    abstract public function renderBlock(FieldInterface $field, DOMElement $element);
66
}
67