Module: Trailblazer::Activity::FastTrack::DSL
- Defined in:
- lib/trailblazer/activity/fast_track.rb
Constant Summary collapse
- 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 Trailblazer::Activity, to be injected into a State.
Linear::State::Normalizer.new( step: Linear::Normalizer.activity_normalizer( FastTrack::DSL.normalizer ), # here, we extend the generic FastTrack::step_normalizer with the Activity-specific DSL fail: Linear::Normalizer.activity_normalizer( FastTrack::DSL.normalizer_for_fail ), pass: Linear::Normalizer.activity_normalizer( FastTrack::DSL.normalizer_for_pass ), )
Class Method Summary collapse
- .fail_fast_option(ctx) ⇒ Object
- .fail_fast_option_for_fail(ctx) ⇒ Object
- .fast_track_option(ctx, fast_track: false) ⇒ Object
- .initial_sequence(initial_sequence:, fail_fast_end: Activity::End.new(semantic: :fail_fast), pass_fast_end: Activity::End.new(semantic: :pass_fast), **_o) ⇒ Object
- .merge_connections_for!(ctx, option_name, semantic, magnetic_to = option_name, connections:) ⇒ Object
- .merge_outputs_for!(ctx, new_outputs, outputs:) ⇒ Object
- .normalizer ⇒ Object
- .normalizer_for_fail ⇒ Object
- .normalizer_for_pass ⇒ Object
- .OptionsForState(normalizers: Normalizers, **options) ⇒ Object
- .pass_fast_option(ctx) ⇒ Object
- .pass_fast_option_for_pass(ctx) ⇒ Object
- .step_options(pipeline) ⇒ Object
Class Method Details
.fail_fast_option(ctx) ⇒ Object
78 79 80 81 82 83 84 85 86 |
# File 'lib/trailblazer/activity/fast_track.rb', line 78 def fail_fast_option(ctx, **) ctx = merge_connections_for!(ctx, :fail_fast, :failure, **ctx) ctx = merge_connections_for!(ctx, :fail_fast, :fail_fast, :fail_fast, **ctx) ctx = merge_outputs_for!(ctx, {fail_fast: Activity.Output(Activity::FastTrack::FailFast, :fail_fast)}, **ctx ) end |
.fail_fast_option_for_fail(ctx) ⇒ Object
88 89 90 91 |
# File 'lib/trailblazer/activity/fast_track.rb', line 88 def fail_fast_option_for_fail(ctx, **) ctx = merge_connections_for!(ctx, :fail_fast, :failure, **ctx) ctx = merge_connections_for!(ctx, :fail_fast, :success, **ctx) end |
.fast_track_option(ctx, fast_track: false) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/trailblazer/activity/fast_track.rb', line 93 def fast_track_option(ctx, fast_track: false, **) return unless fast_track ctx = merge_connections_for!(ctx, :fast_track, :fail_fast, :fail_fast, **ctx) ctx = merge_connections_for!(ctx, :fast_track, :pass_fast, :pass_fast, **ctx) ctx = merge_outputs_for!(ctx, {pass_fast: Activity.Output(Activity::FastTrack::PassFast, :pass_fast), fail_fast: Activity.Output(Activity::FastTrack::FailFast, :fail_fast)}, **ctx ) end |
.initial_sequence(initial_sequence:, fail_fast_end: Activity::End.new(semantic: :fail_fast), pass_fast_end: Activity::End.new(semantic: :pass_fast), **_o) ⇒ Object
118 119 120 121 122 123 |
# File 'lib/trailblazer/activity/fast_track.rb', line 118 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, option_name, semantic, magnetic_to = option_name, connections:) ⇒ Object
106 107 108 109 110 111 |
# File 'lib/trailblazer/activity/fast_track.rb', line 106 def merge_connections_for!(ctx, option_name, semantic, magnetic_to=option_name, connections:, **) return ctx unless ctx[option_name] ctx[:connections] = connections.merge(semantic => [Linear::Search.method(:Forward), magnetic_to]) ctx end |
.merge_outputs_for!(ctx, new_outputs, outputs:) ⇒ Object
113 114 115 116 |
# File 'lib/trailblazer/activity/fast_track.rb', line 113 def merge_outputs_for!(ctx, new_outputs, outputs:, **) ctx[:outputs] = new_outputs.merge(outputs) ctx end |
.normalizer ⇒ Object
20 21 22 |
# File 'lib/trailblazer/activity/fast_track.rb', line 20 def normalizer (Trailblazer::Activity::Railway::DSL.normalizer) end |
.normalizer_for_fail ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/trailblazer/activity/fast_track.rb', line 24 def normalizer_for_fail pipeline = (Trailblazer::Activity::Railway::DSL.normalizer_for_fail) TaskWrap::Pipeline.prepend( pipeline, "path.wirings", { "fast_track.fail_fast_option_for_fail" => Linear::Normalizer.Task(method(:fail_fast_option_for_fail)), } ) end |
.normalizer_for_pass ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/trailblazer/activity/fast_track.rb', line 37 def normalizer_for_pass pipeline = (Trailblazer::Activity::Railway::DSL.normalizer_for_pass) TaskWrap::Pipeline.prepend( pipeline, "path.wirings", { "fast_track.pass_fast_option_for_pass" => Linear::Normalizer.Task(method(:pass_fast_option_for_pass)), } ) end |
.OptionsForState(normalizers: Normalizers, **options) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/trailblazer/activity/fast_track.rb', line 134 def self.OptionsForState(normalizers: Normalizers, **) = Railway::DSL.OptionsForState(**). merge(normalizers: normalizers) initial_sequence = FastTrack::DSL.initial_sequence(**) { **, initial_sequence: initial_sequence, } end |
.pass_fast_option(ctx) ⇒ Object
63 64 65 66 67 68 69 70 71 |
# File 'lib/trailblazer/activity/fast_track.rb', line 63 def pass_fast_option(ctx, **) ctx = merge_connections_for!(ctx, :pass_fast, :success, **ctx) ctx = merge_connections_for!(ctx, :pass_fast, :pass_fast, :pass_fast, **ctx) ctx = merge_outputs_for!(ctx, {pass_fast: Activity.Output(Activity::FastTrack::PassFast, :pass_fast)}, **ctx ) end |
.pass_fast_option_for_pass(ctx) ⇒ Object
73 74 75 76 |
# File 'lib/trailblazer/activity/fast_track.rb', line 73 def pass_fast_option_for_pass(ctx, **) ctx = merge_connections_for!(ctx, :pass_fast, :failure, **ctx) ctx = merge_connections_for!(ctx, :pass_fast, :success, **ctx) end |
.step_options(pipeline) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/trailblazer/activity/fast_track.rb', line 50 def (pipeline) TaskWrap::Pipeline.prepend( pipeline, "path.wirings", { "fast_track.pass_fast_option" => Linear::Normalizer.Task(method(:pass_fast_option)), "fast_track.fail_fast_option" => Linear::Normalizer.Task(method(:fail_fast_option)), "fast_track.fast_track_option" => Linear::Normalizer.Task(method(:fast_track_option)), } ) end |