11<?php
22
3- namespace Remorhaz \JSONPointer \Pointer ;
3+ namespace Remorhaz \JSONPointer \Pointer \ Evaluate ;
44
55use Remorhaz \JSONPointer \Locator ;
66use 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}
0 commit comments