module Trailblazer::Activity::FastTrack::DSL

Constants

Normalizers

This is slow and should be done only once at compile-time, DISCUSS: maybe make this a function? These are the normalizers for an {Activity}, to be injected into a State.

Public Class Methods

OptionsForState(normalizers: Normalizers, **options) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 142
def self.OptionsForState(normalizers: Normalizers, **options)
  options = Railway::DSL.OptionsForState(**options).
      merge(normalizers: normalizers)

  initial_sequence = FastTrack::DSL.initial_sequence(**options)

  {
    **options,
    initial_sequence: initial_sequence,
  }
end

Public Instance Methods

fail_fast_option((ctx, flow_options), *) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 81
def fail_fast_option((ctx, flow_options), *)
  ctx = merge_connections_for(ctx, ctx, :fail_fast, :failure)

  ctx = merge_connections_for(ctx, ctx, :fail_fast, :fail_fast, :fail_fast)
  ctx = merge_outputs_for(ctx,
    fail_fast: Activity.Output(Activity::FastTrack::FailFast, :fail_fast),
  )

  return Right, [ctx, flow_options]
end
fail_fast_option_for_fail((ctx, flow_options), *) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 92
def fail_fast_option_for_fail((ctx, flow_options), *)
  ctx = merge_connections_for(ctx, ctx, :fail_fast, :failure)
  ctx = merge_connections_for(ctx, ctx, :fail_fast, :success)

  return Right, [ctx, flow_options]
end
fast_track_option((ctx, flow_options), *) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 99
def fast_track_option((ctx, flow_options), *)
  return Right, [ctx, flow_options] unless ctx[:fast_track]

  ctx = merge_connections_for(ctx, ctx, :fast_track, :fail_fast, :fail_fast)
  ctx = merge_connections_for(ctx, ctx, :fast_track, :pass_fast, :pass_fast)

  ctx = merge_outputs_for(ctx,
    pass_fast: Activity.Output(Activity::FastTrack::PassFast, :pass_fast),
    fail_fast: Activity.Output(Activity::FastTrack::FailFast, :fail_fast),
  )

  return Right, [ctx, flow_options]
end
initial_sequence(initial_sequence:, fail_fast_end: Activity::End.new(semantic: :fail_fast), pass_fast_end: Activity::End.new(semantic: :pass_fast), **_o) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 126
def initial_sequence(initial_sequence:, fail_fast_end: Activity::End.new(semantic: :fail_fast), pass_fast_end: Activity::End.new(semantic: :pass_fast), **_o)
  sequence = initial_sequence

  sequence = Path::DSL.append_end(sequence, task: fail_fast_end, magnetic_to: :fail_fast, id: "End.fail_fast")
  sequence = Path::DSL.append_end(sequence, task: pass_fast_end, magnetic_to: :pass_fast, id: "End.pass_fast")
end
merge_connections_for(ctx, options, option_name, semantic, magnetic_to=option_name) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 113
def merge_connections_for(ctx, options, option_name, semantic, magnetic_to=option_name)
  return ctx unless options[option_name]

  connections  = ctx[:connections].merge(semantic => [Linear::Search.method(:Forward), magnetic_to])
  ctx          = ctx.merge(connections: connections)
end
merge_outputs_for(ctx, outputs) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 120
def merge_outputs_for(ctx, outputs)
  ctx = ctx.merge(
    outputs: outputs.merge(ctx[:outputs])
  )
end
normalizer() click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 20
def normalizer
  step_options(Trailblazer::Activity::Railway::DSL.normalizer)
end
normalizer_for_fail() click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 24
def normalizer_for_fail
  sequence = step_options(Trailblazer::Activity::Railway::DSL.normalizer_for_fail)

  Path::DSL.prepend_to_path(
    sequence,

    {
      "fast_track.fail_fast_option_for_fail"  => method(:fail_fast_option_for_fail),
    },
    Linear::Insert.method(:Prepend), "path.wirings"
  )
end
normalizer_for_pass() click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 37
def normalizer_for_pass
  sequence = step_options(Trailblazer::Activity::Railway::DSL.normalizer_for_pass)

  Path::DSL.prepend_to_path(
    sequence,

    {
      "fast_track.pass_fast_option_for_pass"  => method(:pass_fast_option_for_pass),
    },
    Linear::Insert.method(:Prepend), "path.wirings"
  )
end
pass_fast_option((ctx, flow_options), *) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 63
def pass_fast_option((ctx, flow_options), *)
  ctx = merge_connections_for(ctx, ctx, :pass_fast, :success)

  ctx = merge_connections_for(ctx, ctx, :pass_fast, :pass_fast, :pass_fast)
  ctx = merge_outputs_for(ctx,
    pass_fast: Activity.Output(Activity::FastTrack::PassFast, :pass_fast),
  )

  return Right, [ctx, flow_options]
end
pass_fast_option_for_pass((ctx, flow_options), *) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 74
def pass_fast_option_for_pass((ctx, flow_options), *)
  ctx = merge_connections_for(ctx, ctx, :pass_fast, :failure)
  ctx = merge_connections_for(ctx, ctx, :pass_fast, :success)

  return Right, [ctx, flow_options]
end
step_options(sequence) click to toggle source
# File lib/trailblazer/activity/fast_track.rb, line 50
def step_options(sequence)
  Path::DSL.prepend_to_path( # this doesn't particularly put the steps after the Path steps.
    sequence,

    {
      "fast_track.pass_fast_option"  => method(:pass_fast_option),
      "fast_track.fail_fast_option"  => method(:fail_fast_option),
      "fast_track.fast_track_option" => method(:fast_track_option),
    },
    Linear::Insert.method(:Prepend), "path.wirings"
  )
end