array_include_methods 1.0.0 → 1.0.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/README.md +35 -3
- data/lib/array_include_methods.rb +13 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23f887c53772d4bcdbd1b1d8ba7c6bfc288e0d2a240c4964d14f623ff0e06151
|
4
|
+
data.tar.gz: 755c0b44e13e6630f2692ac28ad64edaee7ac36586c6b68a6cedf4a5841dae3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ddb16dbc31b74e3c5f367a164658326f2f1049cf0d4c50005ea2857f02e06264589ffe0ada88a34af0edab50131cd897776e4b880d9b8e057b23c067fefc4ec
|
7
|
+
data.tar.gz: 801e45a2e0780f17a248063d4093828a36301d1f78a9ef3875698c8ccfbda6f7fc49a99645131208669de42164ab2428fbd201b755f6f034826baa138ece7904
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# ArrayIncludeMethods - Ruby Refinement
|
1
|
+
# ArrayIncludeMethods 1.0.1 - Ruby Refinement
|
2
2
|
[](http://badge.fury.io/rb/array_include_methods)
|
3
3
|
|
4
4
|
`Array#include_all?` & `Array#include_any?` methods missing from basic Ruby `Array` API.
|
@@ -10,7 +10,7 @@
|
|
10
10
|
Include the following in Gemfile:
|
11
11
|
|
12
12
|
```ruby
|
13
|
-
gem 'array_include_methods', '~> 1.0.
|
13
|
+
gem 'array_include_methods', '~> 1.0.1'
|
14
14
|
```
|
15
15
|
|
16
16
|
Run:
|
@@ -24,7 +24,7 @@ bundle
|
|
24
24
|
Run:
|
25
25
|
|
26
26
|
```
|
27
|
-
gem install array_include_methods -v1.0.
|
27
|
+
gem install array_include_methods -v1.0.1
|
28
28
|
```
|
29
29
|
|
30
30
|
## Usage
|
@@ -41,6 +41,38 @@ To activate the `ArrayIncludeMethods` Ruby Refinement for the `Array` class, add
|
|
41
41
|
using ArrayIncludeMethods
|
42
42
|
```
|
43
43
|
|
44
|
+
Now, you have `#include_all?` and `#include_any?` methods on `Array` objects.
|
45
|
+
|
46
|
+
## Examples
|
47
|
+
|
48
|
+
### `Array#include_all?(other_array)`
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
[1, 2, 3, 4].include_all?([2, 4]) # returns true
|
52
|
+
[1, 2, 3, 4].include_all?([2, 4, 5]) # returns false
|
53
|
+
[1, 2, 3, 4].include_all?([]) # returns true
|
54
|
+
[1, 2, 3, 4].include_all?(nil) # returns false
|
55
|
+
```
|
56
|
+
|
57
|
+
### `Array#include_any?(other_array)`
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
[1, 2, 3, 4].include_any?([2, 4, 5]) # returns true
|
61
|
+
[1, 2, 3, 4].include_any?([6, 7]) # returns false
|
62
|
+
[1, 2, 3, 4].include_any?([]) # returns true
|
63
|
+
[1, 2, 3, 4].include_any?(nil) # returns false
|
64
|
+
```
|
65
|
+
|
66
|
+
## Change Log
|
67
|
+
|
68
|
+
### 1.0.1
|
69
|
+
|
70
|
+
- Handled case of two arrays with different ordering of common elements
|
71
|
+
|
72
|
+
### 1.0.0
|
73
|
+
|
74
|
+
- Initial implementation of Array#include_all? & Array#include_any?
|
75
|
+
|
44
76
|
## Contributing to array_include_methods
|
45
77
|
|
46
78
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
@@ -5,7 +5,19 @@ module ArrayIncludeMethods
|
|
5
5
|
# Always returns `true` if the given `array` is empty
|
6
6
|
# Always returns `false` if the given `array` is nil
|
7
7
|
def include_all?(array)
|
8
|
-
|
8
|
+
return false if array.nil?
|
9
|
+
array_include_other_array_same_class_elements = lambda do |a1, a2|
|
10
|
+
(a1 & a2).uniq.sort == a2.uniq.sort
|
11
|
+
end
|
12
|
+
self_grouped_by = self.group_by(&:class)
|
13
|
+
array_grouped_by = array.group_by(&:class)
|
14
|
+
return false unless array_include_other_array_same_class_elements.call(self_grouped_by.keys.map(&:to_s), array_grouped_by.keys.map(&:to_s))
|
15
|
+
array_grouped_by.reduce(true) do |result, pair|
|
16
|
+
array_class = pair.first
|
17
|
+
array_elements = pair.last
|
18
|
+
self_grouped_by[array_class]
|
19
|
+
result && array_include_other_array_same_class_elements.call(self_grouped_by[array_class], array_elements)
|
20
|
+
end
|
9
21
|
end
|
10
22
|
|
11
23
|
# Returns `true` if any of the given `array` elements are present in `self`,
|