trailblazer-activity-dsl-linear 1.0.0 → 1.2.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +2 -3
- data/CHANGES.md +100 -0
- data/Gemfile +7 -4
- data/Rakefile +1 -1
- data/lib/trailblazer/activity/dsl/linear/feature/merge.rb +2 -2
- data/lib/trailblazer/activity/dsl/linear/feature/patch.rb +9 -5
- data/lib/trailblazer/activity/dsl/linear/feature/variable_mapping/dsl.rb +241 -156
- data/lib/trailblazer/activity/dsl/linear/feature/variable_mapping/runtime.rb +276 -0
- data/lib/trailblazer/activity/dsl/linear/feature/variable_mapping.rb +70 -226
- data/lib/trailblazer/activity/dsl/linear/helper/path.rb +37 -18
- data/lib/trailblazer/activity/dsl/linear/helper.rb +38 -17
- data/lib/trailblazer/activity/dsl/linear/normalizer/extensions.rb +63 -0
- data/lib/trailblazer/activity/dsl/linear/normalizer/inherit.rb +90 -0
- data/lib/trailblazer/activity/dsl/linear/normalizer/output_tuples.rb +160 -0
- data/lib/trailblazer/activity/dsl/linear/normalizer/terminus.rb +26 -29
- data/lib/trailblazer/activity/dsl/linear/normalizer.rb +99 -160
- data/lib/trailblazer/activity/dsl/linear/sequence/builder.rb +3 -2
- data/lib/trailblazer/activity/dsl/linear/sequence/compiler.rb +21 -17
- data/lib/trailblazer/activity/dsl/linear/sequence/search.rb +2 -8
- data/lib/trailblazer/activity/dsl/linear/strategy.rb +56 -17
- data/lib/trailblazer/activity/dsl/linear/version.rb +1 -1
- data/lib/trailblazer/activity/dsl/linear.rb +13 -1
- data/lib/trailblazer/activity/fast_track.rb +96 -67
- data/lib/trailblazer/activity/path.rb +35 -53
- data/lib/trailblazer/activity/railway.rb +63 -65
- data/trailblazer-activity-dsl-linear.gemspec +8 -8
- metadata +27 -18
- data/lib/trailblazer/activity/dsl/linear/feature/variable_mapping/inherit.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 555d1c8af700e756c437e913546c302f4630cb0ba3066b97cae7deb67e25f055
|
4
|
+
data.tar.gz: e0fc5141498776365ff62c873d9d379bbd2f3bbfebc177939e7e18057503ee6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d57fa76cde08343769eb8d5feba10f830635738db77c6c732c3df1adadd13e0a6b865a3e5ff2ba6b6cdb3f4adce898f163fb8614e318d9070c98ef896c7322e
|
7
|
+
data.tar.gz: d2691ec2bf75287fd88b089d3764baccdfb2eaa0234b11a2954afae891e63e7262979004eb81d8fc7b204ba2c415f70a75177594400acb1a2ef736050b008864
|
data/.github/workflows/ci.yml
CHANGED
@@ -5,11 +5,10 @@ jobs:
|
|
5
5
|
strategy:
|
6
6
|
fail-fast: false
|
7
7
|
matrix:
|
8
|
-
|
9
|
-
ruby: [2.5, 2.6, 2.7, '3.0', head, jruby]
|
8
|
+
ruby: [2.5, 2.6, 2.7, '3.0', '3.1', '3.2', 'head', 'jruby']
|
10
9
|
runs-on: ubuntu-latest
|
11
10
|
steps:
|
12
|
-
- uses: actions/checkout@
|
11
|
+
- uses: actions/checkout@v3
|
13
12
|
- uses: ruby/setup-ruby@v1
|
14
13
|
with:
|
15
14
|
ruby-version: ${{ matrix.ruby }}
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,103 @@
|
|
1
|
+
# 1.2
|
2
|
+
|
3
|
+
## Introspect
|
4
|
+
|
5
|
+
* As `Activity::Introspect::TaskMap` got removed, use `Activity::Introspect.Nodes(activity)` for introspecting. See https://trailblazer.to/2.1/docs/activity#activity-internals-introspection-api
|
6
|
+
|
7
|
+
## Normalizer
|
8
|
+
|
9
|
+
* Extract `normalizer/extension.rb` to implement `Extension() => myext`
|
10
|
+
* Extract `normalizer/inherit.rb` to implement `inherit: true`.
|
11
|
+
* Extract `normalizer/output_tuples.rb` which represents code for the Wiring API.
|
12
|
+
* Connectors (`Track()`, `Id()` and `End()`) now contain the logic that returns the search builder. This used to sit in `#normalize_connections_from_dsl`.
|
13
|
+
* What used to be the `"path.outputs"` step is now a separate, nested pipeline named `"activity.default_outputs"`. See https://trailblazer.to/2.1/docs/internals#internals-wiring-api-outputs-defaulting
|
14
|
+
Basically, The default step's outputs are set in that separate pipeline under `"activity.default_outputs"`.
|
15
|
+
* Rename `"path.connections"` to `"path.step.add_success_connector"` for consistency.
|
16
|
+
* Move `Railway::DSL::NormalizerForPass` to `Railway::DSL::Pass::Normalizer` (same for `Fail`).
|
17
|
+
* Move `FastTrack::DSL::NormalizerForPass` to `FastTrack::DSL::Pass::Normalizer` (same for `Fail`).
|
18
|
+
* Remove `"activity.normalize_outputs_from_dsl"` as this all happens in `#compile_wirings` now.
|
19
|
+
|
20
|
+
## Various
|
21
|
+
|
22
|
+
* Deprecate `Path(end_id:, end_task:)` options in favor of `Path(terminus: :semantic)`.
|
23
|
+
* `FastTrack` outputs for non-`Subprocess()` are only added when `fast_track: true` is set.
|
24
|
+
As a result, this will throw an exception `No `pass_fast` output found for :find_model`.
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
step :find_model, Output(:pass_fast) # throws "no output" exception.
|
28
|
+
```
|
29
|
+
|
30
|
+
and needs to be changed to
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
step :find_model,
|
34
|
+
fast_track: true,
|
35
|
+
Output(:pass_fast)
|
36
|
+
```
|
37
|
+
* Fixed a bug where `Subprocess(Path)` would accidentially add a `:failure` connection.
|
38
|
+
As a result, this doesn't work anymore
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
step Subprocess(Path), Output(:failure) => ...
|
42
|
+
```
|
43
|
+
* Allow inheriting of `:fail_fast`, `:pass_fast` and `:fast_track`.
|
44
|
+
* The `:outputs` option for `#step` is now a private concept. When passed explicitely to the normalizer (as it happens with `Subprocess()`) it's no longer extended or defaulted.
|
45
|
+
* `Strategy.End()` now returns an `OutputTuples::End` instance. Use `Activity.End()` for the original behavior.
|
46
|
+
* Removed the `:connections` option in favor of simply using output tuples for setting connections. We also don't inherit `:connections` anymore, but the output tuples.
|
47
|
+
* Removed the `VariableMapping::Inherit` module as we can use generic inheritance logic.
|
48
|
+
* Finally add the `Extension() => my_ext` option to painlessly add extensions. This means you don't have to manually merge `:extensions` anymore.
|
49
|
+
* Extensions are now properly inherited (if `generic?` is false) using the universal inheritance mechanism.
|
50
|
+
* `Strategy.invoke` now passes on keyword arguments, too.
|
51
|
+
* A terminus step no longer maintains any wirings (as per `trailblazer-activity-0.16.0`), resulting in a terminus `Sequence` row as follows.
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
[
|
55
|
+
:success,
|
56
|
+
implementing::Success,
|
57
|
+
[], # no outputs anymore!
|
58
|
+
{id: "End.success", stop_event: true, semantic: :success}, # instead, {:semantic} is passed as a data option.
|
59
|
+
]
|
60
|
+
```
|
61
|
+
* Remove `Search::Noop` as an empty wirings array in `Sequence` are allowed now.
|
62
|
+
|
63
|
+
# 1.1.1
|
64
|
+
|
65
|
+
* When using `step ..., inherit: true, replace: :find_model` you can now omit `:id`. The ID from
|
66
|
+
`:replace` is used automatically in that case.
|
67
|
+
* Deprecate `:override` option for `#step`.
|
68
|
+
* Simplify `inherit: [:variable_mapping]` by recording the `:in_filters` and `:out_filters` variables
|
69
|
+
instead of the compiled pipelines. This fixes #61.
|
70
|
+
* Introduce `#patch` to simplify modifying nested activities. Instead of `Subprocess(<activity>, patch: ...)` you can use
|
71
|
+
the dedicated DSL function.
|
72
|
+
|
73
|
+
# 1.1.0
|
74
|
+
|
75
|
+
* Use `trailblazer-activity` 0.15.0.
|
76
|
+
* Remove `Path::DSL.OptionsForSequenceBuilder` and move concrete code to `Path::DSL.options_for_sequence_build`
|
77
|
+
which returns a set:
|
78
|
+
|
79
|
+
1. default termini instructions for the concrete strategy
|
80
|
+
2. options specific for this strategy subclass.
|
81
|
+
|
82
|
+
Everything else, such as merging user options, computing and adding termini, etc, now happens in
|
83
|
+
`Strategy::DSL.OptionsForSequenceBuilder`.
|
84
|
+
* Adding `Subprocess(Create, strict: true)` to wire all outputs of `Create` automatically.
|
85
|
+
Each output will be wired to its same named Track(semantic).
|
86
|
+
* Adding `Strategy(termini: )`
|
87
|
+
* For `output:` in combination with `:output_with_outer_ctx`, deprecate the second positional argument and make it
|
88
|
+
the `:outer_ctx` keyword argument instead.
|
89
|
+
* Introduce `Linear.Patch` as the public entry point for patching activities.
|
90
|
+
* Remove `Runtime.initial_aggregate` step for the input and output pipelines which results in slightly better runtime performance and less code.
|
91
|
+
|
92
|
+
## Variable Mapping
|
93
|
+
|
94
|
+
* Simplify the architecture in `VariableMapping`, filters are now added directly into the `Pipeline`.
|
95
|
+
Performance increase from 17k to 25k from 1.0.0 to this version.
|
96
|
+
* Introduce `Inject(:variable)` to supersede the version receiving a big mapping hash.
|
97
|
+
* Add `Inject(:variable, override: true)` to always write a variable to ctx, regardless of its presence.
|
98
|
+
* Fix a bug where `Inject()` would override `In()` filters even though the latter was added latest. This
|
99
|
+
is fixed by treating both filter types equally and in the order they were added by the user (and the macro).
|
100
|
+
|
1
101
|
# 1.0.0
|
2
102
|
|
3
103
|
## Additions
|
data/Gemfile
CHANGED
@@ -5,11 +5,14 @@ gemspec
|
|
5
5
|
|
6
6
|
gem "minitest-line"
|
7
7
|
|
8
|
-
gem "
|
9
|
-
|
10
|
-
gem "trailblazer-developer", path: "../trailblazer-developer"
|
8
|
+
# gem "trailblazer-developer", path: "../trailblazer-developer"
|
11
9
|
# gem "trailblazer-developer", github: "trailblazer/trailblazer-developer"
|
12
10
|
# gem "trailblazer-declarative", path: "../trailblazer-declarative"
|
13
|
-
# gem "trailblazer-activity",
|
11
|
+
# gem "trailblazer-activity", path: "../trailblazer-activity"
|
14
12
|
# gem "trailblazer-activity", github: "trailblazer/trailblazer-activity"
|
15
13
|
# gem "trailblazer-activity", path: "../circuit"
|
14
|
+
|
15
|
+
# gem "benchmark-ips"
|
16
|
+
# gem "stackprof"
|
17
|
+
# gem "standard"
|
18
|
+
# gem "trailblazer-core-utils", path: "../trailblazer-core-utils"
|
data/Rakefile
CHANGED
@@ -21,14 +21,14 @@ class Trailblazer::Activity
|
|
21
21
|
|
22
22
|
_seq = Adds.apply_adds(
|
23
23
|
old_seq,
|
24
|
-
new_seq.collect { |row| {insert: [Adds::Insert.method(:Prepend), end_id], row: row
|
24
|
+
new_seq.collect { |row| {insert: [Adds::Insert.method(:Prepend), end_id], row: row} }
|
25
25
|
)
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.strip_start_and_ends(seq, end_id:)
|
29
29
|
cut_off_index = end_id.nil? ? seq.size : Adds::Insert.find_index(seq, end_id) # find the "first" end.
|
30
30
|
|
31
|
-
seq[1..cut_off_index-1]
|
31
|
+
seq[1..cut_off_index - 1]
|
32
32
|
end
|
33
33
|
end # Merge
|
34
34
|
end
|
@@ -2,11 +2,10 @@ class Trailblazer::Activity
|
|
2
2
|
module DSL
|
3
3
|
module Linear
|
4
4
|
module Patch
|
5
|
-
# DISCUSS: we could make this a generic DSL option, not just for Subprocess().
|
6
5
|
# Currently, this is called from the Subprocess() helper.
|
7
6
|
def self.customize(activity, options:)
|
8
7
|
options = options.is_a?(Proc) ?
|
9
|
-
{
|
8
|
+
{[] => options} : # hash-wrapping with empty path, for patching given activity itself
|
10
9
|
options
|
11
10
|
|
12
11
|
options.each do |path, patch|
|
@@ -16,12 +15,12 @@ class Trailblazer::Activity
|
|
16
15
|
activity
|
17
16
|
end
|
18
17
|
|
19
|
-
def self.call(activity, path, customization)
|
18
|
+
def self.call(activity, path, customization, patched_activity: Class.new(activity))
|
20
19
|
task_id, *path = path
|
21
20
|
|
22
21
|
patch =
|
23
22
|
if task_id
|
24
|
-
segment_activity = Introspect
|
23
|
+
segment_activity = Introspect.Nodes(activity, id: task_id).task
|
25
24
|
patched_segment_activity = call(segment_activity, path, customization)
|
26
25
|
|
27
26
|
# Replace the patched subprocess.
|
@@ -30,10 +29,15 @@ class Trailblazer::Activity
|
|
30
29
|
customization # apply the *actual* patch from the Subprocess() call.
|
31
30
|
end
|
32
31
|
|
33
|
-
patched_activity = Class.new(activity)
|
34
32
|
patched_activity.class_exec(&patch)
|
35
33
|
patched_activity
|
36
34
|
end
|
35
|
+
|
36
|
+
module DSL
|
37
|
+
def patch(*path, &block)
|
38
|
+
Patch.call(self, path, block, patched_activity: self)
|
39
|
+
end
|
40
|
+
end
|
37
41
|
end # Patch
|
38
42
|
end
|
39
43
|
end
|