trailblazer-operation 0.7.5 → 0.8.0.beta1
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 +1 -1
- data/CHANGES.md +4 -0
- data/Gemfile +5 -0
- data/lib/trailblazer/operation/class_dependencies.rb +7 -4
- data/lib/trailblazer/operation/public_call.rb +1 -1
- data/lib/trailblazer/operation/trace.rb +2 -0
- data/lib/trailblazer/operation/version.rb +1 -1
- data/lib/trailblazer/operation.rb +7 -9
- data/test/class_dependencies_test.rb +29 -2
- data/test/step_test.rb +2 -2
- data/trailblazer-operation.gemspec +2 -3
- metadata +14 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bbb0fa15c5191698a061f5bb8b93a5eace67064ea2fbcbf0e470fac0cd753ae
|
4
|
+
data.tar.gz: 8e2936aa292319ae85ff536b52a7804d458490789cf899993bcad735f127e737
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa828e7e9ca916cd4d312925407e7a723831a13d08f4f8bc4eddae6b0f0867bd8f7c23929e5f385fde91a7dad9ed706b96cbb54010adbec607f7c315eb928725
|
7
|
+
data.tar.gz: ec3ecc37e71550152747ce598e4a1e44ac17beac712dbde45463a08e357673c3835539c6122e5047a6381b9440be32829f1a9f986d894715204bf5a39332d5a7
|
data/.github/workflows/ci.yml
CHANGED
@@ -6,7 +6,7 @@ jobs:
|
|
6
6
|
fail-fast: false
|
7
7
|
matrix:
|
8
8
|
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
9
|
-
ruby: [2.5, 2.6, 2.7, '3.0',
|
9
|
+
ruby: [2.5, 2.6, 2.7, '3.0', '3.1', head, jruby]
|
10
10
|
runs-on: ubuntu-latest
|
11
11
|
steps:
|
12
12
|
- uses: actions/checkout@v2
|
data/CHANGES.md
CHANGED
data/Gemfile
CHANGED
@@ -16,3 +16,8 @@ gem "minitest-line"
|
|
16
16
|
# gem "trailblazer-context", path: "../trailblazer-context"
|
17
17
|
# gem "trailblazer-activity-dsl-linear", path: "../trailblazer-activity-dsl-linear"
|
18
18
|
# gem "trailblazer-activity", github: "trailblazer/trailblazer-activity"
|
19
|
+
|
20
|
+
# gem "trailblazer-macro", path: "../trailblazer-macro"
|
21
|
+
# gem "trailblazer-activity", path: "../trailblazer-activity"
|
22
|
+
# gem "trailblazer-activity-dsl-linear", path: "../trailblazer-activity-dsl-linear"
|
23
|
+
# gem "trailblazer-declarative"
|
@@ -2,14 +2,17 @@
|
|
2
2
|
class Trailblazer::Operation
|
3
3
|
# The use of this module is currently not encouraged and it is only here for backward-compatibility.
|
4
4
|
# Instead, please pass dependencies via containers, locals, or macros into the respective steps.
|
5
|
+
#
|
5
6
|
module ClassDependencies
|
6
7
|
def [](field)
|
7
|
-
|
8
|
+
class_fields[field]
|
8
9
|
end
|
9
10
|
|
11
|
+
# Store a field on @state, which is provided by {Strategy}.
|
10
12
|
def []=(field, value)
|
11
|
-
|
12
|
-
|
13
|
+
@state.update!(:fields) do |fields|
|
14
|
+
fields.merge(field => value)
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
def options_for_public_call(options, flow_options)
|
@@ -18,7 +21,7 @@ class Trailblazer::Operation
|
|
18
21
|
end
|
19
22
|
|
20
23
|
private def class_fields
|
21
|
-
@state.
|
24
|
+
@state.get(:fields)
|
22
25
|
end
|
23
26
|
|
24
27
|
private def context_for_fields(fields, (ctx, flow_options), **)
|
@@ -82,7 +82,7 @@ module Trailblazer
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def initial_wrap_static(*)
|
85
|
-
Activity::TaskWrap::Pipeline.new([
|
85
|
+
Activity::TaskWrap::Pipeline.new([Activity::TaskWrap::Pipeline.Row("task_wrap.call_task", method(:call_task))])
|
86
86
|
end
|
87
87
|
|
88
88
|
def call_task(wrap_ctx, original_args) # DISCUSS: copied from {TaskWrap.call_task}.
|
@@ -1,12 +1,11 @@
|
|
1
|
+
require "trailblazer/activity/dsl/linear"
|
1
2
|
require 'forwardable'
|
2
3
|
require 'trailblazer/operation/version'
|
3
|
-
require "trailblazer/option"
|
4
|
-
require "trailblazer/context"
|
5
|
-
|
6
|
-
require "trailblazer/activity/dsl/linear"
|
7
4
|
|
8
5
|
module Trailblazer
|
9
|
-
#
|
6
|
+
# As opposed to {Activity::Railway} and {Activity::FastTrack} an operation
|
7
|
+
# maintains different terminus subclasses.
|
8
|
+
# DISCUSS: remove this, at some point in time!
|
10
9
|
class Activity
|
11
10
|
class Railway
|
12
11
|
module End
|
@@ -31,6 +30,7 @@ module Trailblazer
|
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
33
|
+
# DISCUSS: where do we need this?
|
34
34
|
def self.Operation(options)
|
35
35
|
Class.new(Activity::FastTrack( Activity::Operation.OptionsForState.merge(options) )) do
|
36
36
|
extend Operation::PublicCall
|
@@ -38,10 +38,8 @@ module Trailblazer
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# The Trailblazer-style operation.
|
41
|
-
# Note that you don't have to use our "opinionated" version with result object,
|
42
|
-
class Operation < Activity::FastTrack(Activity::Operation.OptionsForState)
|
43
|
-
# extend Skill::Accessors # ::[] and ::[]= # TODO: fade out this usage.
|
44
|
-
|
41
|
+
# Note that you don't have to use our "opinionated" version with result object, etc.
|
42
|
+
class Operation < Activity::FastTrack(**Activity::Operation.OptionsForState)
|
45
43
|
class << self
|
46
44
|
alias_method :strategy_call, :call
|
47
45
|
end
|
@@ -8,16 +8,43 @@ class ClassDependenciesTest < Minitest::Spec
|
|
8
8
|
|
9
9
|
self["model.class"] = Module
|
10
10
|
|
11
|
-
step ->(
|
11
|
+
step ->(ctx, **) { ctx["a"] = ctx["model.class"] }
|
12
12
|
end
|
13
13
|
|
14
14
|
it { Index.({}).inspect("a", "model.class").must_equal %{<Result:true [Module, Module] >} }
|
15
15
|
|
16
16
|
it "creates separate ctx for circuit interface" do
|
17
|
+
# raise "this can't work since the OP is run without TaskWrap.invoke"
|
17
18
|
signal, (ctx, _) = Index.([{}, {}], {})
|
18
19
|
|
19
|
-
ctx["model.class"].inspect.must_equal %{Module} # FIXME: should this be here?
|
20
20
|
ctx[:a].inspect.must_equal %{Module}
|
21
|
+
ctx["model.class"].inspect.must_equal %{Module} # FIXME: should this be here?
|
22
|
+
end
|
23
|
+
|
24
|
+
# nested OPs
|
25
|
+
it "injects class dependencies for nested OP" do
|
26
|
+
class Home < Trailblazer::Operation
|
27
|
+
step Subprocess(Index)
|
28
|
+
end
|
29
|
+
|
30
|
+
# "model.class" gets injected automatically just before {Index}.
|
31
|
+
Home.({params: {}}).inspect.must_equal %{<Result:true #<Trailblazer::Context::Container wrapped_options={\"model.class\"=>Module} mutable_options=#<Trailblazer::Context::Container wrapped_options={:params=>{}} mutable_options={\"a\"=>Module}>> >}
|
32
|
+
|
33
|
+
# "model.class" gets injected by user and overrides class dependencies.
|
34
|
+
Home.({params: {}, "model.class" => Symbol}).inspect.must_equal %{<Result:true #<Trailblazer::Context::Container wrapped_options={\"model.class\"=>Module} mutable_options=#<Trailblazer::Context::Container wrapped_options={:params=>{}, \"model.class\"=>Symbol} mutable_options={\"a\"=>Symbol}>> >}
|
35
|
+
|
36
|
+
|
37
|
+
class Dashboard < Trailblazer::Operation
|
38
|
+
extend ClassDependencies
|
39
|
+
self["model.class"] = Float # this overrides {Index}'es dependency
|
40
|
+
|
41
|
+
pass ->(ctx, **) { ctx[:Dashboard] = ctx["model.class"] }
|
42
|
+
step Subprocess(Index)
|
43
|
+
end
|
44
|
+
|
45
|
+
# TODO: "model.class" gets injected automatically in {Dashboard} and overrides the {Index} input.
|
46
|
+
Dashboard.({params: {}}).inspect.must_equal %{<Result:true #<Trailblazer::Context::Container wrapped_options={\"model.class\"=>Module} mutable_options=#<Trailblazer::Context::Container wrapped_options={\"model.class\"=>Float} mutable_options=#<Trailblazer::Context::Container wrapped_options={\"model.class\"=>Float} mutable_options=#<Trailblazer::Context::Container wrapped_options={:params=>{}} mutable_options={:Dashboard=>Float, \"a\"=>Float}>>>> >}
|
47
|
+
|
21
48
|
end
|
22
49
|
|
23
50
|
describe "inheritance" do
|
data/test/step_test.rb
CHANGED
@@ -177,13 +177,13 @@ class StepTest < Minitest::Spec
|
|
177
177
|
#-
|
178
178
|
# not existent :name
|
179
179
|
it do
|
180
|
-
op = assert_raises Trailblazer::Activity::
|
180
|
+
op = assert_raises Trailblazer::Activity::Adds::IndexError do
|
181
181
|
class InvalidStep < Trailblazer::Operation
|
182
182
|
step :a, before: "I don't exist!"
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
186
|
-
error_message = %{#<Trailblazer::Activity::
|
186
|
+
error_message = %{#<Trailblazer::Activity::Adds::IndexError: StepTest::InvalidStep:
|
187
187
|
\e[31m\"I don't exist!\" is not a valid step ID. Did you mean any of these ?\e[0m
|
188
188
|
\e[32m\"Start.default\"
|
189
189
|
\"End.success\"
|
@@ -17,9 +17,8 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_dependency "trailblazer-activity-dsl-linear",
|
21
|
-
spec.add_dependency "trailblazer-
|
22
|
-
spec.add_dependency "trailblazer-developer", ">= 0.0.21", "< 1.0.0"
|
20
|
+
spec.add_dependency "trailblazer-activity-dsl-linear", ">= 1.0.0.beta1", "< 1.1.0"
|
21
|
+
spec.add_dependency "trailblazer-developer", ">= 0.0.26"
|
23
22
|
|
24
23
|
spec.add_development_dependency "bundler"
|
25
24
|
spec.add_development_dependency "minitest"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trailblazer-operation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trailblazer-activity-dsl-linear
|
@@ -16,60 +16,34 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 1.0.0.beta1
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 1.1.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.
|
29
|
+
version: 1.0.0.beta1
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: trailblazer-activity
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 0.12.2
|
40
|
-
- - "<"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 1.0.0
|
43
|
-
type: :runtime
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 0.12.2
|
50
|
-
- - "<"
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 1.0.0
|
32
|
+
version: 1.1.0
|
53
33
|
- !ruby/object:Gem::Dependency
|
54
34
|
name: trailblazer-developer
|
55
35
|
requirement: !ruby/object:Gem::Requirement
|
56
36
|
requirements:
|
57
37
|
- - ">="
|
58
38
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.0.
|
60
|
-
- - "<"
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 1.0.0
|
39
|
+
version: 0.0.26
|
63
40
|
type: :runtime
|
64
41
|
prerelease: false
|
65
42
|
version_requirements: !ruby/object:Gem::Requirement
|
66
43
|
requirements:
|
67
44
|
- - ">="
|
68
45
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.0.
|
70
|
-
- - "<"
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 1.0.0
|
46
|
+
version: 0.0.26
|
73
47
|
- !ruby/object:Gem::Dependency
|
74
48
|
name: bundler
|
75
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,7 +155,7 @@ homepage: http://trailblazer.to
|
|
181
155
|
licenses:
|
182
156
|
- MIT
|
183
157
|
metadata: {}
|
184
|
-
post_install_message:
|
158
|
+
post_install_message:
|
185
159
|
rdoc_options: []
|
186
160
|
require_paths:
|
187
161
|
- lib
|
@@ -192,12 +166,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
192
166
|
version: 2.1.0
|
193
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
194
168
|
requirements:
|
195
|
-
- - "
|
169
|
+
- - ">"
|
196
170
|
- !ruby/object:Gem::Version
|
197
|
-
version:
|
171
|
+
version: 1.3.1
|
198
172
|
requirements: []
|
199
|
-
rubygems_version: 3.
|
200
|
-
signing_key:
|
173
|
+
rubygems_version: 3.2.3
|
174
|
+
signing_key:
|
201
175
|
specification_version: 4
|
202
176
|
summary: Trailblazer's operation object with railway flow and integrated error handling.
|
203
177
|
test_files:
|