Skip to content

Commit 4924067

Browse files
committed
keep non-nil array when last item is removed
Signed-off-by: dmitriy kalinin <[email protected]>
1 parent 6f457cb commit 4924067

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

patch/array_insertion.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (i ArrayInsertion) Concrete() (ArrayInsertionIndex, error) {
5757

5858
func (i ArrayInsertionIndex) Update(array []interface{}, obj interface{}) []interface{} {
5959
if i.insert {
60-
var newAry []interface{}
60+
newAry := []interface{}{}
6161
newAry = append(newAry, array[:i.number]...) // not inclusive
6262
newAry = append(newAry, obj)
6363
newAry = append(newAry, array[i.number:]...) // inclusive

patch/remove_op.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (op RemoveOp) Apply(doc interface{}) (interface{}, error) {
3434
}
3535

3636
if isLast {
37-
var newAry []interface{}
37+
newAry := []interface{}{}
3838
newAry = append(newAry, typedObj[:idx]...)
3939
newAry = append(newAry, typedObj[idx+1:]...)
4040
prevUpdate(newAry)
@@ -74,7 +74,7 @@ func (op RemoveOp) Apply(doc interface{}) (interface{}, error) {
7474
}
7575

7676
if isLast {
77-
var newAry []interface{}
77+
newAry := []interface{}{}
7878
newAry = append(newAry, typedObj[:idx]...)
7979
newAry = append(newAry, typedObj[idx+1:]...)
8080
prevUpdate(newAry)

patch/remove_op_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ var _ = Describe("RemoveOp.Apply", func() {
3131
res, err = RemoveOp{Path: MustNewPointerFromString("/-1")}.Apply([]interface{}{1, 2, 3})
3232
Expect(err).ToNot(HaveOccurred())
3333
Expect(res).To(Equal([]interface{}{1, 2}))
34+
35+
res, err = RemoveOp{Path: MustNewPointerFromString("/0")}.Apply([]interface{}{1})
36+
Expect(err).ToNot(HaveOccurred())
37+
Expect(res).To(Equal([]interface{}{}))
3438
})
3539

3640
It("removes relative array item", func() {
@@ -110,6 +114,16 @@ var _ = Describe("RemoveOp.Apply", func() {
110114
}))
111115
})
112116

117+
It("removes array item if found, leaving empty array", func() {
118+
doc := []interface{}{
119+
map[interface{}]interface{}{"key": "val"},
120+
}
121+
122+
res, err := RemoveOp{Path: MustNewPointerFromString("/key=val")}.Apply(doc)
123+
Expect(err).ToNot(HaveOccurred())
124+
Expect(res).To(Equal([]interface{}{}))
125+
})
126+
113127
It("removes relative array item", func() {
114128
doc := []interface{}{
115129
map[interface{}]interface{}{"key": "val"},

0 commit comments

Comments
 (0)