eq_wo_order 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94ee46eac4ca9cc090d8f0182cce5b87aa828e9b
4
- data.tar.gz: bfbf8290a2a3f91f583ddb68e3cf54924636f5ae
3
+ metadata.gz: 9de4820c3d69cd160e796b41f915d46cb4280717
4
+ data.tar.gz: 7e82d8cdc0e89b4def0d227a9a2f53421f8e21b3
5
5
  SHA512:
6
- metadata.gz: a0814c2e6216e367eddff70fedfac1e67135c397a3e9824ec6f0fd1c33c14bca99ddc550fda9d5a994f0413b63e14b2cb7cfec20bf002f3a106895c785cb48d9
7
- data.tar.gz: 4bec73d3241958f98394e3762f4e5cb2f86bf2f70c1f90d2a548523024c91dcf0e1a6ae137da84ec2d1b57226f6dbaad47fdf7fc7ce406f448b4d6869bc5b12d
6
+ metadata.gz: 94db4b4ee1e4a80f216993d65269faa08084cce8365b91a5e2269eb220cd7c5959e7f400056c3d28ab818c0a58d462b206be6087acc4193608764616ac8d3bca
7
+ data.tar.gz: 759b83dd59e87a89b7df42609fc46f3a360d7c36af539f006423fb1d4442f7e0439c27bd2f9625c5cc3324449e2a82711c643419f8d82c03ede249b1760d1f48
data/CHANGELOG CHANGED
@@ -6,3 +6,4 @@ Version 0.2.2 Include CHANGELOG
6
6
  Version 0.2.3 Update description with github link
7
7
  Version 0.2.4 Ruby-ism refactors for terseness
8
8
  Version 0.3.0 Support for nil-case
9
+ Version 0.3.1 Refactor large amounts of code to use Enumerable::any/all, thanks to @jacobsimeon
data/eq_wo_order.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'eq_wo_order'
3
- s.version = '0.3.0'
3
+ s.version = '0.3.1'
4
4
  s.date = '2016-02-29'
5
5
  s.summary = 'RSpec equality matcher that ignores nested order'
6
6
  s.description = 'RSpec equality matcher that deeply compares array without order - arrays of primitives, hashes, and arrays. Examples at github.com/jadekler/eq_wo_order'
data/lib/eq_wo_order.rb CHANGED
@@ -1,59 +1,34 @@
1
1
  RSpec::Matchers.define :eq_wo_order do |expected|
2
2
  match do |actual|
3
- eq_wo_order_base(actual, expected)
3
+ eq_wo_order(actual, expected)
4
4
  end
5
5
 
6
- def eq_wo_order_base(actual, expected)
6
+ def eq_wo_order(actual, expected)
7
7
  return false unless actual.class == expected.class
8
8
 
9
9
  case actual
10
10
  when Array
11
- primitive_items_match?(actual, expected) &&
12
- array_items_match?(actual, expected) &&
13
- hash_items_match?(actual, expected)
11
+ arrays_match?(actual, expected)
14
12
  when Hash
15
- all_items_in_source?(actual, expected) && all_items_in_source?(expected, actual)
13
+ hashes_match?(actual, expected)
16
14
  else
17
15
  actual == expected
18
16
  end
19
17
  end
20
18
 
21
- def primitive_items_match?(actual, expected)
22
- actual_primitive_items = primitives(actual)
23
- expected_primitive_items = primitives(expected)
24
- sort_as_s(actual_primitive_items) == sort_as_s(expected_primitive_items)
25
- end
26
-
27
- def hash_items_match?(actual, expected)
28
- actual_hash_items = actual.grep(Hash)
29
- expected_hash_items = expected.grep(Hash)
30
- all_items_in_source?(actual_hash_items, expected_hash_items) &&
31
- all_items_in_source?(expected_hash_items, actual_hash_items)
32
- end
33
-
34
- def array_items_match?(actual, expected)
35
- actual_array_items = actual.grep(Array)
36
- expected_array_items = expected.grep(Array)
37
- all_items_in_source?(actual_array_items, expected_array_items) &&
38
- all_items_in_source?(expected_array_items, actual_array_items)
39
- end
40
-
41
- def primitives(list)
42
- list.find_all { |x| x.class != Hash && x.class != Array }
43
- end
44
-
45
- # given one array of arrays/hashes
46
- # and another array of arrays/hashes
47
- # are all the items of the first found in the second?
48
- def all_items_in_source?(search, source)
49
- search.map do |search_item|
50
- source.any? do |source_item|
51
- eq_wo_order_base search_item, source_item
19
+ def arrays_match?(actual, expected)
20
+ return false unless actual.length == expected.length
21
+ expected.all? do |expected_item|
22
+ actual.any? do |candidate|
23
+ eq_wo_order(candidate, expected_item)
52
24
  end
53
- end.all?
25
+ end
54
26
  end
55
27
 
56
- def sort_as_s(arr)
57
- arr.sort_by(&:to_s)
28
+ def hashes_match?(actual, expected)
29
+ return false unless arrays_match?(actual.keys, expected.keys)
30
+ expected.all? do |expected_key, expected_value|
31
+ eq_wo_order(actual[expected_key], expected_value)
32
+ end
58
33
  end
59
34
  end
@@ -1,4 +1,4 @@
1
- require_relative '../../lib/eq_wo_order'
1
+ require 'eq_wo_order'
2
2
 
3
3
  describe '#eq_wo_order' do
4
4
  describe 'basic types' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eq_wo_order
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean de Klerk
@@ -14,42 +14,42 @@ dependencies:
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.7'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  description: RSpec equality matcher that deeply compares array without order - arrays
@@ -59,9 +59,9 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
63
- - .rspec
64
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".travis.yml"
65
65
  - CHANGELOG
66
66
  - Gemfile
67
67
  - LICENSE.txt
@@ -82,17 +82,17 @@ require_paths:
82
82
  - lib
83
83
  required_ruby_version: !ruby/object:Gem::Requirement
84
84
  requirements:
85
- - - '>='
85
+ - - ">="
86
86
  - !ruby/object:Gem::Version
87
87
  version: '0'
88
88
  required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - '>='
90
+ - - ">="
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  requirements: []
94
94
  rubyforge_project:
95
- rubygems_version: 2.4.8
95
+ rubygems_version: 2.4.5.1
96
96
  signing_key:
97
97
  specification_version: 4
98
98
  summary: RSpec equality matcher that ignores nested order