json-merge_patch 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -2
- data/lib/json/merge_patch.rb +11 -2
- data/lib/json/merge_patch/version.rb +1 -1
- data/test/merge_patch_test.rb +56 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ce09ddf6d3610381e68fbb86d8ccf6874573007
|
4
|
+
data.tar.gz: 15046d860a25fc45329f784fd3a9a639534be7d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3afcecc326503602ae67a18db19bc3d34596543ffe68e57a0284eb22c4b7bb4bbc5d7e2d70b03d8000e7077e0bf5bdd11ef14fd55b266939b5da4f6ee7255641
|
7
|
+
data.tar.gz: fadeda3faadfbe333ad0e9da52a0301d17b008936d3a41f46d6345ad1bca05487988947ae7d1208577438bd5e867904b61b3ad6a27547db157cd60b95a408c4d
|
data/.travis.yml
CHANGED
data/lib/json/merge_patch.rb
CHANGED
@@ -18,10 +18,19 @@ module JSON
|
|
18
18
|
|
19
19
|
if merge_patch.is_a? Hash
|
20
20
|
document.merge!(merge_patch)
|
21
|
-
document.delete_if
|
21
|
+
document.delete_if(&method(:recursive_delete_if))
|
22
22
|
return JSON.dump(document)
|
23
23
|
end
|
24
|
-
rescue
|
24
|
+
rescue
|
25
25
|
raise MergeError
|
26
26
|
end
|
27
|
+
|
28
|
+
def self.recursive_delete_if(key, value)
|
29
|
+
if value.kind_of?(Hash)
|
30
|
+
value.delete_if(&method(:recursive_delete_if))
|
31
|
+
nil
|
32
|
+
else
|
33
|
+
value.nil?
|
34
|
+
end
|
35
|
+
end
|
27
36
|
end
|
data/test/merge_patch_test.rb
CHANGED
@@ -87,6 +87,17 @@ describe "section 2" do
|
|
87
87
|
provided data whose value is explicitly null is to be treated
|
88
88
|
as if the member were undefined.
|
89
89
|
=end
|
90
|
+
describe "object" do
|
91
|
+
it "replaces members" do
|
92
|
+
document = %q'{"foo":"bar"}'
|
93
|
+
|
94
|
+
merge_patch = %q'{"foo":"baz"}'
|
95
|
+
|
96
|
+
expected = %q'{"foo":"baz"}'
|
97
|
+
|
98
|
+
assert_equal expected, JSON.merge(document, merge_patch)
|
99
|
+
end
|
100
|
+
end
|
90
101
|
end
|
91
102
|
|
92
103
|
describe "part 4" do
|
@@ -98,6 +109,29 @@ describe "section 2" do
|
|
98
109
|
in the provided data whose value is explicitly null is to be
|
99
110
|
treated as if the member was undefined.
|
100
111
|
=end
|
112
|
+
describe "patch has a primitive" do
|
113
|
+
it "replaces members" do
|
114
|
+
document = %q'{"foo":{"bar":"baz"}}'
|
115
|
+
|
116
|
+
merge_patch = %q'{"foo":2}'
|
117
|
+
|
118
|
+
expected = %q'{"foo":2}'
|
119
|
+
|
120
|
+
assert_equal expected, JSON.merge(document, merge_patch)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "patch has an array" do
|
125
|
+
it "replaces members" do
|
126
|
+
document = %q'{"foo":{"bar":"baz"}}'
|
127
|
+
|
128
|
+
merge_patch = %q'{"foo":["bar"]}'
|
129
|
+
|
130
|
+
expected = %q'{"foo":["bar"]}'
|
131
|
+
|
132
|
+
assert_equal expected, JSON.merge(document, merge_patch)
|
133
|
+
end
|
134
|
+
end
|
101
135
|
end
|
102
136
|
|
103
137
|
describe "part 5" do
|
@@ -107,6 +141,27 @@ describe "section 2" do
|
|
107
141
|
also a JSON object, then recursively apply Rule #2 to each
|
108
142
|
object.
|
109
143
|
=end
|
144
|
+
describe "nested objects" do
|
145
|
+
it "recursively " do
|
146
|
+
document = %q'{"foo":{"bar":"baz"}}'
|
147
|
+
|
148
|
+
merge_patch = %q'{"foo":{"bar":{"baz":"qux"}}}'
|
149
|
+
|
150
|
+
expected = %q'{"foo":{"bar":{"baz":"qux"}}}'
|
151
|
+
|
152
|
+
assert_equal expected, JSON.merge(document, merge_patch)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
it "recursive removal" do
|
157
|
+
document = %q'{"foo":{"bar":"baz"}}'
|
158
|
+
|
159
|
+
merge_patch = %q'{"foo":{"bar":null}}'
|
160
|
+
|
161
|
+
expected = %q'{"foo":{}}'
|
162
|
+
|
163
|
+
assert_equal expected, JSON.merge(document, merge_patch)
|
164
|
+
end
|
110
165
|
end
|
111
166
|
|
112
167
|
describe "part 6" do
|
@@ -152,7 +207,7 @@ describe "README example" do
|
|
152
207
|
}
|
153
208
|
JSON
|
154
209
|
|
155
|
-
expected = <<-JSON.strip_heredoc.
|
210
|
+
expected = <<-JSON.strip_heredoc.gsub(/\s/, "")
|
156
211
|
{
|
157
212
|
"title": "Goodbye!",
|
158
213
|
"author" : {
|