class SmashTheState::Operation::DryRun::Builder

Attributes

dry_sequence[R]
wet_sequence[R]

Public Class Methods

new(wet_sequence) click to toggle source
# File lib/smash_the_state/operation/dry_run.rb, line 7
def initialize(wet_sequence)
  @wet_sequence = wet_sequence
  @dry_sequence = Operation::Sequence.new

  # in the case of a dynamic schema, front-load it as the first step
  dynamic_schema_step = @wet_sequence.dynamic_schema_step

  return if dynamic_schema_step.nil?

  step(dynamic_schema_step.name, &dynamic_schema_step.implementation)
end

Public Instance Methods

step(step_name, &block) click to toggle source
# File lib/smash_the_state/operation/dry_run.rb, line 19
def step(step_name, &block)
  referenced_steps = wet_sequence.steps_for_name(step_name)

  if block
    add_dry_run_step(step_name, &block)
    return
  end

  if referenced_steps.empty?
    raise "dry run sequence referred to unknown step " \
          "#{step_name.inspect}. make sure to define " \
          "your dry run sequence last, after all your steps are defined"
  end

  referenced_steps.each do |referenced_step|
    # we're gonna copy the implementation verbatim but add a new step marked as
    # side-effect-free, because if the step was added to the dry run sequence it
    # must be assumed to be side-effect-free
    add_dry_run_step(step_name, &referenced_step.implementation)
  end
end

Private Instance Methods

add_dry_run_step(step_name, &block) click to toggle source
# File lib/smash_the_state/operation/dry_run.rb, line 43
def add_dry_run_step(step_name, &block)
  if step_name == :validate
    dry_sequence.add_validation_step(&block)
  else
    dry_sequence.add_step(step_name, side_effect_free: true, &block)
  end
end