class NxtPipeline::Step
Attributes
argument[R]
callbacks[R]
constructor[R]
error[RW]
execution_duration[RW]
execution_finished_at[RW]
execution_started_at[RW]
index[R]
mapped_options[RW]
name=[RW]
options_mapper[R]
opts[R]
pipeline[R]
result[RW]
status[RW]
to_s[RW]
Public Class Methods
new(argument, constructor, index, pipeline, callbacks, **opts)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 3 def initialize(argument, constructor, index, pipeline, callbacks, **opts) define_attr_readers(opts) @pipeline = pipeline @callbacks = callbacks @argument = argument @index = index @opts = opts @constructor = constructor @to_s = "#{opts.merge(argument: argument)}" @options_mapper = opts[:map_options] @status = nil @result = nil @error = nil @mapped_options = nil end
Public Instance Methods
execute(**change_set)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 37 def execute(**change_set) track_execution_time do set_mapped_options(change_set) guard_args = [change_set, self] callbacks.run(:before, :step, change_set) if evaluate_unless_guard(guard_args) && evaluate_if_guard(guard_args) callbacks.around(:step, change_set) do set_result(change_set) end end callbacks.run(:after, :step, change_set) set_status result end rescue StandardError => e self.status = :failed self.error = e raise end
set_mapped_options(change_set)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 61 def set_mapped_options(change_set) mapper = options_mapper || default_options_mapper mapper_args = [change_set, self].take(mapper.arity) self.mapped_options = mapper.call(*mapper_args) end
Private Instance Methods
default_options_mapper()
click to toggle source
# File lib/nxt_pipeline/step.rb, line 139 def default_options_mapper # returns an empty hash ->(_) { {} } end
define_attr_readers(opts)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 107 def define_attr_readers(opts) opts.each do |key, value| define_singleton_method key.to_s do value end end end
evaluate_if_guard(args)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 72 def evaluate_if_guard(args) execute_callable(if_guard, args) end
evaluate_unless_guard(args)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 76 def evaluate_unless_guard(args) !execute_callable(unless_guard, args) end
execute_callable(callable, args)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 85 def execute_callable(callable, args) args = args.take(callable.arity) if args.last.is_a?(Hash) callable.call(*args.take(args.length - 1), **args.last) else callable.call(*args) end end
guard(result)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 103 def guard(result) -> { result } end
if_guard()
click to toggle source
# File lib/nxt_pipeline/step.rb, line 95 def if_guard opts.fetch(:if) { guard(true) } end
set_execution_duration()
click to toggle source
# File lib/nxt_pipeline/step.rb, line 135 def set_execution_duration self.execution_duration = execution_finished_at - execution_started_at end
set_execution_finished_at()
click to toggle source
# File lib/nxt_pipeline/step.rb, line 131 def set_execution_finished_at self.execution_finished_at = Time.current end
set_execution_started_at()
click to toggle source
# File lib/nxt_pipeline/step.rb, line 127 def set_execution_started_at self.execution_started_at = Time.current end
set_result(change_set)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 80 def set_result(change_set) args = [self, change_set] self.result = execute_callable(constructor, args) end
set_status()
click to toggle source
# File lib/nxt_pipeline/step.rb, line 115 def set_status self.status = result.present? ? :success : :skipped end
track_execution_time(&block)
click to toggle source
# File lib/nxt_pipeline/step.rb, line 119 def track_execution_time(&block) set_execution_started_at block.call ensure set_execution_finished_at set_execution_duration end
unless_guard()
click to toggle source
# File lib/nxt_pipeline/step.rb, line 99 def unless_guard opts.fetch(:unless) { guard(false) } end