Skip to content

Commit ba34500

Browse files
committed
Reference evaluators creation refactored
1 parent 352f75f commit ba34500

File tree

4 files changed

+197
-88
lines changed

4 files changed

+197
-88
lines changed

src/Pointer/Evaluate/LocatorEvaluate.php

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,61 @@ public function perform()
225225
* @param Reference $reference
226226
* @return ReferenceEvaluate
227227
*/
228-
abstract protected function createReferenceEvaluate(Reference $reference);
228+
protected function createReferenceEvaluate(Reference $reference)
229+
{
230+
if (is_object($this->cursor)) {
231+
return $this->createReferenceEvaluateProperty($reference);
232+
}
233+
if (is_array($this->cursor)) {
234+
return $this->createReferenceEvaluateIndex($reference);
235+
}
236+
return $this->createReferenceEvaluateScalar($reference);
237+
}
238+
239+
240+
abstract protected function createReferenceEvaluateProperty(Reference $reference);
241+
242+
243+
protected function createReferenceEvaluateIndex(Reference $reference)
244+
{
245+
switch ($reference->getType()) {
246+
case $reference::TYPE_NEXT_INDEX:
247+
return $this->createReferenceEvaluateNextIndex($reference);
248+
249+
case $reference::TYPE_INDEX:
250+
return $this->createReferenceEvaluateNumericIndex($reference);
251+
252+
case $reference::TYPE_PROPERTY:
253+
return $this->createReferenceEvaluateNonNumericIndex($reference);
254+
}
255+
return $this->createReferenceEvaluateUnknownIndex($reference);
256+
}
257+
258+
259+
abstract protected function createReferenceEvaluateNextIndex(Reference $reference);
260+
261+
262+
abstract protected function createReferenceEvaluateNumericIndex(Reference $reference);
263+
264+
265+
protected function createReferenceEvaluateNonNumericIndex(Reference $reference)
266+
{
267+
return $this->nonNumericIndices
268+
? $this->createReferenceEvaluateAllowedNonNumericIndex($reference)
269+
: $this->createReferenceEvaluateNotAllowedNonNumericIndex($reference);
270+
}
271+
272+
273+
abstract protected function createReferenceEvaluateAllowedNonNumericIndex(Reference $reference);
274+
275+
276+
abstract protected function createReferenceEvaluateNotAllowedNonNumericIndex(Reference $reference);
277+
278+
279+
abstract protected function createReferenceEvaluateUnknownIndex(Reference $reference);
280+
281+
282+
abstract protected function createReferenceEvaluateScalar(Reference $reference);
229283

230284

231285
protected function setupReferenceEvaluate(Reference $reference)

src/Pointer/Evaluate/LocatorRead.php

Lines changed: 45 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,51 @@ protected function processCursor()
1414
}
1515

1616

17-
protected function createReferenceEvaluate(Reference $reference)
18-
{
19-
if (is_object($this->cursor)) {
20-
return ReferenceReadProperty::factory();
21-
}
22-
if (is_array($this->cursor)) {
23-
switch ($reference->getType()) {
24-
case $reference::TYPE_NEXT_INDEX:
25-
return ReferenceReadNextIndex::factory();
26-
27-
case $reference::TYPE_INDEX:
28-
return ReferenceReadNumericIndex::factory();
29-
30-
case $reference::TYPE_PROPERTY:
31-
return $this->nonNumericIndices
32-
? ReferenceReadAllowedNonNumericIndex::factory()
33-
: ReferenceReadNotAllowedNonNumericIndex::factory();
34-
35-
default:
36-
throw new DomainException(
37-
"Failed to create read evaluator for reference of type {$reference->getType()}"
38-
);
39-
}
40-
}
17+
protected function createReferenceEvaluateProperty(Reference $reference)
18+
{
19+
return ReferenceReadProperty::factory()
20+
->setReference($reference);
21+
}
22+
23+
24+
protected function createReferenceEvaluateNextIndex(Reference $reference)
25+
{
26+
return ReferenceReadNextIndex::factory()
27+
->setReference($reference);
28+
}
29+
30+
31+
protected function createReferenceEvaluateNumericIndex(Reference $reference)
32+
{
33+
return ReferenceReadNumericIndex::factory()
34+
->setReference($reference);
35+
}
36+
37+
38+
protected function createReferenceEvaluateAllowedNonNumericIndex(Reference $reference)
39+
{
40+
return ReferenceReadAllowedNonNumericIndex::factory()
41+
->setReference($reference);
42+
}
43+
44+
45+
protected function createReferenceEvaluateNotAllowedNonNumericIndex(Reference $reference)
46+
{
47+
return ReferenceReadNotAllowedNonNumericIndex::factory()
48+
->setReference($reference);
49+
}
50+
51+
52+
protected function createReferenceEvaluateUnknownIndex(Reference $reference)
53+
{
54+
throw new DomainException(
55+
"Failed to create array read evaluator for reference of type {$reference->getType()}"
56+
);
57+
}
58+
59+
60+
protected function createReferenceEvaluateScalar(Reference $reference)
61+
{
4162
throw new EvaluateException("Cannot read non-structured data by reference");
4263
}
4364
}

src/Pointer/Evaluate/LocatorTest.php

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,51 @@ protected function processCursor()
1515
}
1616

1717

