json-merge_patch 1.0.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9638a01b320666a7b5270d234ddb50acc746c952
4
- data.tar.gz: f3a2bd4ecb11392969eb47306df2ce8407d46ce2
3
+ metadata.gz: 72a0a7781db050c81b3df548812dd1f48c13f750
4
+ data.tar.gz: 7f4e7f89f6a31b91c49edf2f4d8165088e1990fe
5
5
  SHA512:
6
- metadata.gz: 46b929805693acbb5f82575086898a2fe1320b456e8b2f373780bb09bfac2fec6d296fae57a4a30bfaeb6ad15d70cddd3d00823b0de01af120c10705035c8184
7
- data.tar.gz: 1670820bea9e3df973c6c2a2572ad2e3df01f6bb376eaeff092b655a233be9e0aa2ddbab8f60e36ddb10c47e7a7637209522b046bd90aa9ac75a9fe6ffee9994
6
+ metadata.gz: 9137b208eaaa2806fbe20adbc5e13596550415415477baa68b2bf54d280aad82bc03d59ae4a0ffdeafe5abe97617da44d78fb5071a89256540cd357df2a42e8c
7
+ data.tar.gz: 50f346c2c6622fae988302ac1937a42b78886b69c6ca485a0b6b5c00182255abac556b65aab1ec05c6d9d18935fd2e93bbef2ec3424712eb8febc58226f1d116
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Json::MergePatch
1
+ # JSON::MergePatch
2
2
 
