class Nocode::StepsExecutor

Class that knows how to execute a series of steps given a context.

Constants

NAME_KEY
OPTIONS_KEY
TYPE_KEY

Attributes

context[R]
steps[R]

Public Class Methods

new(context:, steps:) click to toggle source
# File lib/nocode/steps_executor.rb, line 18
def initialize(context:, steps:)
  @context = context
  @steps   = steps

  freeze
end

Public Instance Methods

execute() click to toggle source
# File lib/nocode/steps_executor.rb, line 25
def execute
  steps.each do |step|
    step_instance = make_step(step)

    execute_step(step_instance)
  end
end

Private Instance Methods

execute_step(step) click to toggle source
# File lib/nocode/steps_executor.rb, line 56
def execute_step(step)
  log(step.name) unless step.name.empty?
  log("Step:  #{step.type}")
  log("Class: #{step.class}")

  time_in_seconds = Benchmark.measure { step.perform }.real

  log("Completed in #{time_in_seconds.round(3)} second(s)")

  log_line
end
make_step(step) click to toggle source
# File lib/nocode/steps_executor.rb, line 35
def make_step(step)
  evaluated_step = Nay.evaluate(step, context.to_h)
  type           = evaluated_step[TYPE_KEY].to_s
  name           = evaluated_step[NAME_KEY].to_s
  step_class     = StepRegistry.constant!(type)

  options =
    if step_class.skip_options_evaluation?
      step[OPTIONS_KEY]
    else
      evaluated_step[OPTIONS_KEY]
    end

  step_class.new(
    options: Util::Dictionary.new(options),
    context: context,
    name: name,
    type: type
  )
end