trailblazer-activity-dsl-linear 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -71,8 +71,8 @@ module Trailblazer
71
71
  end
72
72
 
73
73
  # Used only once per strategy class body.
74
- def compile_strategy!(strategy, **options)
75
- options = strategy.OptionsForSequenceBuilder(**options)
74
+ def compile_strategy!(strategy_dsl, **options)
75
+ options = DSL.OptionsForSequenceBuilder(strategy_dsl, **options)
76
76
 
77
77
  compile_strategy_for!(**options)
78
78
  end
@@ -127,8 +127,47 @@ module Trailblazer
127
127
  class_exec(&block) if block_given?
128
128
  end
129
129
  end
130
+
131
+ def OptionsForSequenceBuilder(strategy_dsl, termini: nil, **user_options)
132
+ # DISCUSS: instead of calling a separate {initial_sequence} method we could make DSL strategies
133
+ # use the actual DSL to build up the initial_sequence, somewhere outside? Maybe using {:adds}?
134
+ strategy_options, strategy_termini = strategy_dsl.options_for_sequence_build(**user_options) # call Path.options_for_sequence_builder
135
+
136
+ # DISCUSS: passing on Normalizers here is a service, not sure I like it.
137
+ initial_sequence = process_termini(strategy_options[:sequence], termini || strategy_termini, normalizers: strategy_dsl::Normalizers)
138
+
139
+ {
140
+ step_interface_builder: method(:build_circuit_task_for_step),
141
+ adds: [], # DISCUSS: needed?
142
+ **user_options,
143
+ **strategy_options, # this might (and should!) override :track_name etc.
144
+ sequence: initial_sequence,
145
+ }
146
+ # no {:termini} left in options
147
+ end
148
+
149
+ # If no {:termini} were provided by the Strategy user, we use the default
150
+ # {strategy_termini}.
151
+ def process_termini(sequence, termini, **options_for_append_terminus)
152
+ termini.each do |task, terminus_options|
153
+ sequence = append_terminus(sequence, task, **options_for_append_terminus, **terminus_options)
154
+ end
155
+
156
+ return sequence
157
+ end
158
+
159
+ def append_terminus(sequence, task, normalizers:, **options)
160
+ # DISCUSS: why are we requiring {:normalizers} here? only for invoking Normalizer.terminus
161
+ _sequence = Linear::Sequence::Builder.update_sequence_for(:terminus, task, options, normalizers: normalizers, sequence: sequence, normalizer_options: {})
162
+ end
163
+
164
+ # Wraps {user_step} into a circuit-interface compatible callable, a.k.a. "task".
165
+ def build_circuit_task_for_step(user_step)
166
+ Activity::Circuit::TaskAdapter.for_step(user_step, option: true)
167
+ end
130
168
  end # DSL
131
169
 
170
+
132
171
  # FIXME: move to State#dup
133
172
  def self.copy(value, **) # DISCUSS: should that be here?
134
173
  value.copy
@@ -3,7 +3,7 @@ module Trailblazer
3
3
  module Activity
4
4
  module DSL
5
5
  module Linear
6
- VERSION = "1.0.0"
6
+ VERSION = "1.1.0"
7
7
  end
8
8
  end
9
9
  end
@@ -34,6 +34,7 @@ require "trailblazer/activity/railway"
34
34
  require "trailblazer/activity/fast_track"
35
35
  require "trailblazer/activity/dsl/linear/feature/variable_mapping"
36
36
  require "trailblazer/activity/dsl/linear/feature/variable_mapping/dsl"
37
+ require "trailblazer/activity/dsl/linear/feature/variable_mapping/runtime"
37
38
  require "trailblazer/activity/dsl/linear/feature/patch"
38
39
  require "trailblazer/activity/dsl/linear/feature/variable_mapping/inherit"
39
40
 
@@ -106,11 +106,6 @@ module Trailblazer
106
106
  ctx
107
107
  end
108
108
 
109
- def initial_sequence(sequence:, fail_fast_end: Activity::End.new(semantic: :fail_fast), pass_fast_end: Activity::End.new(semantic: :pass_fast), **)
110
- sequence = Path::DSL.append_terminus(sequence, fail_fast_end, magnetic_to: :fail_fast, id: "End.fail_fast", normalizers: Normalizers)
111
- sequence = Path::DSL.append_terminus(sequence, pass_fast_end, magnetic_to: :pass_fast, id: "End.pass_fast", normalizers: Normalizers)
112
- end
113
-
114
109
  # Normalizer pipelines taking care of processing your DSL options.
115
110
  Normalizers = Linear::Normalizer::Normalizers.new(
116
111
  step: FastTrack::DSL.Normalizer(),
@@ -119,16 +114,13 @@ module Trailblazer
119
114
  terminus: Linear::Normalizer::Terminus.Normalizer(),
120
115
  )
121
116
 
