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 +4 -4
- data/CHANGELOG +1 -0
- data/eq_wo_order.gemspec +1 -1
- data/lib/eq_wo_order.rb +15 -40
- data/spec/features/eq_wo_order_spec.rb +1 -1
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9de4820c3d69cd160e796b41f915d46cb4280717
|
4
|
+
data.tar.gz: 7e82d8cdc0e89b4def0d227a9a2f53421f8e21b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94db4b4ee1e4a80f216993d65269faa08084cce8365b91a5e2269eb220cd7c5959e7f400056c3d28ab818c0a58d462b206be6087acc4193608764616ac8d3bca
|
7
|
+
data.tar.gz: 759b83dd59e87a89b7df42609fc46f3a360d7c36af539f006423fb1d4442f7e0439c27bd2f9625c5cc3324449e2a82711c643419f8d82c03ede249b1760d1f48
|
data/CHANGELOG
CHANGED
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.
|
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
|
-
|
3
|
+
eq_wo_order(actual, expected)
|
4
4
|
end
|
5
5
|
|
6
|
-
def
|
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
|
-
|
12
|
-
array_items_match?(actual, expected) &&
|
13
|
-
hash_items_match?(actual, expected)
|
11
|
+
arrays_match?(actual, expected)
|
14
12
|
when Hash
|
15
|
-
|
13
|
+
hashes_match?(actual, expected)
|
16
14
|
else
|
17
15
|
actual == expected
|
18
16
|
end
|
19
17
|
end
|
20
18
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
25
|
+
end
|
54
26
|
end
|
55
27
|
|
56
|
-
def
|
57
|
-
|
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
|
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.
|
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.
|
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
|