rudash 2.9.1 → 2.10.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/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
|