122
- def self.OptionsForSequenceBuilder(**options)
123
-
124
- options = Railway::DSL.OptionsForSequenceBuilder(**options)
117
+ def options_for_sequence_build(fail_fast_end: Activity::End.new(semantic: :fail_fast), pass_fast_end: Activity::End.new(semantic: :pass_fast), **options)
118
+ fail_fast_terminus_options = [fail_fast_end, magnetic_to: :fail_fast, id: "End.fail_fast", normalizers: Normalizers]
119
+ past_fast_terminus_options = [pass_fast_end, magnetic_to: :pass_fast, id: "End.pass_fast", normalizers: Normalizers]
125
120
 
126
- initial_sequence = DSL.initial_sequence(**options)
121
+ railway_options, railway_termini = Railway::DSL.options_for_sequence_build(**options)
127
122
 
128
- {
129
- **options,
130
- sequence: initial_sequence,
131
- }
123
+ return railway_options, railway_termini + [fail_fast_terminus_options, past_fast_terminus_options]
132
124
  end
133
125
  end # DSL
134
126
 
@@ -45,7 +45,6 @@ module Trailblazer
45
45
  end
46
46
 
47
47
  # This is slow and should be done only once at compile-time,
48
- # DISCUSS: maybe make this a function?
49
48
  # These are the normalizers for an {Activity}, to be injected into a State.
