rudash 2.1.0 → 2.2.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 +1 -1
- data/lib/rudash/get.rb +7 -23
- data/lib/rudash/initial.rb +7 -0
- data/lib/rudash/intersection.rb +1 -1
- data/lib/rudash/set.rb +27 -0
- data/lib/rudash.rb +4 -0
- data/lib/utils/nested_path_creator.rb +26 -0
- data/lib/utils/path_resolver.rb +20 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79b36b623652453b46f43dee730eb8772e914bf1649587cc15e75c276c4318a8
|
4
|
+
data.tar.gz: 0bd55da85472936d9105973ed252b33b46c593a52a8900f536e1eef0ca3ac301
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf85bc6887ca76721aa02889d5cecf7bdeab99ffcc287edfcd4dfe40c49c2a94f0a529d379c6cc34f547894ee743d38c43464ddfa3fa36eedc29fbece5a7748c
|
7
|
+
data.tar.gz: 26c269cba38c25cc009c25f240d573dce072250341dccfe0f236313bff35057e1bdd6ff0e12854b248c20639eaf2a9ec4ac51b73dd9780856b24b8e7f8cf5bc1
|
data/lib/rudash/filter.rb
CHANGED
@@ -10,7 +10,7 @@ module Filter
|
|
10
10
|
def filter(collection, *rest_args)
|
11
11
|
filter = self.head(rest_args) || self.method(:identity)
|
12
12
|
|
13
|
-
if collection.is_a?(Array)
|
13
|
+
if collection.is_a?(Array) && filter.is_a?(Hash)
|
14
14
|
filtered_arr = []
|
15
15
|
collection.each do |v|
|
16
16
|
match = true
|
data/lib/rudash/get.rb
CHANGED
@@ -1,39 +1,23 @@
|
|
1
1
|
require_relative 'reduce.rb'
|
2
2
|
require_relative 'filter.rb'
|
3
|
+
require_relative '../utils/path_resolver.rb'
|
3
4
|
|
4
5
|
module Get
|
5
6
|
extend Reduce
|
6
7
|
extend Filter
|
7
8
|
|
8
9
|
def get(hash, path, *rest_args)
|
9
|
-
return nil if !path.is_a?(String)
|
10
|
-
return nil if !hash.is_a?(Array)
|
10
|
+
return nil if !path.is_a?(String) && !path.is_a?(Array)
|
11
|
+
return nil if !hash.is_a?(Array) && !hash.is_a?(Hash)
|
11
12
|
|
12
|
-
|
13
|
-
normalized_path = path
|
14
|
-
|
15
|
-
if normalized_path.is_a?(Array)
|
16
|
-
normalized_path = normalized_path.join('.')
|
17
|
-
end
|
18
|
-
|
19
|
-
filter_not_empty = -> (value) {
|
20
|
-
value != ''
|
21
|
-
}
|
22
|
-
|
23
|
-
splitted_hash = self.filter(
|
24
|
-
normalized_path.split(/[.\[\]]/),
|
25
|
-
filter_not_empty
|
26
|
-
)
|
27
|
-
}
|
28
|
-
|
29
|
-
splitted_hash = transform_path[path]
|
13
|
+
resolved_path = PathResolver.resolve(path)
|
30
14
|
|
31
15
|
get_reducer = -> (acc, current) {
|
32
16
|
return nil if acc.nil?
|
33
17
|
|
34
|
-
if acc.is_a?(Array)
|
18
|
+
if acc.is_a?(Array) && current.match(/^(\d)+$/)
|
35
19
|
acc[current.to_i]
|
36
|
-
elsif acc.is_a?(Array)
|
20
|
+
elsif acc.is_a?(Array) && !current.match(/^(\d)+$/)
|
37
21
|
nil
|
38
22
|
elsif acc.is_a?(Hash)
|
39
23
|
acc[current.to_sym] || acc[current]
|
@@ -42,6 +26,6 @@ module Get
|
|
42
26
|
end
|
43
27
|
}
|
44
28
|
|
45
|
-
self.reduce(
|
29
|
+
self.reduce(resolved_path, get_reducer, hash)
|
46
30
|
end
|
47
31
|
end
|
data/lib/rudash/intersection.rb
CHANGED
data/lib/rudash/set.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../utils/path_resolver.rb'
|
2
|
+
require_relative '../utils/nested_path_creator.rb'
|
3
|
+
require_relative 'get.rb'
|
4
|
+
|
5
|
+
module Set
|
6
|
+
extend Get
|
7
|
+
|
8
|
+
def set(object, path, value)
|
9
|
+
return object if !object.is_a?(Hash) && !object.is_a?(Array)
|
10
|
+
|
11
|
+
resolved_path = PathResolver.resolve(path)
|
12
|
+
NestedPathCreator.create_path_if_not_exist(object, resolved_path)
|
13
|
+
|
14
|
+
*initial_path, last = resolved_path
|
15
|
+
|
16
|
+
last_key = last.match(/^(\d)+$/) ? last.to_i : last.to_sym
|
17
|
+
|
18
|
+
if initial_path.size == 0
|
19
|
+
object[last_key] = value
|
20
|
+
return object
|
21
|
+
end
|
22
|
+
|
23
|
+
last_parent = self.get(object, initial_path)
|
24
|
+
last_parent[last_key] = value
|
25
|
+
object
|
26
|
+
end
|
27
|
+
end
|
data/lib/rudash.rb
CHANGED
@@ -37,6 +37,8 @@ require_relative './rudash/capitalize.rb'
|
|
37
37
|
require_relative './rudash/without.rb'
|
38
38
|
require_relative './rudash/intersection.rb'
|
39
39
|
require_relative './rudash/join.rb'
|
40
|
+
require_relative './rudash/initial.rb'
|
41
|
+
require_relative './rudash/set.rb'
|
40
42
|
|
41
43
|
class R_
|
42
44
|
extend Map
|
@@ -78,4 +80,6 @@ class R_
|
|
78
80
|
extend Without
|
79
81
|
extend Intersection
|
80
82
|
extend Join
|
83
|
+
extend Initial
|
84
|
+
extend Set
|
81
85
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../rudash'
|
2
|
+
|
3
|
+
module NestedPathCreator
|
4
|
+
def self.create_path_if_not_exist(object, resolved_path)
|
5
|
+
path = R_.head(resolved_path)
|
6
|
+
return nil if !resolved_path.is_a?(Array) || R_.is_nil?(path)
|
7
|
+
|
8
|
+
path_key = path.match(/^(\d)+$/) ? path.to_i : path.to_sym
|
9
|
+
rest_paths = R_.tail(resolved_path)
|
10
|
+
next_path = R_.head(rest_paths)
|
11
|
+
value = R_.get(object, path)
|
12
|
+
|
13
|
+
if R_.is_nil?(value) || (!value.is_a?(Hash) && !value.is_a?(Array))
|
14
|
+
if next_path && next_path.match(/^(\d)+$/)
|
15
|
+
object[path_key] = []
|
16
|
+
else
|
17
|
+
object[path_key] = {}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
self.create_path_if_not_exist(
|
22
|
+
R_.get(object, path),
|
23
|
+
rest_paths
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../rudash'
|
2
|
+
|
3
|
+
module PathResolver
|
4
|
+
def self.resolve(path)
|
5
|
+
normalized_path = path
|
6
|
+
|
7
|
+
if normalized_path.is_a?(Array)
|
8
|
+
normalized_path = normalized_path.join('.')
|
9
|
+
end
|
10
|
+
|
11
|
+
filter_not_empty = -> (value) {
|
12
|
+
value != ''
|
13
|
+
}
|
14
|
+
|
15
|
+
splitted_hash = R_.filter(
|
16
|
+
normalized_path.split(/[.\[\]]/),
|
17
|
+
filter_not_empty
|
18
|
+
)
|
19
|
+
end
|
20
|
+
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.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Islam Attrash
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- lib/rudash/get.rb
|
35
35
|
- lib/rudash/head.rb
|
36
36
|
- lib/rudash/identity.rb
|
37
|
+
- lib/rudash/initial.rb
|
37
38
|
- lib/rudash/intersection.rb
|
38
39
|
- lib/rudash/is_array.rb
|
39
40
|
- lib/rudash/is_empty.rb
|
@@ -51,11 +52,14 @@ files:
|
|
51
52
|
- lib/rudash/reduce.rb
|
52
53
|
- lib/rudash/reduce_right.rb
|
53
54
|
- lib/rudash/reverse.rb
|
55
|
+
- lib/rudash/set.rb
|
54
56
|
- lib/rudash/size.rb
|
55
57
|
- lib/rudash/some.rb
|
56
58
|
- lib/rudash/tail.rb
|
57
59
|
- lib/rudash/uniq.rb
|
58
60
|
- lib/rudash/without.rb
|
61
|
+
- lib/utils/nested_path_creator.rb
|
62
|
+
- lib/utils/path_resolver.rb
|
59
63
|
homepage: https://github.com/Attrash-Islam/rudash
|
60
64
|
licenses:
|
61
65
|
- MIT
|