18-
/**
19-
* @param Reference $reference
20-
* @return ReferenceEvaluate
21-
*/
22-
protected function createReferenceEvaluate(Reference $reference)
23-
{
24-
if (is_object($this->cursor)) {
25-
return ReferenceTestProperty::factory();
26-
}
27-
if (is_array($this->cursor)) {
28-
switch ($reference->getType()) {
29-
case $reference::TYPE_NEXT_INDEX:
30-
return ReferenceTestNextIndex::factory();
31-
32-
case $reference::TYPE_INDEX:
33-
return ReferenceTestNumericIndex::factory();
34-
35-
case $reference::TYPE_PROPERTY:
36-
return $this->nonNumericIndices
37-
? ReferenceTestAllowedNonNumericIndex::factory()
38-
: ReferenceTestNotAllowedNonNumericIndex::factory();
39-
40-
default:
41-
throw new DomainException(
42-
"Failed to create test evaluator for reference of type {$reference->getType()}"
43-
);
44-
}
45-
}
18+
protected function createReferenceEvaluateProperty(Reference $reference)
19+
{
20+
return ReferenceTestProperty::factory()
21+
->setReference($reference);
22+
}
23+
24+
25+
protected function createReferenceEvaluateNextIndex(Reference $reference)
26+
{
27+
return ReferenceTestNextIndex::factory()
28+
->setReference($reference);
29+
}
30+
31+
32+
protected function createReferenceEvaluateNumericIndex(Reference $reference)
33+
{
34+
return ReferenceTestNumericIndex::factory()
35+
->setReference($reference);
36+
}
37+
38+
39+
protected function createReferenceEvaluateAllowedNonNumericIndex(Reference $reference)
40+
{
41+
return ReferenceTestAllowedNonNumericIndex::factory()
42+
->setReference($reference);
43+
}
44+
45+
46+
protected function createReferenceEvaluateNotAllowedNonNumericIndex(Reference $reference)
47+
{
48+
return ReferenceTestNotAllowedNonNumericIndex::factory()
49+
->setReference($reference);
50+
}
51+
52+
53+
protected function createReferenceEvaluateUnknownIndex(Reference $reference)
54+
{
55+
throw new DomainException(
56+
"Failed to create array test evaluator for reference of type {$reference->getType()}"
57+
);
58+
}
59+
60+
61+
protected function createReferenceEvaluateScalar(Reference $reference)
62+
{
4663
throw new EvaluateException("Cannot test non-structured data by reference");
4764
}
4865
}

src/Pointer/Evaluate/LocatorWrite.php

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -56,41 +56,6 @@ protected function processCursor()
5656
}
5757

5858

59-
/**
60-
* @param Reference $reference
61-
* @return ReferenceEvaluate
62-
* @throws EvaluateException
63-
*/
64-
protected function createReferenceEvaluate(Reference $reference)
65-
{
66-
if (is_object($this->cursor)) {
67-
return ReferenceWriteProperty::factory();
68-
}
69-
if (is_array($this->cursor)) {
70-
switch ($reference->getType()) {
71-
case $reference::TYPE_NEXT_INDEX:
72-
return ReferenceWriteNextIndex::factory();
73-
74-
case $reference::TYPE_INDEX:
75-
return $this->numericIndexGaps
76-
? ReferenceWriteNumericIndexWithGaps::factory()
77-
: ReferenceWriteNumericIndexWithoutGaps::factory();
78-
79-
case $reference::TYPE_PROPERTY:
80-
return $this->nonNumericIndices
81-
? ReferenceWriteAllowedNonNumericIndex::factory()
82-
: ReferenceWriteNotAllowedNonNumericIndex::factory();
83-
84-
default:
85-
throw new DomainException(
86-
"Failed to create write evaluator for reference of type {$reference->getType()}"
87-
);
88-
}
89-
}
90-
throw new EvaluateException("Cannot write into non-structured data by reference");
91-
}
92-
93-
9459
protected function setupReferenceEvaluate(Reference $reference)
9560
{
9661
/** @var ReferenceWrite $referenceEvaluate */
@@ -102,4 +67,56 @@ protected function setupReferenceEvaluate(Reference $reference)
10267
$referenceEvaluate->setValue($this->getValue());
10368
return $this;
10469
}
70+
71+
72+
protected function createReferenceEvaluateProperty(Reference $reference)
73+
{
74+
return ReferenceWriteProperty::factory()
75+
->setReference($reference);
76+
}
77+
78+
79+
protected function createReferenceEvaluateNextIndex(Reference $reference)
80+
{
81+
return ReferenceWriteNextIndex::factory()
82+
->setReference($reference);
83+
}
84+
85+
86+
protected function createReferenceEvaluateNumericIndex(Reference $reference)
87+
{
88+
return $this->numericIndexGaps
89+
? ReferenceWriteNumericIndexWithGaps::factory()
90+
->setReference($reference)
91+
: ReferenceWriteNumericIndexWithoutGaps::factory()
92+
->setReference($reference);
93+
}
94+
95+
96+
protected function createReferenceEvaluateAllowedNonNumericIndex(Reference $reference)
97+
{
98+
return ReferenceWriteAllowedNonNumericIndex::factory()
99+
->setReference($reference);
100+
}
101+
102+
103+
protected function createReferenceEvaluateNotAllowedNonNumericIndex(Reference $reference)
104+
{
105+
return ReferenceWriteNotAllowedNonNumericIndex::factory()
106+
->setReference($reference);
107+
}
108+
109+
110+
protected function createReferenceEvaluateUnknownIndex(Reference $reference)
111+
{
112+
throw new DomainException(
113+
"Failed to create array write evaluator for reference of type {$reference->getType()}"
114+
);
115+
}
116+
117+
118+
protected function createReferenceEvaluateScalar(Reference $reference)
119+
{
120+
throw new EvaluateException("Cannot write non-structured data by reference");
121+
}
105122
}

0 commit comments

Comments
 (0)