module Trailblazer::Activity::DSL::Linear

Implementing a specific DSL, simplified version of the {Magnetic DSL} from 2017.

Produces {Implementation} and {Intermediate}.

Public Class Methods

VariableMapping(input: VariableMapping.default_input, output: VariableMapping.default_output, output_with_outer_ctx: false) click to toggle source

Normalizer-steps to implement {:input} and {:output} Returns an Extension instance to be thrown into the `step` DSL arguments.

# File lib/trailblazer/activity/dsl/linear/variable_mapping.rb, line 7
def self.VariableMapping(input: VariableMapping.default_input, output: VariableMapping.default_output, output_with_outer_ctx: false)
  input =
    VariableMapping::Input::Scoped.new(
      Trailblazer::Option(VariableMapping::filter_for(input))
    )

  unscope_class = output_with_outer_ctx ? VariableMapping::Output::Unscoped::WithOuterContext : VariableMapping::Output::Unscoped

  output =
    unscope_class.new(
      Trailblazer::Option(VariableMapping::filter_for(output))
    )

  TaskWrap::Extension(
    merge: TaskWrap::VariableMapping.merge_for(input, output, id: input.object_id), # wraps filters: {Input(input), Output(output)}
  )
end

Public Instance Methods

Merge(old_seq, new_seq, end_id: "End.success") click to toggle source
# File lib/trailblazer/activity/dsl/linear.rb, line 152
def Merge(old_seq, new_seq, end_id: "End.success") # DISCUSS: also Insert
  new_seq = strip_start_and_ends(new_seq, end_id: end_id)

  _seq = Insert.Prepend(old_seq, new_seq, end_id)
end
strip_start_and_ends(seq, end_id:) click to toggle source
# File lib/trailblazer/activity/dsl/linear.rb, line 157
def strip_start_and_ends(seq, end_id:) # TODO: introduce Merge namespace?
  cut_off_index = end_id.nil? ? seq.size : Insert.find_index(seq, end_id) # find the "first" end.

  seq[1..cut_off_index-1]
end