iteraptor 0.5.2 → 0.6.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/README.md +3 -1
- data/lib/iteraptor/version.rb +1 -1
- data/lib/iteraptor.rb +46 -31
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51a190bd902813b3f2831501f2e2c8c8fd9cf555
|
4
|
+
data.tar.gz: fc10ba4bb1997340931716bea23d10dc8b8f0587
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7804c4da0e00f7077fca99af258e0bec1cfee7c4170926682492b8cda5d76192485bc3ee7e4d945dd55dced7e7ee77ba979a0cc608598333d6e7474450020876
|
7
|
+
data.tar.gz: 8afc7e6932c32412e97b1f95fe84d413a89dd4d9fdc174809e2a2cf7574c721434b5907b3a2186d1efeae51a1835a849668faa9ad01417650a9169561cc2d0af
|
data/README.md
CHANGED
@@ -190,7 +190,9 @@ Or install it yourself as:
|
|
190
190
|
|
191
191
|
## Changelog
|
192
192
|
|
193
|
-
|
193
|
+
- **`0.6.0`** — experimental support for `full_parent: true` param
|
194
|
+
- **`0.5.0`** — `rechazar` and `escoger`
|
195
|
+
- **`0.4.0`** — `aplanar` and `plana_mapa`
|
194
196
|
|
195
197
|
## Development
|
196
198
|
|
data/lib/iteraptor/version.rb
CHANGED
data/lib/iteraptor.rb
CHANGED
@@ -14,7 +14,7 @@ module Iteraptor
|
|
14
14
|
return enum_for(m, key, value, **params) unless λ
|
15
15
|
return self if empty?
|
16
16
|
|
17
|
-
send_to =
|
17
|
+
send_to = enumerable_parent?
|
18
18
|
send_to && send("#{m}_in_#{send_to.name.downcase}", key || self, value, **params, &λ)
|
19
19
|
end
|
20
20
|
end
|
@@ -36,6 +36,7 @@ module Iteraptor
|
|
36
36
|
def aplanar **params
|
37
37
|
return self if empty?
|
38
38
|
cada(**params).with_object({}) do |(key, value), acc|
|
39
|
+
key = key.join(iteraptor_delimiter(params)) if params[:full_parent]
|
39
40
|
key = key.to_sym if params[:symbolize_keys]
|
40
41
|
acc[key] = value unless value.is_a?(Enumerable)
|
41
42
|
yield key, value if block_given?
|
@@ -48,7 +49,7 @@ module Iteraptor
|
|
48
49
|
aplanar(**params).each_with_object(
|
49
50
|
Hash.new { |h, k| h[k] = h.clone.clear }
|
50
51
|
) do |(k, v), acc|
|
51
|
-
keys = k.to_s.split(params
|
52
|
+
keys = k.to_s.split(iteraptor_delimiter(params))
|
52
53
|
parent = keys[0..-2].reduce(acc){ |h, kk| h[kk] }
|
53
54
|
parent[keys.last] = v
|
54
55
|
end.mapa(yield_all: true, **params) do |_parent, (k, v)|
|
@@ -62,6 +63,7 @@ module Iteraptor
|
|
62
63
|
return self if empty?
|
63
64
|
|
64
65
|
cada(**params).with_object([]) do |(key, value), acc|
|
66
|
+
key = key.join(iteraptor_delimiter(params)) if params[:full_parent]
|
65
67
|
key = key.to_sym if params[:symbolize_keys]
|
66
68
|
acc << yield(key, value) unless value.is_a?(Enumerable)
|
67
69
|
end
|
@@ -78,21 +80,21 @@ module Iteraptor
|
|
78
80
|
end
|
79
81
|
end
|
80
82
|
|
81
|
-
def cada_in_array root = nil, parent = nil, **params
|
82
|
-
|
83
|
-
each.with_index do |e, idx|
|
84
|
-
[parent, idx].compact.join(params[:delimiter] || DELIMITER).tap do |p|
|
85
|
-
yield p, e
|
86
|
-
CADA_PROC.call(e, root, p, **params, &λ)
|
87
|
-
end
|
88
|
-
end
|
83
|
+
def cada_in_array root = nil, parent = nil, **params, &λ
|
84
|
+
cada_in_array_or_hash true, root, parent, **params, &λ
|
89
85
|
end
|
90
86
|
alias cada_in_enumerable cada_in_array
|
91
87
|
|
92
|
-
def cada_in_hash root = nil, parent = nil, **params
|
93
|
-
|
94
|
-
|
95
|
-
|
88
|
+
def cada_in_hash root = nil, parent = nil, **params, &λ
|
89
|
+
cada_in_array_or_hash false, root, parent, **params, &λ
|
90
|
+
end
|
91
|
+
|
92
|
+
def cada_in_array_or_hash in_array, root = nil, parent = nil, **params, &λ
|
93
|
+
(in_array ? each_with_index : each).each do |k, v|
|
94
|
+
k, v = v, k if in_array
|
95
|
+
result = [parent, k].flatten.compact
|
96
|
+
result = result.join(iteraptor_delimiter(params)) unless params[:full_parent]
|
97
|
+
result.tap do |p|
|
96
98
|
yield p, v
|
97
99
|
CADA_PROC.call(v, root, p, **params, &λ)
|
98
100
|
end
|
@@ -106,18 +108,26 @@ module Iteraptor
|
|
106
108
|
# - with_index
|
107
109
|
# - yield_all
|
108
110
|
# - symbolize_keys
|
109
|
-
def mapa_in_array root = nil, parent = nil, **params
|
110
|
-
λ = Proc.new
|
111
|
-
|
111
|
+
def mapa_in_array root = nil, parent = nil, **params, &λ
|
112
112
|
map.with_index do |e, idx|
|
113
|
-
p = [parent, idx].compact
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
113
|
+
p = [parent, idx].flatten.compact
|
114
|
+
p = p.join(iteraptor_delimiter(params)) unless params[:full_parent]
|
115
|
+
|
116
|
+
yielded =
|
117
|
+
if !enumerable_parent?(e) || params[:yield_all]
|
118
|
+
yield p, (params[:with_index] ? [idx.to_s, e] : e)
|
119
|
+
else
|
120
|
+
e
|
121
|
+
end
|
122
|
+
# allow blindly return [k, v] instead of check for an array instance
|
123
|
+
# when block arguments are matched as (k, v)
|
124
|
+
yielded = yielded.last || yielded.first if
|
125
|
+
yielded.is_a?(Array) && yielded.size == 2 && (yielded.last.nil? || yielded.first == e)
|
126
|
+
|
127
|
+
case yielded
|
128
|
+
when Iteraptor then yielded.mapa(root, p, **params, &λ)
|
129
|
+
when Enumerable then yielded.map(&λ.curry[p])
|
130
|
+
else yielded
|
121
131
|
end
|
122
132
|
end
|
123
133
|
end
|
@@ -126,11 +136,10 @@ module Iteraptor
|
|
126
136
|
# Params:
|
127
137
|
# - yield_all
|
128
138
|
# - symbolize_keys
|
129
|
-
def mapa_in_hash root = nil, parent = nil, **params
|
130
|
-
λ = Proc.new
|
131
|
-
|
139
|
+
def mapa_in_hash root = nil, parent = nil, **params, &λ
|
132
140
|
map do |k, v|
|
133
|
-
p = [parent, k].compact
|
141
|
+
p = [parent, k].flatten.compact
|
142
|
+
p = p.join(iteraptor_delimiter(params)) unless params[:full_parent]
|
134
143
|
|
135
144
|
k, v = yield p, [k, v] if !v.is_a?(Enumerable) || params[:yield_all]
|
136
145
|
|
@@ -176,8 +185,8 @@ module Iteraptor
|
|
176
185
|
raise ArgumentError, "no filter given in call to #{method ? :escoger : :rechazar}" if filter.empty?
|
177
186
|
|
178
187
|
plough = method ? :none? : :any?
|
179
|
-
aplanar.each_with_object({}) do |(key, value), acc|
|
180
|
-
to_match = key.split(params[:
|
188
|
+
aplanar(**params).each_with_object({}) do |(key, value), acc|
|
189
|
+
to_match = key.to_s.split(iteraptor_delimiter(params)) unless params[:full_parent]
|
181
190
|
to_match = to_match.flat_map { |k| [k.to_s, k.to_s.to_sym] } if params[:soft_keys]
|
182
191
|
|
183
192
|
next if filter.public_send(plough, &->(f){ to_match.any?(&f.method(:===)) })
|
@@ -189,6 +198,12 @@ module Iteraptor
|
|
189
198
|
|
190
199
|
##############################################################################
|
191
200
|
### helpers
|
201
|
+
def enumerable_parent?(receiver = self)
|
202
|
+
[Hash, Array, Enumerable].detect(&receiver.method(:is_a?))
|
203
|
+
end
|
204
|
+
def iteraptor_delimiter(params)
|
205
|
+
params[:delimiter] || DELIMITER
|
206
|
+
end
|
192
207
|
def leaf? e
|
193
208
|
[Iteraptor, Enumerable].none?(&e.method(:is_a?))
|
194
209
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iteraptor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksei Matiushkin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
127
|
version: '0'
|
128
128
|
requirements: []
|
129
129
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.
|
130
|
+
rubygems_version: 2.6.8
|
131
131
|
signing_key:
|
132
132
|
specification_version: 4
|
133
133
|
summary: 'Iterator on steroids: allows thorough iteration through nested Enumerables'
|