Module: Trailblazer::Activity::Path::DSL
- Defined in:
- lib/trailblazer/activity/path.rb
Overview
Functions that help creating a path-specific sequence.
Constant Summary collapse
- Linear =
Activity::DSL::Linear
- PREPEND_TO =
Always prepend all “add connectors” steps of all normalizers to normalize_output_tuples. This assures that the order is
[<default tuples>, <inherited tuples>, <user tuples>]
"output_tuples.normalize_output_tuples"
- SUCCESS_OUTPUT =
{success: Activity::Output(Activity::Right, :success)}
- Normalizers =
This is slow and should be done only once at compile-time, These are the normalizers for an Trailblazer::Activity, to be injected into a State.
Linear::Normalizer::Normalizers.new( step: Normalizer(), # here, we extend the generic FastTrack::step_normalizer with the Activity-specific DSL terminus: Linear::Normalizer::Terminus.Normalizer(), )
Class Method Summary collapse
- .add_success_connector(ctx, track_name:, non_symbol_options:) ⇒ Object
- .add_success_output(ctx) ⇒ Object
-
.normalize_magnetic_to(ctx, track_name:) ⇒ Object
TODO: merge with Railway.merge_magnetic_to.
- .Normalizer(prepend_to_default_outputs: []) ⇒ Object
- .options_for_sequence_build(track_name: :success, end_task: Activity::End.new(semantic: :success), end_id: "End.success") ⇒ Object
- .start_sequence(track_name:) ⇒ Object
Class Method Details
.add_success_connector(ctx, track_name:, non_symbol_options:) ⇒ Object
41 42 43 44 45 |
# File 'lib/trailblazer/activity/path.rb', line 41 def add_success_connector(ctx, track_name:, non_symbol_options:, **) connectors = {Linear::Normalizer::OutputTuples.Output(:success) => Linear::Strategy.Track(track_name)} ctx[:non_symbol_options] = connectors.merge() end |
.add_success_output(ctx) ⇒ Object
37 38 39 |
# File 'lib/trailblazer/activity/path.rb', line 37 def add_success_output(ctx, **) ctx[:outputs] = SUCCESS_OUTPUT end |
.normalize_magnetic_to(ctx, track_name:) ⇒ Object
TODO: merge with Railway.merge_magnetic_to
47 48 49 |
# File 'lib/trailblazer/activity/path.rb', line 47 def normalize_magnetic_to(ctx, track_name:, **) # TODO: merge with Railway.merge_magnetic_to ctx[:magnetic_to] = ctx.key?(:magnetic_to) ? ctx[:magnetic_to] : track_name # FIXME: can we be magnetic_to {nil}? end |
.Normalizer(prepend_to_default_outputs: []) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/trailblazer/activity/path.rb', line 15 def Normalizer(prepend_to_default_outputs: []) path_output_steps = { "path.outputs" => Linear::Normalizer.Task(method(:add_success_output)) } # Retrieve the base normalizer from {linear/normalizer.rb} and add processing steps. dsl_normalizer = Linear::Normalizer.Normalizer( prepend_to_default_outputs: [*prepend_to_default_outputs, path_output_steps] ) Linear::Normalizer.prepend_to( dsl_normalizer, PREPEND_TO, { "path.step.add_success_connector" => Linear::Normalizer.Task(method(:add_success_connector)), "path.magnetic_to" => Linear::Normalizer.Task(method(:normalize_magnetic_to)), } ) end |
.options_for_sequence_build(track_name: :success, end_task: Activity::End.new(semantic: :success), end_id: "End.success") ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/trailblazer/activity/path.rb', line 67 def (track_name: :success, end_task: Activity::End.new(semantic: :success), end_id: "End.success", **) initial_sequence = start_sequence(track_name: track_name) termini = [ [end_task, id: end_id, magnetic_to: track_name, append_to: "Start.default"] ] = { sequence: initial_sequence, track_name: track_name, end_id: end_id, # needed in Normalizer.normalize_sequence_insert. } return , termini end |
.start_sequence(track_name:) ⇒ Object
63 64 65 |
# File 'lib/trailblazer/activity/path.rb', line 63 def start_sequence(track_name:) Linear::Strategy::DSL.start_sequence(wirings: [Linear::Sequence::Search::Forward(SUCCESS_OUTPUT[:success], track_name)]) end |