Completed
Push — master ( 126b63...733cbc )
by Randy
04:39
created

Hydrator   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 80.77%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 6
dl 0
loc 90
ccs 21
cts 26
cp 0.8077
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A hydrateDocument() 0 14 3
A hydrateNode() 0 9 2
A assemble() 0 4 1
A dehydrate() 0 7 1
A hydrate() 0 7 1
1
<?php
2
3
namespace Dgame\Soap\Hydrator\Dom;
4
5
use Dgame\Soap\Dom\Translator;
6
use Dgame\Soap\Element;
7
use Dgame\Soap\Hydrator\ClassMapper;
8
use Dgame\Soap\Hydrator\HydrateProcedure;
9
use DOMDocument;
10
use DOMNode;
11
12
/**
13
 * Class Hydrator
14
 * @package Dgame\Soap\Hydrator\Dom
15
 */
16
final class Hydrator
17
{
18
    /**
19
     * @var ClassMapper
20
     */
21
    private $mapper;
22
23
    /**
24
     * Hydrator constructor.
25
     *
26
     * @param ClassMapper $mapper
27
     */
28 6
    public function __construct(ClassMapper $mapper)
29
    {
30 6
        $this->mapper = $mapper;
31 6
    }
32
33
    /**
34
     * @param DOMDocument $document
35
     *
36
     * @return array
37
     */
38 6
    public function hydrateDocument(DOMDocument $document): array
39
    {
40 6
        $elements = Translator::new()->translateDocument($document);
41
42 6
        $output = [];
43 6
        foreach ($elements as $element) {
44 6
            $procedure = $this->hydrate($element);
45 6
            if ($procedure->isValid()) {
46 6
                $output[] = $procedure->getHydrate()->getObject();
47
            }
48
        }
49
50 6
        return $output;
51
    }
52
53
    /**
54
     * @param DOMNode $node
55
     *
56
     * @return HydrateProcedure
57
     */
58
    public function hydrateNode(DOMNode $node): HydrateProcedure
59
    {
60
        $element = Translator::new()->translateNode($node);
61
        if ($element === null) {
62
            return new HydrateProcedure($this->mapper);
63
        }
64
65
        return $this->hydrate($element);
66
    }
67
68
    /**
69
     * @param AssemblableInterface $assemblable
70
     * @param DOMNode|null         $node
71
     *
72
     * @return DOMNode
73
     */
74 1
    public function assemble(AssemblableInterface $assemblable, DOMNode $node = null): DOMNode
75
    {
76 1
        return $this->dehydrate($assemblable->assemble(), $node);
77
    }
78
79
    /**
80
     * @param Element      $element
81
     * @param DOMNode|null $node
82
     *
83
     * @return DOMNode
84
     */
85 1
    public function dehydrate(Element $element, DOMNode $node = null): DOMNode
86
    {
87 1
        $assembler = new Assembler($node);
88 1
        $element->accept($assembler);
89
90 1
        return $node;
91
    }
92
93
    /**
94
     * @param Element $element
95
     *
96
     * @return HydrateProcedure
97
     */
98 6
    private function hydrate(Element $element): HydrateProcedure
99
    {
100 6
        $procedure = new HydrateProcedure($this->mapper);
101 6
        $element->accept($procedure);
102
103 6
        return $procedure;
104
    }
105
}