Skip to content

Commit 738792d

Browse files
committed
Complex write reference evaluators removed
1 parent 335605c commit 738792d

14 files changed

+91
-187
lines changed

src/Pointer/Evaluate/Advancer.php

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

47+
48+
public function canWrite()
49+
{
50+
return $this
51+
->getReference()
52+
->isLast();
53+
}
54+
4755
/**
4856
* @return $this
4957
* @throws EvaluateException

src/Pointer/Evaluate/AdvancerNonNumericIndex.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ public function canAdvance()
2929
}
3030

3131

32+
public function canWrite()
33+
{
34+
return $this->isAllowed && parent::canWrite();
35+
}
36+
37+
3238
public function fail()
3339
{
3440
if ($this->isAllowed) {

src/Pointer/Evaluate/AdvancerNumericIndex.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,22 @@
55
class AdvancerNumericIndex extends AdvancerIndex
66
{
77

8+
protected $areAllowedGaps = false;
9+
10+
11+
public function allowGaps()
12+
{
13+
$this->areAllowedGaps = true;
14+
return $this;
15+
}
16+
17+
18+
public function forbidGaps()
19+
{
20+
$this->areAllowedGaps = true;
21+
return $this;
22+
}
23+
824

925
public function getValue()
1026
{
@@ -16,4 +32,18 @@ public function getValueDescription()
1632
{
1733
return "{$this->getValue()}";
1834
}
35+
36+
37+
public function canWrite()
38+
{
39+
if (!parent::canWrite()) {
40+
return false;
41+
}
42+
if ($this->areAllowedGaps) {
43+
return true;
44+
}
45+
return
46+
0 == $this->getValue() && empty($this->getDataCursor()) ||
47+
array_key_exists($this->getValue() - 1, $this->getDataCursor());
48+
}
1949
}

src/Pointer/Evaluate/ReferenceAdvanceable.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ protected function getAdvancer()
2020
{
2121
if (null === $this->advancer) {
2222
throw new LogicException("Advancer is not set in reference evaluator");
23-
/*$this->advancer = $this
24-
->createAdvancer()
25-
->setReference($this->getReference())
26-
->setDataCursor($this->getDataCursor());*/
2723
}
2824
return $this->advancer;
2925
}

src/Pointer/Evaluate/ReferenceWrite.php

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace Remorhaz\JSONPointer\Pointer\Evaluate;
44

5-
abstract class ReferenceWrite extends ReferenceAdvanceable
5+
class ReferenceWrite extends ReferenceAdvanceable
66
{
7-
7+
88
protected $value;
99

1010
protected $isValueSet = false;
@@ -25,4 +25,34 @@ protected function getValue()
2525
}
2626
return $this->value;
2727
}
28+
29+
30+
protected function performNonExisting()
31+
{
32+
$canWrite = $this
33+
->getAdvancer()
34+
->canWrite();
35+
return $canWrite
36+
? $this->write()
37+
: $this->failWrite();
38+
}
39+
40+
41+
protected function write()
42+
{
43+
$this
44+
->getAdvancer()
45+
->write($this->getValue());
46+
$result = null;
47+
return $this->setResult($result);
48+
}
49+
50+
51+
protected function failWrite()
52+
{
53+
$this
54+
->getAdvancer()
55+
->fail();
56+
return $this;
57+
}
2858
}

src/Pointer/Evaluate/ReferenceWriteAllowedNonNumericIndex.php

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/Pointer/Evaluate/ReferenceWriteFactory.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,38 +27,42 @@ public function forbidNumericIndexGaps()
2727

2828
protected function createProperty()
2929
{
30-
return ReferenceWriteProperty::factory()
30+
return ReferenceWrite::factory()
3131
->setAdvancer(AdvancerProperty::factory());
3232
}
3333

3434

3535
protected function createNextIndex()
3636
{
37-
return ReferenceWriteNextIndex::factory()
37+
return ReferenceWrite::factory()
3838
->setAdvancer(AdvancerNextIndex::factory());
3939
}
4040

4141

4242
protected function createNumericIndex()
4343
{
44-
return $this->numericIndexGaps
45-
? ReferenceWriteNumericIndexWithGaps::factory()
46-
->setAdvancer(AdvancerNumericIndex::factory())
47-
: ReferenceWriteNumericIndexWithoutGaps::factory()
48-
->setAdvancer(AdvancerNumericIndex::factory());
44+
$advancer = AdvancerNumericIndex::factory();
45+
if ($this->numericIndexGaps) {
46+
$advancer->allowGaps();
47+
}
48+
return ReferenceWrite::factory()
49+
->setAdvancer($advancer);
4950
}
5051

5152

5253
protected function createAllowedNonNumericIndex()
5354
{
54-
return ReferenceWriteAllowedNonNumericIndex::factory()
55-
->setAdvancer(AdvancerNonNumericIndex::factory());
55+
$advancer = AdvancerNonNumericIndex::factory()
56+
->allow();
57+
return ReferenceWrite::factory()
58+
->setAdvancer($advancer);
5659
}
5760

5861

5962
protected function createNotAllowedNonNumericIndex()
6063
{
61-
return ReferenceWriteNotAllowedNonNumericIndex::factory();
64+
return ReferenceWrite::factory()
65+
->setAdvancer(AdvancerNonNumericIndex::factory());
6266
}
6367

6468

src/Pointer/Evaluate/ReferenceWriteNextIndex.php

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/Pointer/Evaluate/ReferenceWriteNotAllowedNonNumericIndex.php

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/Pointer/Evaluate/ReferenceWriteNumericIndex.php

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)