jsondiff 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jsondiff (0.0.1)
4
+ jsondiff (0.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -31,6 +31,14 @@ JsonDiff.generate({foo: :bar}, {foo: :plop})
31
31
 
32
32
  rspec
33
33
 
34
+ ## Changelog
35
+
36
+ - 0.0.3:
37
+ - Allow to compare root Hash and Array.
38
+ - Performance improvements
39
+ - 0.0.2: Fix require 'jsondiff'
40
+ - 0.0.1: Initial release
41
+
34
42
  ## License
35
43
 
36
44
  Copyright (c) 2013 François de Metz
@@ -3,13 +3,22 @@ require 'jsondiff/hash_diff'
3
3
  require 'jsondiff/array_diff'
4
4
 
5
5
  module JsonDiff
6
+ include Helpers
7
+
6
8
  # Generate a patch from two ruby hash
7
9
  #
8
- # hash1 - the first hash
9
- # hash2 - the second hash
10
+ # arg1 - the first argument
11
+ # arg2 - the second argument
10
12
  #
11
13
  # Returns an array of operations
12
- def self.generate(hash1, hash2)
13
- HashDiff.generate([], "", hash1, hash2)
14
+ def self.generate(arg1, arg2, result=[], prefix="")
15
+ if Hash === arg1 && Hash === arg2
16
+ HashDiff.generate(result, prefix, arg1, arg2)
17
+ elsif Array === arg1 && Array === arg2
18
+ ArrayDiff.generate(result, prefix, arg1, arg2)
19
+ else
20
+ result << replace_op(prefix, arg2)
21
+ end
22
+ result
14
23
  end
15
24
  end
@@ -5,28 +5,22 @@ module JsonDiff
5
5
  def self.generate(result, prefix, array1, array2)
6
6
  if array1.size < array2.size
7
7
  array2.each_with_index do |value, index|
8
- if array1.at(index) != value
8
+ if array1[index] != value
9
9
  result << add_op(prefix, index, value)
10
10
  array1.insert(index, value)
11
11
  end
12
12
  end
13
13
  elsif array1.size > array2.size
14
14
  array1.each_with_index do |value, index|
15
- if array2.at(index) != value
15
+ if array2[index] != value
16
16
  result << remove_op(prefix, index)
17
17
  array1.delete_at(index)
18
18
  end
19
19
  end
20
20
  end
21
21
  array2.each_with_index do |value, index|
22
- if array1.at(index) != value
23
- if value.kind_of?(Hash) && array1.at(index).kind_of?(Hash)
24
- HashDiff.generate(result, "#{prefix}/#{index}", array1.at(index), value)
25
- elsif value.kind_of?(Array) && array1.at(index).kind_of?(Array)
26
- ArrayDiff.generate(result, "#{prefix}/#{index}", array1.at(index), value)
27
- else
28
- result << replace_op(prefix, index, value)
29
- end
22
+ if array1[index] != value
23
+ JsonDiff.generate(array1.at(index), value, result, "#{prefix}/#{index}")
30
24
  end
31
25
  end
32
26
  end
@@ -7,15 +7,9 @@ module JsonDiff
7
7
  if !hash1.has_key? key
8
8
  result << add_op(prefix, key, value)
9
9
  else
10
- value2 = hash1.fetch(key)
10
+ value2 = hash1[key]
11
11
  if value != value2
12
- if value.kind_of?(Array) && value2.kind_of?(Array)
13
- ArrayDiff.generate(result, "#{prefix}/#{key}", value2, value)
14
- elsif value.kind_of?(Hash) && value2.kind_of?(Hash)
15
- HashDiff.generate(result, "#{prefix}/#{key}", value2, value)
16
- else
17
- result << replace_op(prefix, key, value)
18
- end
12
+ JsonDiff.generate(value2, value, result, "#{prefix}/#{key}")
19
13
  end
20
14
  end
21
15
  end
@@ -13,8 +13,8 @@ module JsonDiff
13
13
  {op: :remove, path: "#{prefix}/#{key}"}
14
14
  end
15
15
 
16
- def replace_op(prefix, key, value)
17
- {op: :replace, path: "#{prefix}/#{key}", value: value}
16
+ def replace_op(prefix, value)
17
+ {op: :replace, path: prefix, value: value}
18
18
  end
19
19
  end
20
20
  end
@@ -1,3 +1,3 @@
1
1
  module JsonDiff
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -82,6 +82,12 @@ describe JsonDiff do
82
82
  {foo: [:bar]})
83
83
  .should == [{ op: :replace, path: "/foo", value: [:bar] }]
84
84
  end
85
+
86
+ it "replace everything" do
87
+ subject.generate({foo: :bar},
88
+ [:foo])
89
+ .should == [{ op: :replace, path: "", value: [:foo] }]
90
+ end
85
91
  end
86
92
  end
87
93
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsondiff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-15 00:00:00.000000000 Z
12
+ date: 2013-04-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &18174720 !ruby/object:Gem::Requirement
16
+ requirement: &10290680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 2.13.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *18174720
24
+ version_requirements: *10290680
25
25
  description: Generate a JSON Patch from 2 ruby hash
26
26
  email:
27
27
  - francois@2metz.fr