rudash 2.9.1 → 2.10.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/capitalize.rb +1 -6
- data/lib/rudash/curry.rb +1 -6
- data/lib/rudash/filter.rb +11 -22
- data/lib/rudash/find.rb +2 -2
- data/lib/rudash/find_last.rb +2 -2
- data/lib/rudash/is_string.rb +1 -6
- data/lib/rudash/map.rb +9 -20
- data/lib/rudash/range.rb +46 -0
- data/lib/rudash/reduce.rb +6 -13
- data/lib/rudash/remove.rb +2 -2
- data/lib/rudash/update.rb +4 -3
- data/lib/rudash.rb +2 -0
- data/lib/utils/dynamic_args_count.rb +19 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9093255b12cd834ff23fa463f4c7f2c4b0916a589c973c680cd4488149c9e6db
|
4
|
+
data.tar.gz: 268185d416326b2e38ff02bb895e09625277a2a06c012b5af0938450886bf190
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d5f5e26667dccc7712a9127de99eb7a5a2fef6dc345e3e91972b3708c976b5e89f426f0766df0de4fd4ca1e94d4c4aa184e09b6610d588cdd724d3ea3caa6b3
|
7
|
+
data.tar.gz: be2ffa703e19ffabf205a959e622b4db8bf457fbc9a35f7630cab5eb0af8179fd3b733c7e08e062886aff775dec77e08e81191da8fc58d7a84039beac7f503e5
|
data/lib/rudash/capitalize.rb
CHANGED
data/lib/rudash/curry.rb
CHANGED
data/lib/rudash/filter.rb
CHANGED
@@ -1,38 +1,27 @@
|
|
1
1
|
require_relative '../utils/index.rb'
|
2
2
|
require_relative '../utils/subset_deep_match.rb'
|
3
|
+
require_relative '../utils/dynamic_args_count.rb'
|
3
4
|
|
4
5
|
module Rudash
|
5
6
|
module Filter
|
6
7
|
def filter(collection, *rest_args)
|
7
|
-
|
8
|
+
predicate_fn = self.head(rest_args) || self.method(:identity)
|
8
9
|
|
9
|
-
if
|
10
|
-
slice_matcher = Rudash::SubsetDeepMatch.subset_deep_match?.(
|
10
|
+
if predicate_fn.is_a?(Hash)
|
11
|
+
slice_matcher = Rudash::SubsetDeepMatch.subset_deep_match?.(predicate_fn)
|
11
12
|
return self.filter(collection, slice_matcher)
|
12
13
|
end
|
13
14
|
|
14
|
-
return [] if !Rudash::Utils.is_function?(
|
15
|
+
return [] if !Rudash::Utils.is_function?(predicate_fn)
|
15
16
|
|
16
17
|
if collection.is_a?(Array)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
begin
|
21
|
-
return collection.select { |x| filter.(x) }
|
22
|
-
rescue ArgumentError => e
|
23
|
-
return collection.select { filter.() }
|
24
|
-
end
|
25
|
-
end
|
18
|
+
return collection.select.with_index { |x, idx|
|
19
|
+
Rudash::DynamicArgsCount.call(predicate_fn, x, idx)
|
20
|
+
}
|
26
21
|
elsif collection.is_a?(Hash)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
begin
|
31
|
-
return collection.select { |k, v| filter.(v) }.values
|
32
|
-
rescue ArgumentError => e
|
33
|
-
return collection.select { filter.() }.values
|
34
|
-
end
|
35
|
-
end
|
22
|
+
return collection.select { |k, v|
|
23
|
+
Rudash::DynamicArgsCount.call(predicate_fn, v, k)
|
24
|
+
}.values
|
36
25
|
else
|
37
26
|
return []
|
38
27
|
end
|
data/lib/rudash/find.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Rudash
|
2
2
|
module Find
|
3
3
|
def find(collection, *rest_args)
|
4
|
-
|
5
|
-
filtered_arr = self.filter(collection,
|
4
|
+
iteratee_fn = self.head(rest_args)
|
5
|
+
filtered_arr = self.filter(collection, iteratee_fn)
|
6
6
|
|
7
7
|
filtered_arr[0]
|
8
8
|
end
|
data/lib/rudash/find_last.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Rudash
|
2
2
|
module FindLast
|
3
3
|
def find_last(collection, *rest_args)
|
4
|
-
|
5
|
-
filtered_arr = self.filter(collection,
|
4
|
+
iteratee_fn = self.head(rest_args)
|
5
|
+
filtered_arr = self.filter(collection, iteratee_fn)
|
6
6
|
|
7
7
|
filtered_arr[filtered_arr.length - 1]
|
8
8
|
end
|
data/lib/rudash/is_string.rb
CHANGED
data/lib/rudash/map.rb
CHANGED
@@ -1,33 +1,22 @@
|
|
1
1
|
require_relative '../utils/index.rb'
|
2
|
+
require_relative '../utils/dynamic_args_count.rb'
|
2
3
|
|
3
4
|
module Rudash
|
4
5
|
module Map
|
5
6
|
def map(collection, *rest_args)
|
6
|
-
|
7
|
+
iteratee_fn = self.head(rest_args) || self.method(:identity)
|
7
8
|
col = collection.is_a?(String) ? collection.split('') : collection
|
8
9
|
|
9
|
-
return self.map(collection, -> () { nil }) if !Rudash::Utils.is_function?(
|
10
|
+
return self.map(collection, -> () { nil }) if !Rudash::Utils.is_function?(iteratee_fn)
|
10
11
|
|
11
12
|
if col.is_a?(Array)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
begin
|
16
|
-
return col.map { |value| mapper_proc.(value) }
|
17
|
-
rescue ArgumentError => e
|
18
|
-
return col.map { mapper_proc.() }
|
19
|
-
end
|
20
|
-
end
|
13
|
+
return col.map.with_index { |value, index|
|
14
|
+
Rudash::DynamicArgsCount.call(iteratee_fn, value, index)
|
15
|
+
}
|
21
16
|
elsif col.is_a?(Hash)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
begin
|
26
|
-
return col.map { |k,v| mapper_proc.(v) }
|
27
|
-
rescue ArgumentError => e
|
28
|
-
return col.map { mapper_proc.() }
|
29
|
-
end
|
30
|
-
end
|
17
|
+
return col.map { |k,v|
|
18
|
+
Rudash::DynamicArgsCount.call(iteratee_fn, v, k)
|
19
|
+
}
|
31
20
|
else
|
32
21
|
return []
|
33
22
|
end
|
data/lib/rudash/range.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Rudash
|
2
|
+
module Range
|
3
|
+
def range(*args)
|
4
|
+
start_step = 0
|
5
|
+
step_jump = 1
|
6
|
+
end_step = 0
|
7
|
+
|
8
|
+
case args.size
|
9
|
+
when 0
|
10
|
+
return []
|
11
|
+
when 1
|
12
|
+
end_step = args[0]
|
13
|
+
when 2
|
14
|
+
start_step, end_step = args
|
15
|
+
else
|
16
|
+
start_step, end_step, step_jump = args
|
17
|
+
step_jump_configured = true
|
18
|
+
end
|
19
|
+
|
20
|
+
# step_jump direction (+/-) should be defined by start/end values
|
21
|
+
norm_step_jump = (end_step > start_step ? step_jump.abs : -step_jump.abs)
|
22
|
+
|
23
|
+
# illegal behaviors
|
24
|
+
return [] if (norm_step_jump != step_jump && step_jump_configured)
|
25
|
+
# End illegal behavior
|
26
|
+
|
27
|
+
iterator = start_step
|
28
|
+
result = []
|
29
|
+
|
30
|
+
# calculate loop count
|
31
|
+
boundaries = [start_step, end_step]
|
32
|
+
max = boundaries.max
|
33
|
+
min = boundaries.min
|
34
|
+
i = (norm_step_jump == 0 ? (max - min) : ((max - min).to_f / norm_step_jump)).abs
|
35
|
+
# end loop calculation
|
36
|
+
|
37
|
+
while i > 0
|
38
|
+
result << iterator
|
39
|
+
iterator += norm_step_jump
|
40
|
+
i-=1
|
41
|
+
end
|
42
|
+
|
43
|
+
result
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/rudash/reduce.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../utils/index.rb'
|
2
|
+
require_relative '../utils/dynamic_args_count.rb'
|
2
3
|
|
3
4
|
module Rudash
|
4
5
|
module Reduce
|
@@ -7,31 +8,23 @@ module Rudash
|
|
7
8
|
initial_state = rest_args[1]
|
8
9
|
col = collection.is_a?(String) ? collection.split('') : collection
|
9
10
|
|
10
|
-
return self.reduce(collection, -> (
|
11
|
+
return self.reduce(collection, -> () { nil }) if !Rudash::Utils.is_function?(reducer)
|
11
12
|
|
12
13
|
case rest_args.size
|
13
14
|
when 1
|
14
15
|
return col.reduce { |acc, current|
|
15
16
|
if col.is_a?(Hash)
|
16
|
-
|
17
|
-
reducer.(acc, current[1], current[0])
|
18
|
-
rescue ArgumentError => e
|
19
|
-
reducer.(acc, current[1])
|
20
|
-
end
|
17
|
+
Rudash::DynamicArgsCount.call(reducer, acc, current[1], current[0])
|
21
18
|
else
|
22
|
-
|
19
|
+
Rudash::DynamicArgsCount.call(reducer, acc, current)
|
23
20
|
end
|
24
21
|
}
|
25
22
|
when 2
|
26
23
|
return col.reduce(initial_state) { |acc, current|
|
27
24
|
if col.is_a?(Hash)
|
28
|
-
|
29
|
-
reducer.(acc, current[1], current[0])
|
30
|
-
rescue ArgumentError => e
|
31
|
-
reducer.(acc, current[1])
|
32
|
-
end
|
25
|
+
Rudash::DynamicArgsCount.call(reducer, acc, current[1], current[0])
|
33
26
|
else
|
34
|
-
|
27
|
+
Rudash::DynamicArgsCount.call(reducer, acc, current)
|
35
28
|
end
|
36
29
|
}
|
37
30
|
else
|
data/lib/rudash/remove.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Rudash
|
2
2
|
module Remove
|
3
3
|
def remove(array, *rest_args)
|
4
|
-
|
4
|
+
predicate_fn = self.head(rest_args)
|
5
5
|
return [] if !array.is_a?(Array)
|
6
|
-
removed_items = self.filter(array,
|
6
|
+
removed_items = self.filter(array, predicate_fn)
|
7
7
|
|
8
8
|
array.replace(array - removed_items)
|
9
9
|
removed_items
|
data/lib/rudash/update.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
require_relative '../utils/index.rb'
|
2
|
+
require_relative '../utils/dynamic_args_count.rb'
|
2
3
|
|
3
4
|
module Rudash
|
4
5
|
module Update
|
5
6
|
def update(object, path, *rest_args)
|
6
|
-
|
7
|
-
return object if !Rudash::Utils.is_function?(
|
7
|
+
updater_fn = self.head(rest_args) || self.method(:identity)
|
8
|
+
return object if !Rudash::Utils.is_function?(updater_fn)
|
8
9
|
|
9
10
|
current_value = self.get(object, path)
|
10
|
-
self.set(object, path,
|
11
|
+
self.set(object, path, Rudash::DynamicArgsCount.call(updater_fn, current_value))
|
11
12
|
object
|
12
13
|
end
|
13
14
|
end
|
data/lib/rudash.rb
CHANGED
@@ -44,6 +44,7 @@ require_relative './rudash/slice.rb'
|
|
44
44
|
require_relative './rudash/remove.rb'
|
45
45
|
require_relative './rudash/union.rb'
|
46
46
|
require_relative './rudash/reject.rb'
|
47
|
+
require_relative './rudash/range.rb'
|
47
48
|
|
48
49
|
# This is the exposed Gem class that contains all Rudash methods.
|
49
50
|
# New methods can use already implemented methods in the library by refering to "self"
|
@@ -95,4 +96,5 @@ class R_
|
|
95
96
|
extend Rudash::Remove
|
96
97
|
extend Rudash::Union
|
97
98
|
extend Rudash::Reject
|
99
|
+
extend Rudash::Range
|
98
100
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This module was written in order to give the predicate functions for R_.filter, R_.map, R_.each, etc..
|
2
|
+
# to be called with any dynamic arguments as it can. What differante JavaScript from Ruby is that once you configured a function
|
3
|
+
# with a specific set of arguments then you must call it with that set or else you will get an exception.
|
4
|
+
# That is so useful for predicate functions that developer define out of the library scope. We send all the arguments
|
5
|
+
# to the developer defined Proc and if it's failed because of ArgumentError we call it recursively with less argument until success.
|
6
|
+
|
7
|
+
module Rudash
|
8
|
+
module DynamicArgsCount
|
9
|
+
def self.call(func, *args)
|
10
|
+
begin
|
11
|
+
return func.(*args)
|
12
|
+
rescue ArgumentError => e
|
13
|
+
raise 'Argument Error' if args.size == 0
|
14
|
+
*initial, last = args
|
15
|
+
return self.call(func, *initial)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
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.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Islam Attrash
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/rudash/map.rb
|
50
50
|
- lib/rudash/negate.rb
|
51
51
|
- lib/rudash/pick.rb
|
52
|
+
- lib/rudash/range.rb
|
52
53
|
- lib/rudash/reduce.rb
|
53
54
|
- lib/rudash/reduce_right.rb
|
54
55
|
- lib/rudash/reject.rb
|
@@ -63,6 +64,7 @@ files:
|
|
63
64
|
- lib/rudash/uniq.rb
|
64
65
|
- lib/rudash/update.rb
|
65
66
|
- lib/rudash/without.rb
|
67
|
+
- lib/utils/dynamic_args_count.rb
|
66
68
|
- lib/utils/index.rb
|
67
69
|
- lib/utils/nested_path_creator.rb
|
68
70
|
- lib/utils/path_resolver.rb
|