1 | <?php |
||
48 | abstract class AbstractSequenceHydrator extends AbstractMultipartHydrator |
||
49 | { |
||
50 | /** |
||
51 | * Part aggregate class name |
||
52 | * |
||
53 | * @var string |
||
54 | */ |
||
55 | protected $aggregateClass = PartSequence::class; |
||
56 | |||
57 | /** |
||
58 | * Dehydrate a single occurrence |
||
59 | * |
||
60 | * @param array $occurrence Occurrence |
||
61 | * @return string Dehydrated occurrence |
||
62 | * @throws RuntimeException If the occurrence is invalid |
||
63 | * @throws RuntimeException If a part name doesn't match a known subhydrator |
||
64 | * @throws RuntimeException If a part is invalid |
||
65 | */ |
||
66 | 6 | protected function dehydrateOccurrence(array $occurrence) |
|
67 | { |
||
68 | // If the occurrence is invalid |
||
69 | 6 | if (!count($occurrence)) { |
|
70 | 1 | throw new $this->occDhdrException( |
|
71 | 1 | 'Empty occurrence', |
|
72 | 1 | constant($this->occDhdrException.'::EMPTY_OCCURRENCE') |
|
73 | ); |
||
74 | } |
||
75 | |||
76 | 5 | $sequence = []; |
|
77 | |||
78 | // Run through the sequence |
||
79 | 5 | foreach ($occurrence as $subhydrator => $part) { |
|
80 | // If the part name doesn't match a known subhydrator |
||
81 | 5 | if (!strlen($subhydrator) || !array_key_exists($subhydrator, $this->subhydrators)) { |
|
82 | 1 | throw new $this->occDhdrException( |
|
83 | 1 | sprintf('No matching subhydrator "%s"', $subhydrator), |
|
84 | 1 | constant($this->occDhdrException.'::NO_MATCHING_SUBHYDRATOR') |
|
85 | ); |
||
86 | } |
||
87 | |||
88 | // If the part value is not a valid part instance |
||
89 | 4 | if (!$part || !($part instanceof PartInterface)) { |
|
90 | 1 | throw new $this->occDhdrException( |
|
91 | sprintf( |
||
92 | 1 | 'Invalid part instance "%s"', |
|
93 | 1 | gettype($part).(is_object($part) ? '<'.get_class($part).'>' : '') |
|
94 | ), |
||
95 | 1 | constant($this->occDhdrException.'::INVALID_PART_INSTANCE') |
|
96 | ); |
||
97 | } |
||
98 | |||
99 | 3 | $sequence[$subhydrator] = $this->dehydratePart($subhydrator, $part); |
|
100 | } |
||
101 | |||
102 | 3 | return $this->combineOccurrenceSequence($sequence); |
|
103 | } |
||
104 | |||
105 | /** |
||
106 | * Combine a part occurrence sequence for dehydration |
||
107 | * |
||
108 | * @param array $sequence Part occurrence sequence |
||
109 | * @return string Combined sequence |
||
110 | */ |
||
111 | 3 | protected function combineOccurrenceSequence(array $sequence) |
|
115 | } |
||
116 |