diff_matcher 2.2.3 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock ADDED
@@ -0,0 +1,26 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.3)
5
+ multi_json (1.0.4)
6
+ rake (0.9.2.2)
7
+ rspec (2.6.0)
8
+ rspec-core (~> 2.6.0)
9
+ rspec-expectations (~> 2.6.0)
10
+ rspec-mocks (~> 2.6.0)
11
+ rspec-core (2.6.4)
12
+ rspec-expectations (2.6.0)
13
+ diff-lcs (~> 1.1.2)
14
+ rspec-mocks (2.6.0)
15
+ simplecov (0.5.4)
16
+ multi_json (~> 1.0.3)
17
+ simplecov-html (~> 0.5.3)
18
+ simplecov-html (0.5.3)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ rake (~> 0.9)
25
+ rspec (~> 2.6.0)
26
+ simplecov
data/README.md CHANGED
@@ -74,6 +74,13 @@ p DiffMatcher::difference(/[a-z]/, "a")
74
74
  # => nil
75
75
  ```
76
76
 
77
+ When `actual` is a fixnum that matches the `expected` range
78
+
79
+ ``` ruby
80
+ p DiffMatcher::difference(1..3, 3)
81
+ # => nil
82
+ ```
83
+
77
84
  When `actual` is passed to an `expected` proc and it returns true
78
85
 
79
86
  ``` ruby
@@ -217,7 +224,7 @@ The items shown in a difference are prefixed as follows:
217
224
  match regexp => "~ "
218
225
  match class => ": "
219
226
  match matcher => "| "
220
- match proc => ". "
227
+ match range => ". "
221
228
  match proc => "{ "
222
229
 
223
230
 
@@ -258,6 +265,7 @@ Similar gems
258
265
  ### JSON matchers
259
266
  * <http://github.com/collectiveidea/json_spec> (Easily handle JSON in RSpec and Cucumber)
260
267
  * <http://github.com/lloyd/JSONSelect> (CSS-like selectors for JSON)
268
+ * <http://github.com/chancancode/json_expressions> (JSON matchmaking for all your API testing needs)
261
269
 
262
270
 
263
271
  Why another differ?
@@ -277,6 +285,15 @@ And the difference string that it outputs can be formatted in several ways as ne
277
285
 
278
286
  As for matching JSON, the matchers above work well, but don't allow for matching patterns.
279
287
 
288
+ #### Update 2012/07/14:
289
+
290
+ [json_expressions](http://github.com/chancancode/json_expressions) (as mentioned in [Ruby5 - Episode #288](http://ruby5.envylabs.com/episodes/292-episode-288-july-13th-2012)) *does*
291
+ do pattern matching and also looks like a good alternative to diff_matcher, it has the following advantages:
292
+ * define capture symbols that can be used to extract values from the matched object
293
+ * (if a symbol is used multiple times, it will make sure all the extracted values match)
294
+ * can optionally match unordered arrays (diff_matcher only matches ordered arrays)
295
+ * because it doesn't bother generating a pretty difference string it might be faster
296
+
280
297
 
281
298
  Use with rspec
282
299
  ---
@@ -0,0 +1,15 @@
1
+ require 'diff_matcher'
2
+
3
+ set_scores = [
4
+ [[6,4], [6,4], [6,4]],
5
+ [[8,4], [6,9], [6,4]],
6
+ ]
7
+
8
+ pat_set_scores = DiffMatcher::AllMatcher.new(
9
+ [0..6, 0..6],
10
+ :size => 2..3
11
+ )
12
+
13
+ invalid_scores = set_scores.map { |score| pat_set_scores.diff(score) }.compact
14
+
15
+ puts invalid_scores
@@ -181,6 +181,20 @@ module DiffMatcher
181
181
  }.call
182
182
  end
183
183
 
184
+ def summarize_item_str(item, method)
185
+ if [:missing, :additional].include?(method)
186
+ if item.match(/\A\[.*\]\Z/) and [:missing, :additional].include?(method)
187
+ '[...]'
188
+ elsif item.match(/\A\{.*\}\Z/)
189
+ '{...}'
190
+ else
191
+ item
192
+ end
193
+ else
194
+ item
195
+ end
196
+ end
197
+
184
198
  def difference(expected, actual)
185
199
  if actual.is_a? expected.class
186
200
  left = diff(expected, actual)
@@ -188,7 +202,9 @@ module DiffMatcher
188
202
  items_to_s(
189
203
  expected,
190
204
  (item_types_shown).inject([]) { |a, method|
191
- a + send(method, left, right, expected).compact.map { |item| markup(method, item) }
205
+ a + send(method, left, right, expected).compact.map { |item|
206
+ markup(method, summarize_item_str(item, method))
207
+ }
192
208
  }
193
209
  )
