rudash 2.8.3 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|