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

AbstractFieldRender::setAttribute()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3

Importance

Changes 0
Metric Value
eloc 4
c 0
b 0
f 0
dl 0
loc 9
ccs 5
cts 5
cp 1
rs 10
cc 3
nc 2
nop 4
crap 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