trailblazer-activity-dsl-linear 0.2.7 → 0.2.8
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.
- checksums.yaml +4 -4
- data/CHANGES.md +5 -0
- data/Gemfile +1 -0
- data/lib/trailblazer/activity/dsl/linear.rb +20 -1
- data/lib/trailblazer/activity/dsl/linear/helper.rb +4 -4
- data/lib/trailblazer/activity/dsl/linear/normalizer.rb +26 -4
- data/lib/trailblazer/activity/dsl/linear/version.rb +1 -1
- data/lib/trailblazer/activity/railway.rb +2 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2dd213289e88821986b93fc8421474654537f47cee570eb1d3b14e8a6b22020
|
4
|
+
data.tar.gz: 8e64b5daeec8cf1781c4e0411b9bba9a482bdd66a52509281996615ec55eb708
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a8bece3d93808c8267f18200dbb55556f8916d6f0071a5d53f33a462fc34c0d9084c0a1d4ffcef084f459bf738e08b7f358ff189d4e86f3abd716aaa688f611
|
7
|
+
data.tar.gz: d6758434610eeb29d00f31744e250b26d4258364d17aaefaf6ea8e3355040a27b7b8adc453514272d076e53aeb313ec7af56573ff57b99e136e6b8941a7bde3a
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 0.2.8
|
2
|
+
|
3
|
+
* Add `Track(:color, wrap_around: true)` option and `Search::WrapAround` so you can find a certain track color (or the beginning of a Path) even when the path was positioned before the actual step in the `Sequence`.
|
4
|
+
* Add `:inherit` option so `step` can override an existing step while inheriting the original `:extensions` and `:connections` (which are the `Outputs`). This is great to customize "template" activities.
|
5
|
+
|
1
6
|
# 0.2.7
|
2
7
|
|
3
8
|
* `Did you mean ?` suggestions on Linear::Sequence::IndexError.
|
data/Gemfile
CHANGED
@@ -10,3 +10,4 @@ gem "rubocop", require: false
|
|
10
10
|
# gem "trailblazer-context", path: "../trailblazer-context"
|
11
11
|
# gem "trailblazer-developer", path: "../trailblazer-developer"
|
12
12
|
# gem "trailblazer-activity", path: "../trailblazer-activity"
|
13
|
+
# gem "trailblazer-activity", path: "../circuit"
|
@@ -58,7 +58,21 @@ class Trailblazer::Activity
|
|
58
58
|
# Note that we only go forward, no back-references are done here.
|
59
59
|
def Forward(output, target_color)
|
60
60
|
->(sequence, me) do
|
61
|
-
target_seq_row = sequence[sequence.index(me)+1..-1]
|
61
|
+
target_seq_row = find_in_range(sequence[sequence.index(me)+1..-1], target_color)
|
62
|
+
|
63
|
+
return output, target_seq_row
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Tries to find a track colored step by doing a Forward-search, first, then wraps around going
|
68
|
+
# through all steps from sequence start to self.
|
69
|
+
def WrapAround(output, target_color)
|
70
|
+
->(sequence, me) do
|
71
|
+
my_index = sequence.index(me)
|
72
|
+
# First, try all elements after me, then go through the elements preceding myself.
|
73
|
+
wrapped_range = sequence[my_index+1..-1] + sequence[0..my_index-1]
|
74
|
+
|
75
|
+
target_seq_row = find_in_range(wrapped_range, target_color)
|
62
76
|
|
63
77
|
return output, target_seq_row
|
64
78
|
end
|
@@ -79,6 +93,11 @@ class Trailblazer::Activity
|
|
79
93
|
return output, target_seq_row
|
80
94
|
end
|
81
95
|
end
|
96
|
+
|
97
|
+
# @private
|
98
|
+
def find_in_range(range, target_color)
|
99
|
+
target_seq_row = range.find { |seq_row| seq_row[0] == target_color }
|
100
|
+
end
|
82
101
|
end # Search
|
83
102
|
|
84
103
|
# Sequence
|
@@ -6,7 +6,7 @@ module Trailblazer
|
|
6
6
|
# @api private
|
7
7
|
OutputSemantic = Struct.new(:value)
|
8
8
|
Id = Struct.new(:value)
|
9
|
-
Track = Struct.new(:color, :adds)
|
9
|
+
Track = Struct.new(:color, :adds, :options)
|
10
10
|
Extension = Struct.new(:callable) do
|
11
11
|
def call(*args, &block)
|
12
12
|
callable.(*args, &block)
|
@@ -35,8 +35,8 @@ module Trailblazer
|
|
35
35
|
"End.#{_end.to_h[:semantic]}" # TODO: use everywhere
|
36
36
|
end
|
37
37
|
|
38
|
-
def Track(color)
|
39
|
-
Track.new(color, []).freeze
|
38
|
+
def Track(color, wrap_around: false)
|
39
|
+
Track.new(color, [], wrap_around: wrap_around).freeze
|
40
40
|
end
|
41
41
|
|
42
42
|
def Id(id)
|
@@ -81,7 +81,7 @@ module Trailblazer
|
|
81
81
|
end
|
82
82
|
|
83
83
|
# Connect the Output() => Track(path_track)
|
84
|
-
return Track.new(track_color, adds)
|
84
|
+
return Track.new(track_color, adds, {})
|
85
85
|
end
|
86
86
|
|
87
87
|
# Computes the {:outputs} options for {activity}.
|
@@ -20,6 +20,7 @@ module Trailblazer
|
|
20
20
|
"activity.normalize_id" => method(:normalize_id),
|
21
21
|
"activity.normalize_override" => method(:normalize_override),
|
22
22
|
"activity.wrap_task_with_step_interface" => method(:wrap_task_with_step_interface), # last
|
23
|
+
"activity.inherit_option" => method(:inherit_option),
|
23
24
|
},
|
24
25
|
|
25
26
|
Linear::Insert.method(:Append), "Start.default"
|
@@ -128,7 +129,7 @@ module Trailblazer
|
|
128
129
|
|
129
130
|
ctx[:wirings] =
|
130
131
|
connections.collect do |semantic, (search_strategy_builder, *search_args)|
|
131
|
-
output = outputs[semantic] || raise("No `#{semantic}` output found for #{outputs.inspect}")
|
132
|
+
output = outputs[semantic] || raise("No `#{semantic}` output found for #{ctx[:id].inspect} and outputs #{outputs.inspect}")
|
132
133
|
|
133
134
|
search_strategy_builder.( # return proc to be called when compiling Seq, e.g. {ById(output, :id)}
|
134
135
|
output,
|
@@ -176,8 +177,10 @@ module Trailblazer
|
|
176
177
|
return Trailblazer::Activity::Right, [new_ctx, flow_options]
|
177
178
|
end
|
178
179
|
|
179
|
-
def output_to_track(ctx, output,
|
180
|
-
|
180
|
+
def output_to_track(ctx, output, track)
|
181
|
+
search_strategy = track.options[:wrap_around] ? :WrapAround : :Forward
|
182
|
+
|
183
|
+
{output.value => [Linear::Search.method(search_strategy), track.color]}
|
181
184
|
end
|
182
185
|
|
183
186
|
def output_to_id(ctx, output, target)
|
@@ -227,9 +230,28 @@ module Trailblazer
|
|
227
230
|
return Trailblazer::Activity::Right, [ctx.merge(new_ctx), flow_options]
|
228
231
|
end
|
229
232
|
|
233
|
+
# Currently, the {:inherit} option copies over {:connections} from the original step
|
234
|
+
# and merges them with the (prolly) connections passed from the user.
|
235
|
+
def inherit_option((ctx, flow_options), *)
|
236
|
+
return Trailblazer::Activity::Right, [ctx, flow_options] unless ctx[:inherit]
|
237
|
+
|
238
|
+
sequence = ctx[:sequence]
|
239
|
+
id = ctx[:id]
|
240
|
+
|
241
|
+
index = Linear::Insert.find_index(sequence, id)
|
242
|
+
row = sequence[index] # from this row we're inheriting options.
|
243
|
+
|
244
|
+
extensions = (row[3][:extensions]||[]) + (ctx[:extensions]||[]) # FIXME: DEFAULTING, FOR FUCK'S SAKE
|
245
|
+
|
246
|
+
ctx = ctx.merge(connections: row[3][:connections], extensions: extensions) # "inherit"
|
247
|
+
|
248
|
+
return Trailblazer::Activity::Right, [ctx, flow_options]
|
249
|
+
end
|
250
|
+
|
230
251
|
# TODO: make this extendable!
|
231
252
|
def cleanup_options((ctx, flow_options), *)
|
232
|
-
new_ctx = ctx.reject { |k, v| [:connections, :outputs, :end_id, :step_interface_builder, :failure_end, :track_name, :sequence].include?(k) }
|
253
|
+
# new_ctx = ctx.reject { |k, v| [:connections, :outputs, :end_id, :step_interface_builder, :failure_end, :track_name, :sequence].include?(k) }
|
254
|
+
new_ctx = ctx.reject { |k, v| [:outputs, :end_id, :step_interface_builder, :failure_end, :track_name, :sequence].include?(k) }
|
233
255
|
|
234
256
|
return Trailblazer::Activity::Right, [new_ctx, flow_options]
|
235
257
|
end
|
@@ -90,6 +90,8 @@ module Trailblazer
|
|
90
90
|
)
|
91
91
|
end
|
92
92
|
|
93
|
+
# Add {:failure} output to {:outputs}.
|
94
|
+
# TODO: assert that failure_outputs doesn't override existing {:outputs}
|
93
95
|
def normalize_path_outputs((ctx, flow_options), *)
|
94
96
|
outputs = failure_outputs.merge(ctx[:outputs])
|
95
97
|
ctx = ctx.merge(outputs: outputs)
|
@@ -132,7 +134,6 @@ module Trailblazer
|
|
132
134
|
pass: Linear::Normalizer.activity_normalizer( Railway::DSL.normalizer_for_pass ),
|
133
135
|
)
|
134
136
|
|
135
|
-
|
136
137
|
def self.OptionsForState(normalizers: Normalizers, failure_end: Activity::End.new(semantic: :failure), **options)
|
137
138
|
options = Path::DSL.OptionsForState(options).
|
138
139
|
merge(normalizers: normalizers, failure_end: failure_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: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trailblazer-activity
|
@@ -135,7 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
135
|
- !ruby/object:Gem::Version
|
136
136
|
version: '0'
|
137
137
|
requirements: []
|
138
|
-
|
138
|
+
rubyforge_project:
|
139
|
+
rubygems_version: 2.7.6
|
139
140
|
signing_key:
|
140
141
|
specification_version: 4
|
141
142
|
summary: Simple DSL to define Trailblazer activities.
|