ductwork 0.7.1 → 0.7.2
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/CHANGELOG.md +4 -0
- data/lib/ductwork/models/pipeline.rb +22 -34
- data/lib/ductwork/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a3a59fb73965f325d3e23243f59e7e973419f3683d2de741cf5bbf115bccad8d
|
|
4
|
+
data.tar.gz: d66a5c291d197b7a8e679d23e9c68b6575d2e35100b06f7c412c97e5bc515ec3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: de5ca4b1c9dff4478992234183ae84d810cec930eede8d97dc7511959efad9521acb201ec5f39a2d96d430383ee3f240d3a3395bc55fc19ce272603000eb92a2
|
|
7
|
+
data.tar.gz: b86ea8a91f912ae55e509f2c059fc8db8d4ccff0055fe96db77593a98ce188255b2bbcb395709a0b672ded6b8df1a1537001fc56cfb3de7244a5dda9a4e48192
|
data/CHANGELOG.md
CHANGED
|
@@ -113,9 +113,14 @@ module Ductwork
|
|
|
113
113
|
|
|
114
114
|
private
|
|
115
115
|
|
|
116
|
-
def create_step_and_enqueue_job(
|
|
116
|
+
def create_step_and_enqueue_job(edge:, input_arg:, klass: nil)
|
|
117
117
|
status = :in_progress
|
|
118
118
|
started_at = Time.current
|
|
119
|
+
# NOTE: "chain" is used by ActiveRecord so we have to call
|
|
120
|
+
# this enum value "default" :sad:
|
|
121
|
+
step_type = edge[:type] == "chain" ? "default" : edge[:type]
|
|
122
|
+
klass ||= edge.fetch(:to).sole
|
|
123
|
+
|
|
119
124
|
next_step = steps.create!(klass:, status:, step_type:, started_at:)
|
|
120
125
|
Ductwork::Job.enqueue(next_step, input_arg)
|
|
121
126
|
end
|
|
@@ -157,11 +162,8 @@ module Ductwork
|
|
|
157
162
|
else
|
|
158
163
|
edges.each do |step_klass, step_edges|
|
|
159
164
|
edge = step_edges[-1]
|
|
160
|
-
# NOTE: "chain" is used by ActiveRecord so we have to call
|
|
161
|
-
# this enum value "default" :sad:
|
|
162
|
-
step_type = edge[:type] == "chain" ? "default" : edge[:type]
|
|
163
165
|
|
|
164
|
-
if
|
|
166
|
+
if edge[:type] == "collapse"
|
|
165
167
|
conditionally_collapse_next_steps(step_klass, edge, advancing_ids)
|
|
166
168
|
else
|
|
167
169
|
advance_non_merging_steps(step_klass, edge, advancing_ids)
|
|
@@ -172,15 +174,13 @@ module Ductwork
|
|
|
172
174
|
end
|
|
173
175
|
|
|
174
176
|
def advance_non_merging_steps(step_klass, edge, advancing_ids)
|
|
175
|
-
|
|
176
|
-
# this enum value "default" :sad:
|
|
177
|
-
step_type = edge[:type] == "chain" ? "default" : edge[:type]
|
|
177
|
+
step_type = edge[:type]
|
|
178
178
|
|
|
179
179
|
steps.where(id: advancing_ids, klass: step_klass).find_each do |step|
|
|
180
|
-
if step_type.in?(%w[
|
|
181
|
-
advance_to_next_steps(
|
|
180
|
+
if step_type.in?(%w[chain divide])
|
|
181
|
+
advance_to_next_steps(step.id, edge)
|
|
182
182
|
elsif step_type == "expand"
|
|
183
|
-
expand_to_next_steps(
|
|
183
|
+
expand_to_next_steps(step.id, edge)
|
|
184
184
|
else
|
|
185
185
|
Ductwork.logger.error(
|
|
186
186
|
msg: "Invalid step type",
|
|
@@ -192,7 +192,7 @@ module Ductwork
|
|
|
192
192
|
end
|
|
193
193
|
end
|
|
194
194
|
|
|
195
|
-
def advance_to_next_steps(
|
|
195
|
+
def advance_to_next_steps(step_id, edge)
|
|
196
196
|
too_many = edge[:to].tally.any? do |to_klass, count|
|
|
197
197
|
depth = Ductwork
|
|
198
198
|
.configuration
|
|
@@ -204,15 +204,9 @@ module Ductwork
|
|
|
204
204
|
if too_many
|
|
205
205
|
halted!
|
|
206
206
|
else
|
|
207
|
-
edge[:to].each do |
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
status: :in_progress,
|
|
211
|
-
step_type: step_type,
|
|
212
|
-
started_at: Time.current
|
|
213
|
-
)
|
|
214
|
-
return_value = Ductwork::Job.find_by(step_id:).return_value
|
|
215
|
-
Ductwork::Job.enqueue(next_step, return_value)
|
|
207
|
+
edge[:to].each do |klass|
|
|
208
|
+
input_arg = Ductwork::Job.find_by(step_id:).return_value
|
|
209
|
+
create_step_and_enqueue_job(edge:, input_arg:, klass:)
|
|
216
210
|
end
|
|
217
211
|
end
|
|
218
212
|
end
|
|
@@ -230,8 +224,7 @@ module Ductwork
|
|
|
230
224
|
end
|
|
231
225
|
|
|
232
226
|
def combine_next_steps(edges, advancing_ids)
|
|
233
|
-
|
|
234
|
-
step_type = "combine"
|
|
227
|
+
edge = edges.values.sample[-1]
|
|
235
228
|
groups = steps
|
|
236
229
|
.where(id: advancing_ids)
|
|
237
230
|
.group(:klass)
|
|
@@ -243,11 +236,11 @@ module Ductwork
|
|
|
243
236
|
input_arg = Ductwork::Job
|
|
244
237
|
.where(step_id: group.map(&:id))
|
|
245
238
|
.map(&:return_value)
|
|
246
|
-
create_step_and_enqueue_job(
|
|
239
|
+
create_step_and_enqueue_job(edge:, input_arg:)
|
|
247
240
|
end
|
|
248
241
|
end
|
|
249
242
|
|
|
250
|
-
def expand_to_next_steps(
|
|
243
|
+
def expand_to_next_steps(step_id, edge)
|
|
251
244
|
next_klass = edge[:to].sole
|
|
252
245
|
return_value = Ductwork::Job
|
|
253
246
|
.find_by(step_id:)
|
|
@@ -258,18 +251,14 @@ module Ductwork
|
|
|
258
251
|
halted!
|
|
259
252
|
else
|
|
260
253
|
Array(return_value).each do |input_arg|
|
|
261
|
-
create_step_and_enqueue_job(
|
|
262
|
-
klass: next_klass,
|
|
263
|
-
step_type: step_type,
|
|
264
|
-
input_arg: input_arg
|
|
265
|
-
)
|
|
254
|
+
create_step_and_enqueue_job(edge:, input_arg:)
|
|
266
255
|
end
|
|
267
256
|
end
|
|
268
257
|
end
|
|
269
258
|
|
|
270
259
|
def conditionally_collapse_next_steps(step_klass, edge, advancing_ids)
|
|
271
260
|
if steps.where(status: %w[pending in_progress], klass: step_klass).none?
|
|
272
|
-
collapse_next_steps(edge
|
|
261
|
+
collapse_next_steps(edge, advancing_ids)
|
|
273
262
|
else
|
|
274
263
|
Ductwork.logger.debug(
|
|
275
264
|
msg: "Not all expanded steps have completed; not collapsing",
|
|
@@ -279,15 +268,14 @@ module Ductwork
|
|
|
279
268
|
end
|
|
280
269
|
end
|
|
281
270
|
|
|
282
|
-
def collapse_next_steps(
|
|
283
|
-
step_type = "collapse"
|
|
271
|
+
def collapse_next_steps(edge, advancing_ids)
|
|
284
272
|
input_arg = []
|
|
285
273
|
|
|
286
274
|
Ductwork::Job.where(step_id: advancing_ids).find_each do |job|
|
|
287
275
|
input_arg << job.return_value
|
|
288
276
|
end
|
|
289
277
|
|
|
290
|
-
create_step_and_enqueue_job(
|
|
278
|
+
create_step_and_enqueue_job(edge:, input_arg:)
|
|
291
279
|
end
|
|
292
280
|
|
|
293
281
|
def log_pipeline_advanced(edges)
|
data/lib/ductwork/version.rb
CHANGED