Skip to content

Commit 976fecc

Browse files
committed
"Copy" and "move" operations implemented.
1 parent f9798fa commit 976fecc

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/Patch.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,20 @@ protected function performOperation(int $index, SelectableReaderInterface $patch
6666
}
6767
break;
6868

69+
case 'copy':
70+
$from = $patchPointer->read("/{$index}/from")->getData();
71+
$valueReader = $dataPointer->read($from);
72+
$dataPointer->add($path, $valueReader);
73+
break;
74+
75+
case 'move':
76+
$from = $patchPointer->read("/{$index}/from")->getData();
77+
$valueReader = $dataPointer->read($from);
78+
$dataPointer
79+
->remove($from)
80+
->add($path, $valueReader);
81+
break;
82+
6983
default:
7084
throw new \Exception("Unknown operation '{$op}'");
7185
}

tests/PatchTest.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,26 @@ public function providerValidPatch_Result(): array
6363
],
6464
(object) ['baz' => 'boo', 'foo' => 'bar'],
6565
],
66-
// TODO: Implement A.6-7.
66+
'A.6' => [
67+
(object) [
68+
'foo' => (object) ['bar' => 'baz', 'waldo' => 'fred'],
69+
'qux' => (object) ['corge' => 'grault'],
70+
],
71+
[
72+
(object) ['op' => 'move', 'from' => '/foo/waldo', 'path' => '/qux/thud'],
73+
],
74+
(object) [
75+
'foo' => (object) ['bar' => 'baz'],
76+
'qux' => (object) ['corge' => 'grault', 'thud' => 'fred'],
77+
],
78+
],
79+
'A.7' => [
80+
(object) ['foo' => ['all', 'grass', 'cows', 'eat']],
81+
[
82+
(object) ['op' => 'move', 'from' => '/foo/1', 'path' => '/foo/3'],
83+
],
84+
(object) ['foo' => ['all', 'cows', 'eat', 'grass']],
85+
],
6786
'A.10' => [
6887
(object) ['foo' => 'bar'],
6988
[

0 commit comments

Comments
 (0)