json_matcher 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/json_matcher.rb CHANGED
@@ -11,7 +11,7 @@ module JsonMatcher
11
11
  class Matcher
12
12
  include Term::ANSIColor
13
13
 
14
- def initialize actual, expected
14
+ def initialize actual, expected, opt = {}
15
15
  @actual = JSON.parse actual
16
16
  @expected = JSON.parse expected
17
17
  @failure_msg = { :extra => {}, :less => {}}
@@ -30,23 +30,29 @@ module JsonMatcher
30
30
  return true if @actual == @expected
31
31
  @failure_msg[:extra] = @actual.select {|key,val| !@expected.keys.include? key}
32
32
  @failure_msg[:less] = @expected.select {|key,val| !@actual.keys.include? key}
33
- @actual.each do |key, value|
34
- return false unless @actual[key].class == @expected[key].class
33
+ hash_matcher @actual, @expected
34
+ @failure_msg[:extra].length == 0 and @failure_msg[:less].length == 0
35
+ end
36
+
37
+ def hash_matcher first, second
38
+ first.each do |key, value|
39
+ return false unless first[key].class == second[key].class
35
40
  if value and @expected[key]
36
- if @actual[key].is_a? Array
37
- if value.sort != @expected[key].sort
41
+ if first[key].is_a? Hash
42
+ hash_matcher first[key], second[key]
43
+ elsif first[key].is_a? Array
44
+ if value.sort != second[key].sort
38
45
  @failure_msg[:extra].merge!(key => value)
39
- @failure_msg[:less].merge!(key => @expected[key])
46
+ @failure_msg[:less].merge!(key => second[key])
40
47
  end
41
48
  else
42
- if value != @expected[key]
49
+ if value != second[key]
43
50
  @failure_msg[:extra].merge!(key => value)
44
- @failure_msg[:less].merge!(key => @expected[key])
51
+ @failure_msg[:less].merge!(key => second[key])
45
52
  end
46
53
  end
47
54
  end
48
55
  end
49
- @failure_msg[:extra].length == 0 and @failure_msg[:less].length == 0
50
56
  end
51
57
 
52
58
  end
@@ -1,3 +1,3 @@
1
1
  module JsonMatcher
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -43,4 +43,16 @@ describe JsonMatcher do
43
43
  expected = { :array_key => [3,2,1,4], :key => "value" }.to_json
44
44
  JsonMatcher.similar(actual, expected).should == "\e[31m\e[1mDiff:\n+{\"array_key\":[1,2,3]}\n-{\"array_key\":[3,2,1,4]}\e[0m\e[0m"
45
45
  end
46
+
47
+ it "should match if json with a hash with a array has different sort but exact value" do
48
+ actual = { :key => "value", :array_key => [1,2,3], :hash_key => { :normal_key => 1, :array_key => [4,5,6] }, :zkey => 9 }.to_json
49
+ expected = { :array_key => [3,2,1], :key => "value", :hash_key => { :array_key => [6,4,5], :normal_key => 1 }, :zkey =>9 }.to_json
50
+ JsonMatcher.similar(actual, expected).should be_nil
51
+ end
52
+
53
+ it "should not match if json with a hash with a array has different sort but exact value" do
54
+ actual = { :key => "value", :array_key => [1,2,3], :hash_key => { :normal_key => 1, :array_key => [4,5,6,7] } }.to_json
55
+ expected = { :array_key => [3,2,1], :key => "value", :hash_key => { :array_key => [6,4,5], :normal_key => 1 } }.to_json
56
+ JsonMatcher.similar(actual, expected).should == "\e[31m\e[1mDiff:\n+{\"array_key\":[4,5,6,7]}\n-{\"array_key\":[6,4,5]}\e[0m\e[0m"
57
+ end
46
58
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_matcher
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:
@@ -13,7 +13,7 @@ date: 2011-11-22 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &2169413760 !ruby/object:Gem::Requirement
16
+ requirement: &2164428680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2169413760
24
+ version_requirements: *2164428680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: term-ansicolor
27
- requirement: &2169413340 !ruby/object:Gem::Requirement
27
+ requirement: &2164428260 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2169413340
35
+ version_requirements: *2164428260
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &2169412920 !ruby/object:Gem::Requirement
38
+ requirement: &2164427840 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2169412920
46
+ version_requirements: *2164427840
47
47
  description: A gem that matches similar json and ignores order
48
48
  email:
49
49
  - garima.slideshare@gmail.com