eq_wo_order 0.3.0 → 0.3.1

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.
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