194
210
  else
@@ -269,22 +285,43 @@ module DiffMatcher
269
285
  markup(match_type, actual) if matches_shown.include?(match_type)
270
286
  end
271
287
 
288
+ def summarize_item(item)
289
+ case item
290
+ when Array
291
+ '[...]'
292
+ when Hash
293
+ '{...}'
294
+ else
295
+ item.inspect
296
+ end
297
+ end
298
+
272
299
  def difference_to_s(expected, actual)
273
300
  match, match_type, d = match?(expected, actual)
274
301
  if match
275
302
  match_to_s(expected, actual.inspect, match_type)
276
303
  else
277
- match_type == :match_matcher ? d :
278
- "#{markup(:missing, expected.inspect)}#{markup(:additional, actual.inspect)}"
304
+ case match_type
305
+ when :match_matcher
306
+ d
307
+ else
308
+ exp, act = if [expected, actual].any? { |item| item.is_a?(Proc) }
309
+ [expected, actual].map { |item| item.inspect }
310
+ else
311
+ [expected, actual].map { |item| summarize_item(item) }
312
+ end
313
+
314
+ "#{markup(:missing, exp)}#{markup(:additional, act)}"
315
+ end
279
316
  end
280
317
  end
281
318
 
282
- def markup(item_type, item)
283
- if item_type == :different
319
+ def markup(match_type, item)
320
+ if match_type == :different
284
321
  item.split("\n").map {|line| " #{line}"}.join("\n") if item
285
322
  else
286
- color, prefix = @color_scheme[item_type]
287
- "#{color}#{prefix+' ' if prefix}#{BOLD if color and item_type != :match_regexp}#{RESET if item_type == :match_regexp}#{item}#{RESET if color}" if item
323
+ color, prefix = @color_scheme[match_type]
324
+ "#{color}#{prefix+' ' if prefix}#{BOLD if color and match_type != :match_regexp}#{RESET if match_type == :match_regexp}#{item}#{RESET if color}" if item
288
325
  end if item
289
326
  end
290
327
  end
@@ -1,3 +1,3 @@
1
1
  module DiffMatcher
2
- VERSION = "2.2.3"
2
+ VERSION = "2.3.1"
3
3
  end
@@ -90,7 +90,7 @@ describe "DiffMatcher::AllMatcher[expected]" do
90
90
  context "when actual is not an array" do
91
91
  let(:actual) { 'a' }
92
92
 
93
- it { should eql "\e[31m- \e[1m[1]\e[0m\e[33m+ \e[1m\"a\"\e[0m" }
93
+ it { should eql "\e[31m- \e[1m[...]\e[0m\e[33m+ \e[1m\"a\"\e[0m" }
94
94
  end
95
95
  end
96
96
  end
@@ -252,6 +252,40 @@ describe "DiffMatcher::difference(expected, actual, opts)" do
252
252
  ]
253
253
  Where, - 1 missing, + 1 additional
254
254
  EOF
255
+
256
+ context "where actual has additional items, it summarizes the Array item with ... and" do
257
+ expected, same, different =
258
+ [ 1, 2 ],
259
+ [ 1, 2, [ 3 ] ],
260
+ [ 0, 2, [ 3 ] ]
261
+
262
+ it_behaves_like "a diff matcher", expected, same, different,
263
+ <<-EOF, :ignore_additional=>true
264
+ [
265
+ - 1+ 0,
266
+ 2,
267
+ + [...]
268
+ ]
269
+ Where, - 1 missing, + 2 additional
270
+ EOF
271
+ end
272
+
273
+ context "where actual has additional items, it summarizes the Hash item with ... and" do
274
+ expected, same, different =
275
+ [ 1, 2 ],
276
+ [ 1, 2, { :a=> [ 3 ] } ],
277
+ [ 0, 2, { :a=> [ 3 ] } ]
278
+
279
+ it_behaves_like "a diff matcher", expected, same, different,
280
+ <<-EOF, :ignore_additional=>true
281
+ [
282
+ - 1+ 0,
283
+ 2,
284
+ + {...}
285
+ ]
286
+ Where, - 1 missing, + 2 additional
287
+ EOF
288
+ end
255
289
  end
256
290
 
257
291
  context "where actual has missing items" do
@@ -278,6 +312,19 @@ describe "DiffMatcher::difference(expected, actual, opts)" do
278
312
  Where, - 1 missing
