Skip to content

Commit 3c7cd74

Browse files
committed
Advancers are set from outside of reference evaluators
1 parent e80bad7 commit 3c7cd74

19 files changed

+75
-103
lines changed

src/Pointer/Evaluate/Advancer.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ abstract public function advance();
4444
*/
4545
abstract public function write($data);
4646

47+
/**
48+
* @throws EvaluateException
49+
*/
50+
abstract public function fail();
51+
4752

4853
public static function factory()
4954
{

src/Pointer/Evaluate/AdvancerNewIndex.php renamed to src/Pointer/Evaluate/AdvancerNextIndex.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Remorhaz\JSONPointer\Pointer\Evaluate;
44

5-
class AdvancerNewIndex extends Advancer
5+
class AdvancerNextIndex extends Advancer
66
{
77

88

@@ -25,6 +25,12 @@ public function write($data)
2525
}
2626

2727

28+
public function fail()
29+
{
30+
throw new EvaluateException("Index {$this->getValueDescription()} is not found");
31+
}
32+
33+
2834
public function getValue()
2935
{
3036
throw new LogicException("Next index cannot have advanceable value");

src/Pointer/Evaluate/AdvancerNonNumericIndex.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,10 @@ public function write($data)
2323
$this->dataCursor[$this->getValue()] = $data;
2424
return $this;
2525
}
26+
27+
28+
public function fail()
29+
{
30+
throw new EvaluateException("Index {$this->getValueDescription()} is not found");
31+
}
2632
}

src/Pointer/Evaluate/AdvancerProperty.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,10 @@ public function write($data)
2323
$this->dataCursor->{$this->getValue()} = $data;
2424
return $this;
2525
}
26+
27+
28+
public function fail()
29+
{
30+
throw new EvaluateException("Property {$this->getValueDescription()} is not found");
31+
}
2632
}

src/Pointer/Evaluate/ReferenceAdvanceable.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,6 @@ abstract class ReferenceAdvanceable extends ReferenceEvaluate
1111
protected $advancer;
1212

1313

14-
/**
15-
* @return Advancer
16-
*/
17-
abstract protected function createAdvancer();
18-
1914
abstract protected function performNonExisting();
2015

2116
/**
@@ -24,15 +19,23 @@ abstract protected function performNonExisting();
2419
protected function getAdvancer()
2520
{
2621
if (null === $this->advancer) {
27-
$this->advancer = $this
22+
throw new LogicException("Advancer is not set in reference evaluator");
23+
/*$this->advancer = $this
2824
->createAdvancer()
2925
->setReference($this->getReference())
30-
->setDataCursor($this->getDataCursor());
26+
->setDataCursor($this->getDataCursor());*/
3127
}
3228
return $this->advancer;
3329
}
3430

3531

32+
public function setAdvancer(Advancer $advancer)
33+
{
34+
$this->advancer = $advancer;
35+
return $this;
36+
}
37+
38+
3639
/**
3740
* Performs reference evaluation.
3841
*
@@ -42,6 +45,8 @@ public function perform()
4245
{
4346
$canAdvance = $this
4447
->getAdvancer()
48+
->setReference($this->getReference())
49+
->setDataCursor($this->getDataCursor())
4550
->canAdvance();
4651
if ($canAdvance) {
4752
$dataCursor = &$this

src/Pointer/Evaluate/ReferenceReadAllowedNonNumericIndex.php

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,10 @@ class ReferenceReadAllowedNonNumericIndex extends ReferenceAdvanceable
66
{
77

88

9-
protected function createAdvancer()
10-
{
11-
return AdvancerNonNumericIndex::factory();
12-
}
13-
14-
159
protected function performNonExisting()
1610
{
17-
$indexDescription = $this
11+
$this
1812
->getAdvancer()
19-
->getValueDescription();
20-
throw new EvaluateException("No index {$indexDescription} in array");
13+
->fail();
2114
}
2215
}

src/Pointer/Evaluate/ReferenceReadFactory.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ class ReferenceReadFactory extends ReferenceEvaluateFactory
88

99
protected function createProperty()
1010
{
11-
return ReferenceReadProperty::factory();
11+
return ReferenceReadProperty::factory()
12+
->setAdvancer(AdvancerProperty::factory());
1213
}
1314

1415

@@ -20,13 +21,15 @@ protected function createNextIndex()
2021

2122
protected function createNumericIndex()
2223
{
23-
return ReferenceReadNumericIndex::factory();
24+
return ReferenceReadNumericIndex::factory()
25+
->setAdvancer(AdvancerNumericIndex::factory());
2426
}
2527

2628

2729
protected function createAllowedNonNumericIndex()
2830
{
29-
return ReferenceReadAllowedNonNumericIndex::factory();
31+
return ReferenceReadAllowedNonNumericIndex::factory()
32+
->setAdvancer(AdvancerNonNumericIndex::factory());
3033
}
3134

3235

src/Pointer/Evaluate/ReferenceReadNumericIndex.php

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,10 @@ class ReferenceReadNumericIndex extends ReferenceAdvanceable
66
{
77

88

9-
protected function createAdvancer()
10-
{
11-
return AdvancerNumericIndex::factory();
12-
}
13-
14-
159
protected function performNonExisting()
1610
{
17-
$indexDescription = $this
11+
$this
1812
->getAdvancer()
19-
->getValueDescription();
20-
throw new EvaluateException("No index {$indexDescription} in array");
13+
->fail();
2114
}
2215
}

src/Pointer/Evaluate/ReferenceReadProperty.php

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,10 @@ class ReferenceReadProperty extends ReferenceAdvanceable
66
{
77

88

9-
protected function createAdvancer()
10-
{
11-
return AdvancerProperty::factory();
12-
}
13-
14-
159
protected function performNonExisting()
1610
{
17-
$propertyDescription = $this
11+
$this
1812
->getAdvancer()
19-
->getValueDescription();
20-
throw new EvaluateException("No property {$propertyDescription} in object");
13+
->fail();
2114
}
2215
}

src/Pointer/Evaluate/ReferenceTestAllowedNonNumericIndex.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,6 @@ class ReferenceTestAllowedNonNumericIndex extends ReferenceAdvanceable
66
{
77

88

9-
protected function createAdvancer()
10-
{
11-
return AdvancerNonNumericIndex::factory();
12-
}
13-
14-
159
protected function performNonExisting()
1610
{
1711
$result = false;

0 commit comments

Comments
 (0)