3
3
  [![Build Status](https://travis-ci.org/steveklabnik/json-merge_patch.png)](https://travis-ci.org/steveklabnik/json-merge_patch) [![Code Climate](https://codeclimate.com/github/steveklabnik/json-merge_patch.png)](https://codeclimate.com/github/steveklabnik/json-merge_patch) [![Coverage Status](https://coveralls.io/repos/steveklabnik/json-merge_patch/badge.png)](https://coveralls.io/r/steveklabnik/json-merge_patch)
4
4
 
@@ -6,6 +6,9 @@ This gem augments Ruby's built-in JSON library to support merging JSON blobs
6
6
  in accordance with the [draft-snell-merge-patch
7
7
  draft](http://tools.ietf.org/html/draft-snell-merge-patch-08).
8
8
 
9
+ As far as I know, it is a complete implementation of the draft. If you find
10
+ something that's not compliant, please let me know.
11
+
9
12
  ## Installation
10
13
 
11
14
  Add this line to your application's Gemfile:
@@ -80,6 +83,28 @@ JSON::MergePatch.new({}, {"foo" => "bar"}).call
80
83
  Also check out [http://json-merge-patch.herokuapp.com/](http://json-merge-patch.herokuapp.com/),
81
84
  which is a Rails app that serves up `json-merge-patch` responses.
82
85
 
86
+ ### Use in Rails
87
+
88
+ JSON::MergePatch provides a Railtie that registers the proper MIME type with
89
+ Rails. To use it, do something like this:
90
+
91
+ ```
92
+ def update
93
+ safe_params = params.require(:merge).permit(:original, :patch)
94
+
95
+ @result = JSON::MergePatch.new(
96
+ safe_params[:original],
97
+ safe_params[:patch]
98
+ ).call
99
+
100
+ respond_to do |format|
101
+ format.json_merge_patch do
102
+ render :json => @result
103
+ end
104
+ end
105
+ end
106
+ ```
107
+
83
108
  ## Contributing
84
109
 
85
110
  1. Fork it
@@ -1,6 +1,8 @@
1
1
  require 'json'
2
2
  require "json/merge_patch/version"
3
3
 
4
+ require 'json/merge_patch/railtie' if defined?(Rails)
5
+
4
6
  module JSON
5
7
  # This represents an error that occurs during merging.
6
8
  MergeError = Class.new(StandardError)
@@ -50,24 +52,14 @@ module JSON
50
52
  @orig[m] = @patch[m]
51
53
  else
52
54
  if @orig[m].kind_of?(Array)
53
- result = purge_nils(@patch[m])
54
- if result.nil?
55
- @orig.delete(m)
56
- else
57
- @orig[m] = result
58
- end
55
+ @orig[m] = purge_nils(@patch[m])
59
56
  else
60
57
  @orig[m] = self.class.new(@orig[m], @patch[m]).call
61
58
  end
62
59
  end
63
60
  end
64
61
  elsif !(@patch[m].nil?)
65
- result = purge_nils(@patch[m])
66
- if result.nil?
67
- @orig.delete(m)
68
- else
69
- @orig[m] = result
70
- end
62
+ @orig[m] = purge_nils(@patch[m])
71
63
  end
72
64
  end
73
65
  end
@@ -77,18 +69,8 @@ module JSON
77
69
  private
78
70
 
79
71
  def is_primitive?(val)
80
- case val
81
- when String
82
- true
83
- when Fixnum
84
- true
85
- when TrueClass
86
- true
87
- when FalseClass
88
- true
89
- else
90
- false
91
- end
72
+ [String, Fixnum,
73
+ TrueClass, FalseClass].include?(val.class)
92
74
  end
93
75
 
94
76
  def purge_nils(obj)
@@ -96,18 +78,7 @@ module JSON
96
78
  return obj.compact if obj.kind_of?(Array)
97
79
  return obj if is_primitive?(obj)
98
80
 
99
- obj.each do |m|
100
- if obj[m].nil?
101
- if obj.kind_of?(Array)
102
- obj.delete_at(m)
103
- else
104
- obj.delete(m)
105
- end
106
- elsif obj[m].kind_of?(Hash)
107
- purge_nils(obj[m])
108
- end
109
- end
110
- obj
81
+ obj.delete_if {|k, v| v.nil? }
111
82
  end
112
83
  end
113
84
  end
@@ -0,0 +1,16 @@
1
+ require 'rails'
2
+
3
+ module JSON
4
+ class MergePatch
5
+ # This class registers our gem with Rails.
6
+ class Railtie < ::Rails::Railtie
7
+
8
+ # When the application loads, this will cause Rails to know
9
+ # how to serve up the proper type.
10
+ initializer 'json-merge_patch' do
11
+ Mime::Type.register 'application/json-merge-patch', :json_merge_patch
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -3,6 +3,6 @@
3
3
  module JSON
4
4
  class MergePatch
5
5
  # The current version of json-merge_patch
6
- VERSION = "1.0.0"
6
+ VERSION = "1.1.0"
7
7
  end
8
8
  end
@@ -182,6 +182,31 @@ describe "section 2" do
182
182
  end
183
183
  end
184
184
 
185
+ describe "missing coverage" do
186
+ it "deals with a nil patch" do
187
+ document = %q'{"foo":"bar"}'
188
+ expected = %q'{"foo":"bar"}'
189
+
190
+ assert_equal expected, JSON::MergePatch.new(document, nil).call
191
+ end
192
+
193
+ it "handles primitive true" do
194
+ document = %q'{"foo":"bar"}'
195
+ patch = %q'{"foo":true}'
196
+ expected = %q'{"foo":true}'
197
+
198
+ assert_equal expected, JSON.merge(document, patch)
199
+ end
200
+
201
+ it "handles primitive false" do
202
+ document = %q'{"foo":"bar"}'
203
+ patch = %q'{"foo":false}'
204
+ expected = %q'{"foo":false}'
205
+
206
+ assert_equal expected, JSON.merge(document, patch)
207
+ end
208
+ end
209
+
185
210
  describe "README example" do
186
211
  it "works properly" do
187
212
  document = <<-JSON.strip_heredoc.chomp
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-merge_patch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Klabnik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-18 00:00:00.000000000 Z
11
+ date: 2013-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -67,6 +67,7 @@ files:
67
67
  - Rakefile
68
68
  - json-merge_patch.gemspec
69
69
  - lib/json/merge_patch.rb
70
+ - lib/json/merge_patch/railtie.rb
70
71
  - lib/json/merge_patch/version.rb
71
72
  - test/merge_patch_test.rb
72
73
  - test/test_helper.rb