lib/trailblazer/activity/task_wrap/runner.rb in trailblazer-activity-0.7.1 vs lib/trailblazer/activity/task_wrap/runner.rb in trailblazer-activity-0.8.0
- old
+ new
@@ -1,6 +1,6 @@
-class Trailblazer::Activity < Module
+class Trailblazer::Activity
module TaskWrap
# The runner is passed into Activity#call( runner: Runner ) and is called for every task in the circuit.
# It runs the TaskWrap per task.
#
# (wrap_ctx, original_args), **wrap_circuit_options
@@ -10,22 +10,19 @@
# @api private
# @interface Runner
def self.call(task, args, circuit_options)
wrap_ctx = { task: task }
- # this activity is "wrapped around" the actual `task`.
- task_wrap_activity = merge_static_with_runtime(task, circuit_options)
+ # this pipeline is "wrapped around" the actual `task`.
+ task_wrap_pipeline = merge_static_with_runtime(task, circuit_options) || raise
# We save all original args passed into this Runner.call, because we want to return them later after this wrap
# is finished.
original_args = [ args, circuit_options ]
# call the wrap {Activity} around the task.
- wrap_end_signal, ( wrap_ctx, _ ) = task_wrap_activity.(
- [ wrap_ctx, original_args ], # we omit circuit_options here on purpose, so the wrapping activity uses the default, plain Runner.
- {}
- )
+ wrap_ctx, _ = task_wrap_pipeline.(wrap_ctx, original_args) # we omit circuit_options here on purpose, so the wrapping activity uses the default, plain Runner.
# don't return the wrap's end signal, but the one from call_task.
# return all original_args for the next "real" task in the circuit (this includes circuit_options).
return wrap_ctx[:return_signal], wrap_ctx[:return_args]
@@ -37,26 +34,20 @@
#
# NOTE: this is for performance reasons: we could have only one hash containing everything but that'd mean
# unnecessary computations at `call`-time since steps might not even be executed.
# TODO: make this faster.
def self.merge_static_with_runtime(task, wrap_runtime:, **circuit_options)
- wrap_activity = TaskWrap.wrap_static_for(
- task,
- circuit_options
- ) # find static wrap for this specific task, or default wrap activity.
+ static_wrap = TaskWrap.wrap_static_for(task, circuit_options) # find static wrap for this specific task [, or default wrap activity].
# Apply runtime alterations.
- # Grab the additional wirings for the particular `task` from `wrap_runtime` (returns default otherwise).
- wrap_runtime[task] ? Trailblazer::Activity::Path::Plan.merge(wrap_activity, wrap_runtime[task]) : wrap_activity
+ # Grab the additional wirings for the particular `task` from `wrap_runtime`.
+ (dynamic_wrap = wrap_runtime[task]) ? dynamic_wrap.(static_wrap) : static_wrap
end
end # Runner
# Retrieve the static wrap config from {activity}.
- # I do not like this part too much, I'd prefer computing the {:wrap_static} at compile-time for the entire
- # object graph (including nesteds) and simply pass it through to all Runner calls.
- # TODO: simplify that. See above
- def self.wrap_static_for(task, activity:, default_activity: TaskWrap.initial_activity, **)
- wrap_static = activity[:wrap_static] || {}
- wrap_static[task] || default_activity
+ def self.wrap_static_for(task, activity:, **)
+ wrap_static = activity[:wrap_static]
+ wrap_static[task] or raise "#{task}"
end
end
end