metacrunch 4.1.1 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Readme.md +5 -2
- data/lib/metacrunch/job.rb +12 -13
- data/lib/metacrunch/job/buffer.rb +1 -1
- data/lib/metacrunch/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fc2560b2bb768757c384d71a806509d594e7610
|
4
|
+
data.tar.gz: 8cbb0e384582550d29f94daa2d7521942cbe14c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eaf6d9b6b72b7cadc92dae0d4d9e1204f6d43fe909f2f5f60bda85ad0407aa6fffe567a119361d3cef3fa15ed2d83ca5abc44d314eafc3f59b7b936c49a07ab5
|
7
|
+
data.tar.gz: 0204e2e3284a53c007ea086b883ff52fbb87e0731616fe83c1c4d636134985506c39d885ec8ff4bc4cc8708e3a51d02c27e28fe79b732798f7f3bfc24905ac6d
|
data/Readme.md
CHANGED
@@ -72,7 +72,10 @@ To process, transform or manipulate data use the `#transformation` hook. A trans
|
|
72
72
|
|
73
73
|
The current data object (the last object yielded by the source) will be passed to the first transformation as a parameter. The return value of a transformation will then be passed to the next transformation and so on.
|
74
74
|
|
75
|
-
|
75
|
+
There are two exceptions to that rule.
|
76
|
+
|
77
|
+
* If you return `nil` the current data object will be dismissed and the next transformation won't be called.
|
78
|
+
* If you return an `Enumerator` the object will be expanded and the following transformations will be called with each element of the `Enumerator`.
|
76
79
|
|
77
80
|
```ruby
|
78
81
|
# File: my_etl_job.metacrunch
|
@@ -119,7 +122,7 @@ transformation ->(bulk) {
|
|
119
122
|
|
120
123
|
# A buffer that uses a Proc
|
121
124
|
transformation ->(bulk) {
|
122
|
-
#
|
125
|
+
# Called when the buffer `Proc` returns `true`
|
123
126
|
}, buffer: -> {
|
124
127
|
true if some_condition
|
125
128
|
}
|
data/lib/metacrunch/job.rb
CHANGED
@@ -83,12 +83,12 @@ class Metacrunch::Job # http://valve.github.io/blog/2013/10/26/constant-resoluti
|
|
83
83
|
if source
|
84
84
|
# Run transformation for each data object available in source
|
85
85
|
source.each do |data|
|
86
|
-
data = run_transformations(data)
|
86
|
+
data = run_transformations(transformations, data)
|
87
87
|
write_destination(data)
|
88
88
|
end
|
89
89
|
|
90
90
|
# Run all transformations a last time to flush existing buffers
|
91
|
-
data = run_transformations(nil, flush_buffers: true)
|
91
|
+
data = run_transformations(transformations, nil, flush_buffers: true)
|
92
92
|
write_destination(data)
|
93
93
|
|
94
94
|
# Close destination
|
@@ -123,19 +123,18 @@ private
|
|
123
123
|
post_process.call if post_process
|
124
124
|
end
|
125
125
|
|
126
|
-
def run_transformations(data, flush_buffers: false)
|
127
|
-
transformations.each do |transformation|
|
126
|
+
def run_transformations(transformations, data, flush_buffers: false)
|
127
|
+
transformations.each.with_index do |transformation, i|
|
128
128
|
if transformation.is_a?(Buffer)
|
129
|
-
|
130
|
-
|
131
|
-
if data
|
132
|
-
data = buffer.buffer(data)
|
133
|
-
data = buffer.flush if flush_buffers
|
134
|
-
else
|
135
|
-
data = buffer.flush
|
136
|
-
end
|
129
|
+
data = transformation.buffer(data) if data
|
130
|
+
data = transformation.flush if flush_buffers
|
137
131
|
else
|
138
132
|
data = transformation.call(data) if data
|
133
|
+
|
134
|
+
if data&.is_a?(Enumerator)
|
135
|
+
data.each { |d| run_transformations(transformations.slice(i+1..-1), d, flush_buffers: flush_buffers) }
|
136
|
+
data = nil
|
137
|
+
end
|
139
138
|
end
|
140
139
|
end
|
141
140
|
|
@@ -143,7 +142,7 @@ private
|
|
143
142
|
end
|
144
143
|
|
145
144
|
def write_destination(data)
|
146
|
-
destination.write(data) if destination && data
|
145
|
+
destination.write(data) if destination && data.present?
|
147
146
|
end
|
148
147
|
|
149
148
|
end
|
data/lib/metacrunch/version.rb
CHANGED