rudash 2.8.3 → 2.9.0
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/lib/rudash/filter.rb +3 -3
- data/lib/rudash/reject.rb +18 -0
- data/lib/rudash.rb +5 -0
- data/lib/utils/index.rb +2 -0
- data/lib/utils/nested_path_creator.rb +7 -1
- data/lib/utils/path_resolver.rb +5 -0
- data/lib/utils/subset_deep_match.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 533e5c283a3565293e86f436ad14c5c31130a6e87ec4a604e2247dc8b33969c4
|
4
|
+
data.tar.gz: 7d5f63bdfac9d6b7759f99ca35e9be4ea07e0d7280bbc43f559c565fb7769810
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 453931f3c25a2d5b7a2d6e86a71eeed859c1556cfd8006ad89e7d1876c0d0b0f8c1a90b62beacbe1ae98227efee6cca9a0149eb9a527ce6045afd1602d4d0a73
|
7
|
+
data.tar.gz: d86479387726933384808b41a435176eb271ec17fbab369e58ec6d71d9c8256a1986804a0271637d29b4336baf1da31ec0cd6051e1d4b037c635807b18a5809f
|
data/lib/rudash/filter.rb
CHANGED
@@ -22,12 +22,12 @@ module Rudash
|
|
22
22
|
end
|
23
23
|
elsif collection.is_a?(Hash)
|
24
24
|
begin
|
25
|
-
return collection.select { |k, v| filter.(v, k) }
|
25
|
+
return collection.select { |k, v| filter.(v, k) }.values
|
26
26
|
rescue ArgumentError => e
|
27
27
|
begin
|
28
|
-
return collection.select { |k, v| filter.(v) }
|
28
|
+
return collection.select { |k, v| filter.(v) }.values
|
29
29
|
rescue ArgumentError => e
|
30
|
-
return collection.select { filter.() }
|
30
|
+
return collection.select { filter.() }.values
|
31
31
|
end
|
32
32
|
end
|
33
33
|
else
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../utils/subset_deep_match.rb'
|
2
|
+
|
3
|
+
module Rudash
|
4
|
+
module Reject
|
5
|
+
def reject(collection, *rest_args)
|
6
|
+
filter = self.head(rest_args) || self.method(:identity).to_proc
|
7
|
+
|
8
|
+
if filter.is_a?(Hash)
|
9
|
+
slice_matcher = Rudash::SubsetDeepMatch.subset_deep_match?.(filter)
|
10
|
+
return self.filter(collection, self.negate(slice_matcher))
|
11
|
+
elsif filter.is_a?(Proc)
|
12
|
+
return self.filter(collection, self.negate(filter))
|
13
|
+
else
|
14
|
+
return []
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/rudash.rb
CHANGED
@@ -44,7 +44,11 @@ require_relative './rudash/update.rb'
|
|
44
44
|
require_relative './rudash/slice.rb'
|
45
45
|
require_relative './rudash/remove.rb'
|
46
46
|
require_relative './rudash/union.rb'
|
47
|
+
require_relative './rudash/reject.rb'
|
47
48
|
|
49
|
+
# This is the exposed Gem class that contains all Rudash methods.
|
50
|
+
# New methods can use already implemented methods in the library by refering to "self"
|
51
|
+
# in the method if and only if the method get extended into the R_ class.
|
48
52
|
class R_
|
49
53
|
extend Rudash::Map
|
50
54
|
extend Rudash::IsNil
|
@@ -92,4 +96,5 @@ class R_
|
|
92
96
|
extend Rudash::Slice
|
93
97
|
extend Rudash::Remove
|
94
98
|
extend Rudash::Union
|
99
|
+
extend Rudash::Reject
|
95
100
|
end
|
data/lib/utils/index.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require_relative '../rudash'
|
2
2
|
require_relative './index.rb'
|
3
3
|
|
4
|
+
# This module will create the nested path when using R_.set on not existing paths
|
5
|
+
# If we've a hash as { a: 1 } and we run R_.set(hash, 'a.b.c.d', 5) then we want to create the whole
|
6
|
+
# path ['a', 'b', 'c', 'd'] as embedded hashes. If we have some string that matches a number then we create an array.
|
7
|
+
|
4
8
|
module Rudash
|
5
9
|
module NestedPathCreator
|
6
10
|
def self.create_path_if_not_exist(object, resolved_path)
|
@@ -13,13 +17,15 @@ module Rudash
|
|
13
17
|
value = R_.get(object, path)
|
14
18
|
|
15
19
|
if R_.is_nil?(value) || (!value.is_a?(Hash) && !value.is_a?(Array))
|
20
|
+
# If the next path item is numeric (index) then we want to create an array otherwise we create a hash
|
16
21
|
if next_path && Utils.match_number?(next_path)
|
17
22
|
object[path_key] = []
|
18
23
|
else
|
19
24
|
object[path_key] = {}
|
20
25
|
end
|
21
26
|
end
|
22
|
-
|
27
|
+
|
28
|
+
# Do the same recursively for next path until getting to the last path item
|
23
29
|
self.create_path_if_not_exist(
|
24
30
|
R_.get(object, path),
|
25
31
|
rest_paths
|
data/lib/utils/path_resolver.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
require_relative '../rudash'
|
2
2
|
|
3
|
+
# This module have the logic of resolving the paths for R_.get, R_.set and R_.update.
|
4
|
+
# The resolve method will transform the path 'a.b.c.d[0]' to ['a', 'b', 'c', 'd', '0'].
|
5
|
+
# The mentioned functions above can get the path in either way but we want to normilize the string path
|
6
|
+
# to the array shape in order to make the logic related only to one data structure.
|
7
|
+
|
3
8
|
module Rudash
|
4
9
|
module PathResolver
|
5
10
|
def self.resolve(path)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative '../rudash'
|
2
2
|
|
3
3
|
# This module was written to supply complex subset deep hash and array matching
|
4
|
-
# in order to give filter, some?, every? and find the ability to deep match with complex hash queries.
|
4
|
+
# in order to give R_.filter, R_.some?, R_.every? and R_.find the ability to deep match with complex hash queries.
|
5
5
|
# See test_filter_hashes_by_deep_hash (test/filter.rb)
|
6
6
|
|
7
7
|
module Rudash
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rudash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Islam Attrash
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- lib/rudash/pick.rb
|
53
53
|
- lib/rudash/reduce.rb
|
54
54
|
- lib/rudash/reduce_right.rb
|
55
|
+
- lib/rudash/reject.rb
|
55
56
|
- lib/rudash/remove.rb
|
56
57
|
- lib/rudash/reverse.rb
|
57
58
|
- lib/rudash/set.rb
|