json_matcher 0.0.3 → 0.0.4

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.
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm use --create 1.9.2@json_matcher
1
+ rvm use --create ruby-1.9.2-p180@json_matcher
data/README.md CHANGED
@@ -10,3 +10,12 @@ It gives the difference in diff format with colors
10
10
  JsonMatcher.similar a, b
11
11
 
12
12
  It returns nil if similar and a diff if different
13
+
14
+ Check Spec section for details
15
+
16
+ # Options
17
+
18
+ The only option currently supported is exact
19
+ eg JsonMatcher.similar a, b, {:exact => true}
20
+ This makes the match exact
21
+
@@ -1,3 +1,3 @@
1
1
  module JsonMatcher
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/json_matcher.rb CHANGED
@@ -3,22 +3,26 @@ require 'json'
3
3
  require 'json_matcher/version'
4
4
  module JsonMatcher
5
5
 
6
- def self.similar(actual, expected)
7
- result = Matcher.new(actual, expected)
6
+ def self.similar(actual, expected, opts = {})
7
+ result = Matcher.new(actual, expected, opts)
8
8
  result.similar? ? nil : result.to_s
9
9
  end
10
10
 
11
11
  class Matcher
12
12
  include Term::ANSIColor
13
13
 
14
- def initialize actual, expected, opt = {}
15
- @actual = JSON.parse actual
16
- @expected = JSON.parse expected
14
+ def initialize actual, expected, opts = {}
15
+ @actual = actual
16
+ @expected = expected
17
+ @actual_hash = JSON.parse actual
18
+ @expected_hash = JSON.parse expected
19
+ @options = opts
17
20
  @failure_msg = { :extra => {}, :less => {}}
18
21
  end
19
22
 
20
23
  def similar?
21
- return equal_without_order
24
+
25
+ return @options[:exact] ? equal : equal_without_order
22
26
  end
23
27
 
24
28
  def to_s
@@ -26,18 +30,22 @@ module JsonMatcher
26
30
  end
27
31
 
28
32
  private
33
+ def equal
34
+ @actual == @expected
35
+ end
36
+
29
37
  def equal_without_order
30
- return true if @actual == @expected
31
- @failure_msg[:extra] = @actual.select {|key,val| !@expected.keys.include? key}
32
- @failure_msg[:less] = @expected.select {|key,val| !@actual.keys.include? key}
33
- hash_matcher @actual, @expected
38
+ return true if @actual_hash == @expected_hash
39
+ @failure_msg[:extra] = @actual_hash.select {|key,val| !@expected_hash.keys.include? key}
40
+ @failure_msg[:less] = @expected_hash.select {|key,val| !@actual_hash.keys.include? key}
41
+ hash_matcher @actual_hash, @expected_hash
34
42
  @failure_msg[:extra].length == 0 and @failure_msg[:less].length == 0
35
43
  end
36
44
 
37
45
  def hash_matcher first, second
38
46
  first.each do |key, value|
39
47
  return false unless first[key].class == second[key].class
40
- if value and @expected[key]
48
+ if value and second[key]
41
49
  if first[key].is_a? Hash
42
50
  hash_matcher first[key], second[key]
43
51
  elsif first[key].is_a? Array
@@ -55,4 +55,14 @@ describe JsonMatcher do
55
55
  expected = { :array_key => [3,2,1], :key => "value", :hash_key => { :array_key => [6,4,5], :normal_key => 1 } }.to_json
56
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
57
  end
58
+
59
+ describe "options" do
60
+ describe "exact match" do
61
+ it "should just do exact match if option exact set to true" do
62
+ actual = { :key => "value", :extra_key => "value2", :another_key => "value3" }.to_json
63
+ expected = { :extra_key => "value2", :another_key => "value3", :key => "value" }.to_json
64
+ JsonMatcher.similar(actual, expected, {:exact => true}).should_not be_nil
65
+ end
66
+ end
67
+ end
58
68
  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.3
4
+ version: 0.0.4
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: &2164428680 !ruby/object:Gem::Requirement
16
+ requirement: &2165169260 !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: *2164428680
24
+ version_requirements: *2165169260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: term-ansicolor
27
- requirement: &2164428260 !ruby/object:Gem::Requirement
27
+ requirement: &2165168840 !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: *2164428260
35
+ version_requirements: *2165168840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &2164427840 !ruby/object:Gem::Requirement
38
+ requirement: &2165168420 !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: *2164427840
46
+ version_requirements: *2165168420
47
47
  description: A gem that matches similar json and ignores order
48
48
  email:
49
49
  - garima.slideshare@gmail.com