50
49
  Normalizers = Linear::Normalizer::Normalizers.new(
51
50
  step: Normalizer(), # here, we extend the generic FastTrack::step_normalizer with the Activity-specific DSL
@@ -56,39 +55,29 @@ module Trailblazer
56
55
 
57
56
  # DISCUSS: following methods are not part of Normalizer
58
57
 
59
- def append_terminus(sequence, task, normalizers:, **options)
60
- _sequence = Linear::Sequence::Builder.update_sequence_for(:terminus, task, options, normalizers: normalizers, sequence: sequence, normalizer_options: {})
61
- end
62
-
63
58
  # @private
64
59
  def start_sequence(track_name:)
65
60
  Linear::Strategy::DSL.start_sequence(wirings: [Linear::Sequence::Search::Forward(unary_outputs[:success], track_name)])
66
61
  end
67
62
 
68
- # Returns an initial two-step sequence with {Start.default > End.success}.
69
- def initial_sequence(track_name:, end_task:, end_id:)
70
- sequence = start_sequence(track_name: track_name)
71
- sequence = append_terminus(sequence, end_task, id: end_id, magnetic_to: track_name, normalizers: Normalizers, append_to: "Start.default")
72
- end
63
+ def options_for_sequence_build(track_name: :success, end_task: Activity::End.new(semantic: :success), end_id: "End.success", **)
64
+ initial_sequence = start_sequence(track_name: track_name)
73
65
 
74
- def OptionsForSequenceBuilder(normalizers:, track_name: :success, end_task: Activity::End.new(semantic: :success), end_id: "End.success", **options)
75
- # DISCUSS: instead of calling a separate {initial_sequence} method we could make DSL strategies
76
- # use the actual DSL to build up the initial_sequence, somewhere outside? Maybe using {:adds}?
77
- initial_sequence = initial_sequence(track_name: track_name, end_task: end_task, end_id: end_id)
78
-
79
- {
80
- sequence: initial_sequence,
81
- normalizers: normalizers,
82
- track_name: track_name,
83
- end_id: end_id,
84
- step_interface_builder: Activity::TaskBuilder.method(:Binary), # DISCUSS: this is currently the only option we want to pass on in Path() ?
85
- adds: [], # DISCUSS: needed?
86
- **options
66
+ termini = [
67
+ [end_task, id: end_id, magnetic_to: track_name, append_to: "Start.default"]
68
+ ]
69
+
70
+ options = {
71
+ sequence: initial_sequence,
72
+ track_name: track_name,
73
+ end_id: end_id, # needed in Normalizer.normalize_sequence_insert.
87
74
  }
75
+
76
+ return options, termini
88
77
  end
89
78
  end # DSL
90
79
 
91
- compile_strategy!(DSL, normalizers: DSL::Normalizers) # sets :normalizer, normalizer_options, sequence and activity
80
+ compile_strategy!(Path::DSL, normalizers: DSL::Normalizers) # sets :normalizer, normalizer_options, sequence and activity
92
81
  end # Path
93
82
 
94
83
  def self.Path(**options, &block)
@@ -88,10 +88,6 @@ module Trailblazer
88
88
  {failure: [Linear::Sequence::Search.method(:Forward), :failure]}
89
89
  end
90
90
 
91
- def initial_sequence(failure_end:, sequence:, **path_options)
92
- _seq = Path::DSL.append_terminus(sequence, failure_end, magnetic_to: :failure, id: "End.failure", normalizers: Normalizers)
93
- end
94
-
95
91
  Normalizers = Linear::Normalizer::Normalizers.new(
96
92
  step: Railway::DSL.Normalizer(),
97
93
  fail: Railway::DSL.NormalizerForFail(),
@@ -99,16 +95,12 @@ module Trailblazer
99
95
  terminus: Linear::Normalizer::Terminus.Normalizer(),
100
96
  )
101
97
 
102
- def self.OptionsForSequenceBuilder(failure_end: Activity::End.new(semantic: :failure), **options)
103
- options = Path::DSL.OptionsForSequenceBuilder(**options).
104
- merge(failure_end: failure_end)
98
+ def options_for_sequence_build(failure_end: Activity::End.new(semantic: :failure), **options)
99
+ failure_terminus_options = [failure_end, magnetic_to: :failure, id: "End.failure", normalizers: Normalizers]
105
100
 
106
- initial_sequence = Railway::DSL.initial_sequence(failure_end: failure_end, **options)
101
+ path_options, path_termini = Path::DSL.options_for_sequence_build(**options)
107
102
 
108
- {
109
- **options,
110
- sequence: initial_sequence,
111
- }
103
+ return path_options, path_termini + [failure_terminus_options]
112
104
  end
113
105
  end # DSL
114
106
 
@@ -18,13 +18,14 @@ Gem::Specification.new do |spec|
18
18
  end
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "trailblazer-activity", ">= 0.14.0", "< 0.15.0"
21
+ spec.add_dependency "trailblazer-activity", ">= 0.15.0", "< 0.16.0"
22
22
  spec.add_dependency "trailblazer-declarative", ">= 0.0.1", "< 0.1.0"
23
23
 
24
24
  spec.add_development_dependency "bundler"
25
25
  spec.add_development_dependency "minitest", "~> 5.0"
26
26
  spec.add_development_dependency "rake"
27
- spec.add_development_dependency "trailblazer-developer", ">= 0.0.26"
27
+ spec.add_development_dependency "trailblazer-developer", ">= 0.0.27", "< 0.1.0"
28
+ spec.add_development_dependency "trailblazer-core-utils", "0.0.2"
28
29
 
29
30
  spec.required_ruby_version = '>= 2.1.0'
30
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-activity-dsl-linear
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-22 00:00:00.000000000 Z
11
+ date: 2022-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trailblazer-activity
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.14.0
19
+ version: 0.15.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: 0.15.0
22
+ version: 0.16.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.14.0
29
+ version: 0.15.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: 0.15.0
32
+ version: 0.16.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: trailblazer-declarative
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -98,14 +98,34 @@ dependencies:
98
98
  requirements:
99
99
  - - ">="
100
100
  - !ruby/object:Gem::Version
101
- version: 0.0.26
101
+ version: 0.0.27
102
+ - - "<"
103
+ - !ruby/object:Gem::Version
104
+ version: 0.1.0
102
105
  type: :development
103
106
  prerelease: false
104
107
  version_requirements: !ruby/object:Gem::Requirement
105
108
  requirements:
106
109
  - - ">="
107
110
  - !ruby/object:Gem::Version
108
- version: 0.0.26
111
+ version: 0.0.27
112
+ - - "<"
113
+ - !ruby/object:Gem::Version
114
+ version: 0.1.0
115
+ - !ruby/object:Gem::Dependency
116
+ name: trailblazer-core-utils
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - '='
120
+ - !ruby/object:Gem::Version
121
+ version: 0.0.2
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - '='
127
+ - !ruby/object:Gem::Version
128
+ version: 0.0.2
109
129
  description: Simple DSL to define Trailblazer activities with arbitrary wirings.
110
130
  email:
111
131
  - apotonick@gmail.com
@@ -114,6 +134,9 @@ extensions: []
114
134
  extra_rdoc_files: []
115
135
  files:
116
136
  - ".github/workflows/ci.yml"
137
+ - ".github/workflows/ci_jruby.yml"
138
+ - ".github/workflows/ci_legacy.yml"
139
+ - ".github/workflows/ci_truffleruby.yml"
117
140
  - ".gitignore"
118
141
  - CHANGES.md
119
142
  - DSL_IDEAS
@@ -128,6 +151,7 @@ files:
128
151
  - lib/trailblazer/activity/dsl/linear/feature/variable_mapping.rb
129
152
  - lib/trailblazer/activity/dsl/linear/feature/variable_mapping/dsl.rb
130
153
  - lib/trailblazer/activity/dsl/linear/feature/variable_mapping/inherit.rb
154
+ - lib/trailblazer/activity/dsl/linear/feature/variable_mapping/runtime.rb
131
155
  - lib/trailblazer/activity/dsl/linear/helper.rb
132
156
  - lib/trailblazer/activity/dsl/linear/helper/path.rb
133
157
  - lib/trailblazer/activity/dsl/linear/normalizer.rb