Skip to content

Commit 352f75f

Browse files
committed
Locator evaluators refactored, unnecessary code deleted
1 parent f04efb6 commit 352f75f

File tree

6 files changed

+52
-250
lines changed

6 files changed

+52
-250
lines changed

src/Pointer.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public function unsetData()
140140

141141
public function test()
142142
{
143-
$pointer = Pointer\Evaluate\Test::factory()
143+
$pointer = Pointer\Evaluate\LocatorTest::factory()
144144
->setLocator($this->getLocator())
145145
->setData($this->getData());
146146
if ($this->hasOption(self::OPTION_NON_NUMERIC_INDICES)) {
@@ -154,7 +154,7 @@ public function test()
154154

155155
public function &read()
156156
{
157-
$pointer = Pointer\Evaluate\Read::factory()
157+
$pointer = Pointer\Evaluate\LocatorRead::factory()
158158
->setLocator($this->getLocator())
159159
->setData($this->getData());
160160
if ($this->hasOption(self::OPTION_NON_NUMERIC_INDICES)) {
@@ -168,7 +168,7 @@ public function &read()
168168

169169
public function write($value)
170170
{
171-
$pointer = Pointer\Evaluate\Write::factory()
171+
$pointer = Pointer\Evaluate\LocatorWrite::factory()
172172
->setLocator($this->getLocator())
173173
->setData($this->getData())
174174
->setValue($value);
Lines changed: 34 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
<?php
22

3-
namespace Remorhaz\JSONPointer\Pointer;
3+
namespace Remorhaz\JSONPointer\Pointer\Evaluate;
44

55
use Remorhaz\JSONPointer\Locator;
66
use Remorhaz\JSONPointer\Locator\Reference;
7-
use Remorhaz\JSONPointer\Pointer\Evaluate\ReferenceEvaluate;
87

98
/**
109
* Abstract JSON Pointer evaluator.
1110
*
1211
* @package JSONPointer
1312
*/
14-
abstract class Evaluate
13+
abstract class LocatorEvaluate
1514
{
1615

1716
/**
@@ -100,12 +99,12 @@ public function setLocator(Locator $locator)
10099
* Returns locator object.
101100
*
102101
* @return Locator
103-
* @throws Evaluate\LogicException
102+
* @throws LogicException
104103
*/
105104
protected function getLocator()
106105
{
107106
if (null === $this->locator) {
108-
throw new Evaluate\LogicException("Locator is not set in evaluator");
107+
throw new LogicException("Locator is not set in evaluator");
109108
}
110109
return $this->locator;
111110
}
@@ -129,12 +128,12 @@ public function setData(&$data)
129128
* Returns data for evaluation.
130129
*
131130
* @return mixed
132-
* @throws Evaluate\LogicException
131+
* @throws LogicException
133132
*/
134133
protected function &getData()
135134
{
136135
if (!$this->isDataSet) {
137-
throw new Evaluate\LogicException("Data is not set in evaluator");
136+
throw new LogicException("Data is not set in evaluator");
138137
}
139138
return $this->data;
140139
}
@@ -171,12 +170,12 @@ protected function resetResult()
171170
* Returns evaluation result.
172171
*
173172
* @return mixed
174-
* @throws Evaluate\LogicException
173+
* @throws LogicException
175174
*/
176175
public function &getResult()
177176
{
178177
if (!$this->isResultSet) {
179-
throw new Evaluate\LogicException("Evaluation result is not set");
178+
throw new LogicException("Evaluation result is not set");
180179
}
181180
return $this->result;
182181
}
@@ -200,7 +199,7 @@ public function forbidNonNumericIndices()
200199
* Performs the evaluation.
201200
*
202201
* @return $this
203-
* @throws Evaluate\LogicException
202+
* @throws LogicException
204203
*/
205204
public function perform()
206205
{
@@ -216,7 +215,7 @@ public function perform()
216215
$this->processCursor();
217216
}
218217
if (!$this->isResultSet) {
219-
throw new Evaluate\LogicException("Data evaluation failed");
218+
throw new LogicException("Data evaluation failed");
220219
}
221220
return $this;
222221
}
@@ -241,6 +240,7 @@ protected function setupReferenceEvaluate(Reference $reference)
241240

242241
/**
243242
* @return ReferenceEvaluate
243+
* @throws LogicException
244244
*/
245245
protected function getReferenceEvaluate()
246246
{
@@ -251,12 +251,17 @@ protected function getReferenceEvaluate()
251251
}
252252

253253

254+
/**
255+
* @param Reference $reference
256+
* @return $this
257+
* @throws EvaluateException
258+
*/
254259
protected function processReference(Reference $reference)
255260
{
256261
try {
257262
$this->processReferenceEvaluate($reference);
258-
} catch (Evaluate\EvaluateException $e) {
259-
throw new Evaluate\EvaluateException(
263+
} catch (EvaluateException $e) {
264+
throw new EvaluateException(
260265
"Error evaluating data for path '{$reference->getPath()}': {$e->getMessage()}",
261266
null,
262267
$e
@@ -268,102 +273,25 @@ protected function processReference(Reference $reference)
268273

269274
protected function processReferenceEvaluate(Reference $reference)
270275
{
271-
if (is_object($this->cursor)) {
272-
$this->processObjectProperty($reference);
273-
} elseif (is_array($this->cursor)) {
274-
$this->processArrayIndex($reference);
275-
} else {
276-
throw new Evaluate\EvaluateException("Accessing non-structured data with reference");
277-
}
278-
}
279-
280-
281-
abstract protected function processCursor();
282-
283-
284-
protected function processObjectProperty(Reference $reference)
285-
{
286-
return property_exists($this->cursor, $reference->getValue())
287-
? $this->processExistingObjectProperty($reference)
288-
: $this->processNonExistingObjectProperty($reference);
289-
}
290-
291-
292-
protected function processExistingObjectProperty(Reference $reference)
293-
{
294-
$this->cursor = &$this->cursor->{$reference->getValue()};
295-
return $this;
296-
}
297-
298-
299-
abstract protected function processNonExistingObjectProperty(Reference $reference);
300-
301-
302-
protected function processArrayIndex(Reference $reference)
303-
{
304-
switch ($reference->getType()) {
305-
case $reference::TYPE_NEXT_INDEX:
306-
return $this->processNextArrayIndex($reference);
307-
308-
case $reference::TYPE_INDEX:
309-
return $this->processNumericArrayIndex($reference);
310-
311-
default:
312-
return $this->nonNumericIndices
313-
? $this->processAllowedNonNumericArrayIndex($reference)
314-
: $this->processNotAllowedNonNumericArrayIndex($reference);
276+
$this
277+
->setupReferenceEvaluate($reference)
278+
->getReferenceEvaluate()
279+
->perform();
280+
$this->cursor = &$this
281+
->getReferenceEvaluate()
282+
->getData();
283+
$isReferenceResultSet = $this
284+
->getReferenceEvaluate()
285+
->isResultSet();
286+
if ($isReferenceResultSet) {
287+
$referenceResult = &$this
288+
->getReferenceEvaluate()
289+
->getResult();
290+
$this->setResult($referenceResult);
315291
}
316-
}
317-
318-
319-
protected function processNumericArrayIndex(Reference $reference)
320-
{
321-
$index = $this->getArrayIndex($reference);
322-
return array_key_exists($index, $this->cursor)
323-
? $this->processExistingArrayIndex($reference)
324-
: $this->processNonExistingArrayIndex($reference);
325-
}
326-
327-
328-
/**
329-
* @param Reference $reference
330-
* @return $this
331-
* @throws Evaluate\EvaluateException
332-
*/
333-
protected function processNotAllowedNonNumericArrayIndex(Reference $reference)
334-
{
335-
throw new Evaluate\EvaluateException(
336-
"Accessing non-numeric index '{$reference->getValue()}' in array"
337-
);
338-
}
339-
340-
341-
protected function processAllowedNonNumericArrayIndex(Reference $reference)
342-
{
343-
$index = $this->getArrayIndex($reference);
344-
return array_key_exists($index, $this->cursor)
345-
? $this->processExistingArrayIndex($reference)
346-
: $this->processNonExistingArrayIndex($reference);
347-
}
348-
349-
350-
abstract protected function processNextArrayIndex(Reference $reference);
351-
352-
353-
protected function processExistingArrayIndex(Reference $reference)
354-
{
355-
$this->cursor = &$this->cursor[$this->getArrayIndex($reference)];
356292
return $this;
357293
}
358294

359295

360-
abstract protected function processNonExistingArrayIndex(Reference $reference);
361-
362-
363-
protected function getArrayIndex(Reference $reference)
364-
{
365-
return $reference->getType() == $reference::TYPE_INDEX
366-
? (int) $reference->getValue()
367-
: $reference->getValue();
368-
}
296+
abstract protected function processCursor();
369297
}
Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use Remorhaz\JSONPointer\Locator\Reference;
66

7-
class Read extends \Remorhaz\JSONPointer\Pointer\Evaluate
7+
class LocatorRead extends LocatorEvaluate
88
{
99

1010

@@ -14,24 +14,6 @@ protected function processCursor()
1414
}
1515

1616

17-
protected function processNextArrayIndex(Reference $reference)
18-
{
19-
throw new LogicException("Deprecated method");
20-
}
21-
22-
23-
protected function processNonExistingObjectProperty(Reference $reference)
24-
{
25-
throw new LogicException("Deprecated method");
26-
}
27-
28-
29-
protected function processNonExistingArrayIndex(Reference $reference)
30-
{
31-
throw new LogicException("Deprecated method");
32-
}
33-
34-
3517
protected function createReferenceEvaluate(Reference $reference)
3618
{
3719
if (is_object($this->cursor)) {
@@ -58,26 +40,4 @@ protected function createReferenceEvaluate(Reference $reference)
5840
}
5941
throw new EvaluateException("Cannot read non-structured data by reference");
6042
}
61-
62-
63-
protected function processReferenceEvaluate(Reference $reference)
64-
{
65-
$this
66-
->setupReferenceEvaluate($reference)
67-
->getReferenceEvaluate()
68-
->perform();
69-
$this->cursor = &$this
70-
->getReferenceEvaluate()
71-
->getData();
72-
$isReferenceResultSet = $this
73-
->getReferenceEvaluate()
74-
->isResultSet();
75-
if ($isReferenceResultSet) {
76-
$referenceResult = &$this
77-
->getReferenceEvaluate()
78-
->getResult();
79-
$this->setResult($referenceResult);
80-
}
81-
return $this;
82-
}
8343
}
Lines changed: 1 addition & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use Remorhaz\JSONPointer\Locator\Reference;
66

7-
class Test extends \Remorhaz\JSONPointer\Pointer\Evaluate
7+
class LocatorTest extends LocatorEvaluate
88
{
99

1010

@@ -15,30 +15,6 @@ protected function processCursor()
1515
}
1616

1717

18-
protected function processNextArrayIndex(Reference $reference)
19-
{
20-
throw new LogicException("Deprecated method");
21-
}
22-
23-
24-
protected function processNonExistingObjectProperty(Reference $reference)
25-
{
26-
throw new LogicException("Deprecated method");
27-
}
28-
29-
30-
protected function processNonExistingArrayIndex(Reference $reference)
31-
{
32-
throw new LogicException("Deprecated method");
33-
}
34-
35-
36-
protected function processNotAllowedNonNumericArrayIndex(Reference $reference)
37-
{
38-
throw new LogicException("Deprecated method");
39-
}
40-
41-
4218
/**
4319
* @param Reference $reference
4420
* @return ReferenceEvaluate
@@ -69,26 +45,4 @@ protected function createReferenceEvaluate(Reference $reference)
6945
}
7046
throw new EvaluateException("Cannot test non-structured data by reference");
7147
}
72-
73-
74-
protected function processReferenceEvaluate(Reference $reference)
75-
{
76-
$this
77-
->setupReferenceEvaluate($reference)
78-
->getReferenceEvaluate()
79-
->perform();
80-
$this->cursor = &$this
81-
->getReferenceEvaluate()
82-
->getData();
83-
$isReferenceResultSet = $this
84-
->getReferenceEvaluate()
85-
->isResultSet();
86-
if ($isReferenceResultSet) {
87-
$referenceResult = &$this
88-
->getReferenceEvaluate()
89-
->getResult();
90-
$this->setResult($referenceResult);
91-
}
92-
return $this;
93-
}
9448
}

0 commit comments

Comments
 (0)