trailblazer-activity-dsl-linear 0.2.7 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|