279
313
  EOF
280
314
  end
315
+
316
+ context "where actual is not an array, it summarizes the diff with ... and" do
317
+ expected, same, different =
318
+ [ 1 ],
319
+ [ 1 ],
320
+ { 0 => 1 }
321
+
322
+ it_behaves_like "a diff matcher", expected, same, different,
323
+ <<-EOF
324
+ - [...]+ {...}
325
+ Where, - 1 missing, + 1 additional
326
+ EOF
327
+ end
281
328
  end
282
329
 
283
330
  context "of an Array derived class," do
@@ -323,7 +370,7 @@ describe "DiffMatcher::difference(expected, actual, opts)" do
323
370
  Where, - 1 missing, + 1 additional
324
371
  EOF
325
372
 
326
- context "with keys of differing classes" do
373
+ context "with values of differing classes" do
327
374
  expected, same, different =
328
375
  { "a"=>{ "b"=>1 } },
329
376
  { "a"=>{ "b"=>1 } },
@@ -332,7 +379,7 @@ describe "DiffMatcher::difference(expected, actual, opts)" do
332
379
  it_behaves_like "a diff matcher", expected, same, different,
333
380
  <<-EOF
334
381
  {
335
- "a"=>- {"b"=>1}+ ["b", 1]
382
+ "a"=>- {...}+ [...]
336
383
  }
337
384
  Where, - 1 missing, + 1 additional
338
385
  EOF
metadata CHANGED
@@ -1,40 +1,32 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: diff_matcher
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.3.1
4
5
  prerelease:
5
- version: 2.2.3
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Playup
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-07-08 00:00:00 Z
12
+ date: 2012-08-02 00:00:00.000000000 +10:00
13
+ default_executable:
14
14
  dependencies: []
15
-
16
- description: |
17
- DiffMatcher performs recursive matches on values contained in hashes, arrays and combinations thereof.
18
-
19
- Values in a containing object match when:
20
-
21
- - actual == expected
22
- - actual.is_a? expected # when expected is a class
23
- - expected.match actual # when expected is a regexp
24
- - expected.call actual # when expected is a proc
25
-
15
+ description: ! "DiffMatcher performs recursive matches on values contained in hashes,
16
+ arrays and combinations thereof.\n\nValues in a containing object match when:\n\n
17
+ \ - actual == expected\n - actual.is_a? expected # when expected is a class\n
18
+ \ - expected.match actual # when expected is a regexp\n - expected.call actual
19
+ \ # when expected is a proc\n"
26
20
  email: chris@playup.com
27
21
  executables: []
28
-
29
22
  extensions: []
30
-
31
23
  extra_rdoc_files: []
32
-
33
- files:
24
+ files:
34
25
  - .rspec
35
26
  - .travis.yml
36
27
  - CHANGELOG.md
37
28
  - Gemfile
29
+ - Gemfile.lock
38
30
  - License.txt
39
31
  - README.md
40
32
  - Rakefile
@@ -42,40 +34,39 @@ files:
42
34
  - diff_matcher.gemspec
43
35
  - doc/diff_matcher.gif
44
36
  - doc/example_output.png
37
+ - examples/tennis_score.rb
45
38
  - lib/diff_matcher.rb
46
39
  - lib/diff_matcher/difference.rb
47
40
  - lib/diff_matcher/version.rb
48
41
  - spec/diff_matcher/difference_spec.rb
49
42
  - spec/spec_helper.rb
43
+ has_rdoc: true
50
44
  homepage: http://github.com/playup/diff_matcher
51
45
  licenses: []
52
-
53
46
  post_install_message:
54
47
  rdoc_options: []
55
-
56
- require_paths:
48
+ require_paths:
57
49
  - lib
58
- required_ruby_version: !ruby/object:Gem::Requirement
50
+ required_ruby_version: !ruby/object:Gem::Requirement
59
51
  none: false
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- hash: 2610392382067707608
64
- segments:
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ segments:
65
57
  - 0
66
- version: "0"
67
- required_rubygems_version: !ruby/object:Gem::Requirement
58
+ hash: -173866385
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
60
  none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: "0"
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
73
65
  requirements: []
74
-
75
66
  rubyforge_project:
76
- rubygems_version: 1.8.21
67
+ rubygems_version: 1.6.2
77
68
  signing_key:
78
69
  specification_version: 3
79
- summary: Generates a diff by matching against expected values, classes, regexes and/or procs.
70
+ summary: Generates a diff by matching against expected values, classes, regexes and/or
71
+ procs.
80
72
  test_files: []
81
-