trailblazer-operation 0.10.1 → 0.11.1
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 -2
- data/CHANGES.md +14 -0
- data/lib/trailblazer/operation/class_dependencies.rb +1 -1
- data/lib/trailblazer/operation/public_call.rb +24 -14
- data/lib/trailblazer/operation/railway.rb +13 -7
- data/lib/trailblazer/operation/version.rb +1 -1
- data/lib/trailblazer/operation/wtf.rb +11 -0
- data/lib/trailblazer/operation.rb +2 -2
- data/test/call_test.rb +32 -10
- data/test/class_dependencies_test.rb +8 -4
- data/test/docs/autogenerated/activity_basics_test.rb +72 -0
- data/test/docs/autogenerated/composable_variable_mapping_test.rb +880 -0
- data/test/docs/autogenerated/fast_track_layout_test.rb +76 -0
- data/test/docs/autogenerated/mechanics_test.rb +382 -0
- data/test/docs/autogenerated/sequence_options_test.rb +202 -0
- data/test/docs/autogenerated/subprocess_test.rb +257 -0
- data/test/docs/autogenerated/wiring_api_test.rb +435 -0
- data/test/docs/developer_test.rb +27 -0
- data/test/docs/public_call_monkeypatching_test.rb +96 -0
- data/test/docs/result_test.rb +38 -0
- data/test/docs/step_dsl_test.rb +93 -0
- data/test/operation_test.rb +53 -13
- data/test/result_test.rb +1 -1
- data/test/test_helper.rb +17 -5
- data/test/trace_test.rb +3 -43
- data/trailblazer-operation.gemspec +2 -1
- metadata +44 -22
- data/lib/trailblazer/operation/trace.rb +0 -67
- data/test/callable_test.rb +0 -147
- data/test/docs/doormat_test.rb +0 -190
- data/test/docs/macaroni_test.rb +0 -31
- data/test/skill_test.rb +0 -66
- data/test/wire_test.rb +0 -113
- data/test/wiring/defaults_test.rb +0 -193
- data/test/wiring/subprocess_test.rb +0 -70
@@ -0,0 +1,27 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class Wtf_DeveloperDocsTest < Minitest::Spec
|
4
|
+
Memo = Class.new
|
5
|
+
module Memo::Operation
|
6
|
+
class Create < Trailblazer::Operation
|
7
|
+
step :validate
|
8
|
+
step :save
|
9
|
+
left :handle_errors
|
10
|
+
step :notify
|
11
|
+
#~meths
|
12
|
+
include T.def_steps(:validate, :save, :handle_errors, :notify)
|
13
|
+
#~meths end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "what" do
|
18
|
+
#:wtf
|
19
|
+
result = Memo::Operation::Create.wtf?(
|
20
|
+
#~meths
|
21
|
+
seq: [],
|
22
|
+
#~meths end
|
23
|
+
params: {memo: "remember me!"}
|
24
|
+
)
|
25
|
+
#:wtf end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class PublicCallMonkeypatchingTest < Minitest::Spec
|
4
|
+
#@ test overriding {Operation.call_with_public_interface}
|
5
|
+
#@
|
6
|
+
module AfterCall
|
7
|
+
def self.add_task_name(wrap_ctx, original_args)
|
8
|
+
(ctx, _flow_options), circuit_options = original_args
|
9
|
+
|
10
|
+
activity = circuit_options[:activity] # currently running Activity.
|
11
|
+
task = wrap_ctx[:task] # the current "step".
|
12
|
+
task_id = Trailblazer::Activity::Introspect.Nodes(activity, task: task).id
|
13
|
+
|
14
|
+
ctx[:seq] << task_id
|
15
|
+
|
16
|
+
return wrap_ctx, original_args # yay to mutable state. not.
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it "overrides {call_with_public_interface} and allows injecting {circuit_options} and {flow_options} from the override" do
|
21
|
+
TaskWrapExtension = Trailblazer::Activity::TaskWrap::Extension(
|
22
|
+
[AfterCall.method(:add_task_name), id: "my.add_1", append: "task_wrap.call_task"]
|
23
|
+
)
|
24
|
+
|
25
|
+
module OperationExtensions
|
26
|
+
def call_with_public_interface(ctx, flow_options, **circuit_options)
|
27
|
+
super(
|
28
|
+
ctx,
|
29
|
+
flow_options.merge({}),
|
30
|
+
**circuit_options.merge(
|
31
|
+
wrap_runtime: Hash.new(TaskWrapExtension),
|
32
|
+
runner: Trailblazer::Activity::TaskWrap::Runner
|
33
|
+
)
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
operation = Class.new(Trailblazer::Operation) do
|
39
|
+
step :a
|
40
|
+
|
41
|
+
include Trailblazer::Activity::Testing.def_steps(:a)
|
42
|
+
end
|
43
|
+
operation.extend OperationExtensions # monkey-patch the "global" Operation.
|
44
|
+
|
45
|
+
|
46
|
+
# circuit interface invocation using call
|
47
|
+
result = operation.call(
|
48
|
+
seq: []
|
49
|
+
)
|
50
|
+
|
51
|
+
assert_equal result.success?, true
|
52
|
+
assert_equal result[:seq], ["Start.default", :a, :a, "End.success", nil] # {nil} because we don't have an ID for the actual operation.
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class FlowOptionsMonkeypatching < Minitest::Spec
|
57
|
+
module App
|
58
|
+
FLOW_OPTIONS = {
|
59
|
+
context_options: {
|
60
|
+
aliases: { "contract.default": :contract },
|
61
|
+
container_class: Trailblazer::Context::Container::WithAliases,
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
module OperationExtensions
|
66
|
+
def call_with_public_interface(ctx, flow_options, **circuit_options)
|
67
|
+
super(
|
68
|
+
ctx,
|
69
|
+
flow_options.merge(App::FLOW_OPTIONS),
|
70
|
+
**circuit_options
|
71
|
+
)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "inject aliases for the global run via {flow_options}" do
|
77
|
+
operation = Class.new(Trailblazer::Operation) do
|
78
|
+
step :a
|
79
|
+
|
80
|
+
def a(ctx, contract:, **)
|
81
|
+
ctx[:seq] << contract
|
82
|
+
end
|
83
|
+
end
|
84
|
+
operation.extend App::OperationExtensions # monkey-patch the "global" Operation.
|
85
|
+
|
86
|
+
|
87
|
+
# circuit interface invocation using call
|
88
|
+
result = operation.call(
|
89
|
+
seq: [],
|
90
|
+
:"contract.default" => Object,
|
91
|
+
)
|
92
|
+
|
93
|
+
assert_equal result.success?, true
|
94
|
+
assert_equal result[:seq].inspect, %([Object])
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module A
|
4
|
+
class DocsResultTest < Minitest::Spec
|
5
|
+
Memo = Class.new
|
6
|
+
module Memo::Operation
|
7
|
+
class Create < Trailblazer::Operation
|
8
|
+
step :validate, Output(:failure) => End(:validation_error)
|
9
|
+
step :save
|
10
|
+
include T.def_steps(:validate, :save)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "exposes {#terminus}" do
|
15
|
+
result = Memo::Operation::Create.(seq: [])
|
16
|
+
assert_equal CU.inspect(result.terminus.to_h), %({:semantic=>:success})
|
17
|
+
|
18
|
+
result = Memo::Operation::Create.(validate: false, seq: [])
|
19
|
+
assert_equal CU.inspect(result.terminus.to_h), %({:semantic=>:validation_error})
|
20
|
+
|
21
|
+
result = Memo::Operation::Create.(save: false, seq: [])
|
22
|
+
assert_equal CU.inspect(result.terminus.to_h), %({:semantic=>:failure})
|
23
|
+
end
|
24
|
+
|
25
|
+
it "deprecates Result#event" do
|
26
|
+
result = Memo::Operation::Create.(seq: [])
|
27
|
+
terminus = nil
|
28
|
+
|
29
|
+
_, warning = capture_io do
|
30
|
+
terminus = result.event
|
31
|
+
end
|
32
|
+
line_no = __LINE__ - 2
|
33
|
+
|
34
|
+
assert_equal warning, %{[Trailblazer] #{File.realpath(__FILE__)}:#{line_no} Using `Result#event` is deprecated, please use `Result#terminus`\n}
|
35
|
+
assert_equal CU.inspect(terminus.to_h), %({:semantic=>:success})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module A
|
4
|
+
class DocsStepTest < Minitest::Spec
|
5
|
+
Memo = Module.new
|
6
|
+
|
7
|
+
#:railway
|
8
|
+
module Memo::Operation
|
9
|
+
class Create < Trailblazer::Operation
|
10
|
+
step :validate
|
11
|
+
step :save
|
12
|
+
#~step
|
13
|
+
left :handle_errors
|
14
|
+
#~left
|
15
|
+
step :notify
|
16
|
+
#~meths
|
17
|
+
# fail :log_error
|
18
|
+
# step :save
|
19
|
+
def validate(ctx, params:, **)
|
20
|
+
ctx[:input] = Form.validate(params) # true/false
|
21
|
+
end
|
22
|
+
|
23
|
+
# def create(ctx, input:, create:, **)
|
24
|
+
# create
|
25
|
+
# end
|
26
|
+
|
27
|
+
# def log_error(ctx, logger:, params:, **)
|
28
|
+
# logger.error("wrong params: #{params.inspect}")
|
29
|
+
# end
|
30
|
+
#~meths end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
#~step end
|
34
|
+
#~left end
|
35
|
+
#:railway end
|
36
|
+
|
37
|
+
# it "what" do
|
38
|
+
# ctx = {params: {text: "Hydrate!"}, create: true}
|
39
|
+
# signal, (ctx, _flow_options) = D::Create.([ctx, {}])
|
40
|
+
# end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
module B
|
46
|
+
class Fail_DocsStepTest < Minitest::Spec
|
47
|
+
Memo = Module.new
|
48
|
+
|
49
|
+
#:fail
|
50
|
+
module Memo::Operation
|
51
|
+
class Create < Trailblazer::Operation
|
52
|
+
step :validate
|
53
|
+
step :save
|
54
|
+
fail :handle_errors # just like {#left}
|
55
|
+
#~meths
|
56
|
+
step :notify
|
57
|
+
include T.def_steps(:validate, :save, :handle_errors, :notify)
|
58
|
+
#~meths end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
#:fail end
|
62
|
+
|
63
|
+
it "what" do
|
64
|
+
assert_invoke Memo::Operation::Create, seq: "[:validate, :save, :notify]"
|
65
|
+
assert_invoke Memo::Operation::Create, validate: false, terminus: :failure, seq: "[:validate, :handle_errors]"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
module A
|
71
|
+
class Pass_DocsStepTest < Minitest::Spec
|
72
|
+
Memo = Module.new
|
73
|
+
|
74
|
+
#:pass
|
75
|
+
module Memo::Operation
|
76
|
+
class Create < Trailblazer::Operation
|
77
|
+
step :validate
|
78
|
+
pass :save # no output goes to the failure track here.
|
79
|
+
left :handle_errors
|
80
|
+
#~meths
|
81
|
+
step :notify
|
82
|
+
include T.def_steps(:validate, :save, :handle_errors, :notify)
|
83
|
+
#~meths end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
#:pass end
|
87
|
+
|
88
|
+
it "what" do
|
89
|
+
assert_invoke Memo::Operation::Create, seq: "[:validate, :save, :notify]"
|
90
|
+
assert_invoke Memo::Operation::Create, validate: false, terminus: :failure, seq: "[:validate, :handle_errors]"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/test/operation_test.rb
CHANGED
@@ -1,5 +1,55 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
|
+
# Tests around {Operation.call}.
|
4
|
+
class OperationTest < Minitest::Spec
|
5
|
+
class Noop < Trailblazer::Operation
|
6
|
+
def self.capture_circuit_options((ctx, flow_options), **circuit_options)
|
7
|
+
ctx[:capture_circuit_options] = circuit_options.keys.inspect
|
8
|
+
|
9
|
+
return Trailblazer::Activity::Right, [ctx, flow_options]
|
10
|
+
end
|
11
|
+
|
12
|
+
step task: method(:capture_circuit_options)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Mixing keywords and string keys in {Operation.call}.
|
16
|
+
# Test that {.(params: {}, "current_user" => user)} is processed properly
|
17
|
+
|
18
|
+
it "doesn't mistake circuit options as ctx variables when using circuit-interface" do
|
19
|
+
signal, (ctx, _) = Noop.call(
|
20
|
+
[{params: {}}, {}],
|
21
|
+
# real circuit_options
|
22
|
+
variable_for_circuit_options: true
|
23
|
+
) # call_with_public_interface
|
24
|
+
#@ {:variable_for_circuit_options} is not supposed to be in {ctx}.
|
25
|
+
assert_equal CU.inspect(ctx), %({:params=>{}, :capture_circuit_options=>"[:variable_for_circuit_options, :exec_context, :activity, :runner]"})
|
26
|
+
end
|
27
|
+
|
28
|
+
it "doesn't mistake circuit options as ctx variables when using the call interface" do
|
29
|
+
result = Noop.call(
|
30
|
+
params: {},
|
31
|
+
model: true,
|
32
|
+
"current_user" => Object
|
33
|
+
) # call with public interface.
|
34
|
+
#@ {:variable_for_circuit_options} is not supposed to be in {ctx}.
|
35
|
+
assert_result result, {params: {}, model: true, current_user: Object, capture_circuit_options: "[:wrap_runtime, :activity, :exec_context, :runner]"}
|
36
|
+
end
|
37
|
+
|
38
|
+
#@ {#call_with_public_interface}
|
39
|
+
it "doesn't mistake circuit options as ctx variables when using circuit-interface" do
|
40
|
+
result = Noop.call_with_public_interface(
|
41
|
+
{params: {}},
|
42
|
+
{},
|
43
|
+
variable_for_circuit_options: true
|
44
|
+
) # call_with_public_interface has two positional args, and kwargs for {circuit_options}.
|
45
|
+
|
46
|
+
assert_result result, {params: {}, capture_circuit_options: "[:variable_for_circuit_options, :wrap_runtime, :activity, :exec_context, :runner]"}
|
47
|
+
# assert_equal result.inspect, %(<Result:true #<Trailblazer::Context::Container wrapped_options={:params=>{}} mutable_options={:capture_circuit_options=>\"[:variable_for_circuit_options, :wrap_runtime, :activity, :exec_context, :runner]\"}> >)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# TODO: remove this test as many cases are covered via autogenerated activity tests.
|
52
|
+
|
3
53
|
class DeclarativeApiTest < Minitest::Spec
|
4
54
|
it "doesn't invoke {call} twice when using public interface" do
|
5
55
|
class MyOp < Trailblazer::Operation
|
@@ -33,7 +83,7 @@ class DeclarativeApiTest < Minitest::Spec
|
|
33
83
|
pass :wasnt_ok!
|
34
84
|
pass :was_ok!
|
35
85
|
fail :return_true!
|
36
|
-
|
86
|
+
left :return_false!
|
37
87
|
|
38
88
|
step :bla, input: ->(ctx, *) { {id: ctx.inspect} }, output: ->(scope, ctx) { ctx["hello"] = scope["1"]; ctx }
|
39
89
|
|
@@ -117,17 +167,6 @@ class DeclarativeApiTest < Minitest::Spec
|
|
117
167
|
Unset. ("params" => {decide: true}).inspect("a", "b", "c", "d", "e").must_equal %{<Result:true [false, true, nil, 1, 2] >}
|
118
168
|
end
|
119
169
|
|
120
|
-
# Mixing keywords and string keys in {Operation.call}.
|
121
|
-
# Test that {.(params: {}, "current_user" => user)} is processed properly
|
122
|
-
class Collect < Trailblazer::Operation
|
123
|
-
# step ->(ctx, **) { ctx[:keys] }
|
124
|
-
end
|
125
|
-
|
126
|
-
it "contains all keys from {call}" do
|
127
|
-
result = Collect.(params: {}, "current_user" => Module)
|
128
|
-
_(result.inspect).must_equal %{<Result:true #<Trailblazer::Context::Container wrapped_options={:params=>{}, \"current_user\"=>Module} mutable_options={}> >}
|
129
|
-
end
|
130
|
-
|
131
170
|
#---
|
132
171
|
#- ctx container
|
133
172
|
it do
|
@@ -141,9 +180,10 @@ class DeclarativeApiTest < Minitest::Spec
|
|
141
180
|
signal, (ctx, _) = Update.([Update.options_for_public_call(options), {}], **{})
|
142
181
|
|
143
182
|
signal.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
|
144
|
-
ctx.inspect
|
183
|
+
assert_equal ctx.inspect, %(#<Trailblazer::Context::Container wrapped_options=#{{"params" => {:decide=>true}}} mutable_options=#{{"a" => false, "b" => true}}>)
|
145
184
|
|
146
185
|
# Call by passing aliases as an argument.
|
186
|
+
# This uses {#call}'s second positional argument.
|
147
187
|
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.0.0")
|
148
188
|
result = Update.(
|
149
189
|
options,
|
data/test/result_test.rb
CHANGED
@@ -19,7 +19,7 @@ class RailwayResultTest < Minitest::Spec
|
|
19
19
|
|
20
20
|
#---
|
21
21
|
# inspect
|
22
|
-
it { success.inspect
|
22
|
+
it { assert_equal success.inspect, %(<Result:true #{{"x" => String}} >) }
|
23
23
|
it { Result.new(true, {"x" => true, "y" => 1, "z" => 2}, event).inspect("z", "y").must_equal %{<Result:true [2, 1] >} }
|
24
24
|
|
25
25
|
class Create < Trailblazer::Operation
|
data/test/test_helper.rb
CHANGED
@@ -1,15 +1,27 @@
|
|
1
|
-
|
2
|
-
require "trailblazer/operation"
|
1
|
+
require "minitest/autorun"
|
3
2
|
|
4
3
|
require "pp"
|
4
|
+
require "trailblazer/operation"
|
5
5
|
|
6
|
-
require "minitest/autorun"
|
7
6
|
require "trailblazer/activity/testing"
|
8
7
|
require "trailblazer/developer/render/linear"
|
8
|
+
require "trailblazer/core"
|
9
9
|
|
10
10
|
Minitest::Spec.class_eval do
|
11
|
-
|
12
|
-
|
11
|
+
T = Trailblazer::Activity::Testing
|
12
|
+
include Trailblazer::Activity::Testing::Assertions
|
13
|
+
CU = Trailblazer::Core::Utils
|
14
|
+
|
15
|
+
def assert_equal(asserted, expected, *args)
|
16
|
+
super(expected, asserted, *args)
|
17
|
+
end
|
18
|
+
|
19
|
+
def assert_result(result, variables, outcome: true)
|
20
|
+
assert_equal result.success?, outcome
|
21
|
+
|
22
|
+
# assert_equal result.send(:data).sort_by { |key, _| key.to_s }.to_h.inspect, variables.sort_by { |key, _| key.to_s }.to_h.inspect
|
23
|
+
assert_equal result.send(:data).to_h, variables
|
24
|
+
end
|
13
25
|
end
|
14
26
|
|
15
27
|
# TODO: replace all this with {Activity::Testing.def_steps}
|
data/test/trace_test.rb
CHANGED
@@ -13,38 +13,13 @@ class TraceTest < Minitest::Spec
|
|
13
13
|
step ->(_options, params:, **) { params.any? }, id: "Create.task.params"
|
14
14
|
end
|
15
15
|
|
16
|
-
it "deprecates {result.wtf?} and {Operation.trace}" do
|
17
|
-
output, warning = capture_io do
|
18
|
-
result = Create.trace({a_return: true, params: {}})
|
19
|
-
result.wtf?
|
20
|
-
end
|
21
|
-
line_no = __LINE__ - 2
|
22
|
-
|
23
|
-
assert_equal warning, %([Trailblazer] #{File.realpath(__FILE__)}:#{line_no - 1} Using `Operation.trace` is deprecated and will be removed in {trailblazer-operation-0.11.0}.
|
24
|
-
Please use `TraceTest::Create.wtf?` as documented here: https://trailblazer.to/2.1/docs/trailblazer#trailblazer-developer-wtf-
|
25
|
-
[Trailblazer] #{File.realpath(__FILE__)}:#{line_no} Using `result.wtf?` is deprecated. Please use `TraceTest::Create.wtf?` and have a nice day.
|
26
|
-
)
|
27
|
-
assert_equal output, %(TraceTest::Create
|
28
|
-
|-- Start.default
|
29
|
-
|-- Create.task.a
|
30
|
-
|-- MyNested
|
31
|
-
| |-- Start.default
|
32
|
-
| |-- B.task.b
|
33
|
-
| |-- B.task.e
|
34
|
-
| `-- End.success
|
35
|
-
|-- Create.task.c
|
36
|
-
|-- Create.task.params
|
37
|
-
`-- End.failure
|
38
|
-
)
|
39
|
-
end
|
40
|
-
|
41
16
|
it "allows using low-level Operation::Trace" do
|
42
|
-
result = Trailblazer::
|
17
|
+
stack, result = Trailblazer::Developer::Trace.(
|
43
18
|
Create,
|
44
19
|
{ a_return: true, params: {} },
|
45
20
|
)
|
46
21
|
|
47
|
-
output =
|
22
|
+
output = Trailblazer::Developer::Trace::Present.(stack)
|
48
23
|
|
49
24
|
assert_equal output.gsub(/0x\w+/, "").gsub(/@.+_test/, ""), %{TraceTest::Create
|
50
25
|
|-- Start.default
|
@@ -59,21 +34,6 @@ class TraceTest < Minitest::Spec
|
|
59
34
|
`-- End.failure}
|
60
35
|
end
|
61
36
|
|
62
|
-
it "Operation::trace" do
|
63
|
-
result = Create.trace(params: {x: 1}, a_return: true)
|
64
|
-
assert_equal result.wtf.gsub(/0x\w+/, "").gsub(/@.+_test/, ""), %{TraceTest::Create
|
65
|
-
|-- Start.default
|
66
|
-
|-- Create.task.a
|
67
|
-
|-- MyNested
|
68
|
-
| |-- Start.default
|
69
|
-
| |-- B.task.b
|
70
|
-
| |-- B.task.e
|
71
|
-
| `-- End.success
|
72
|
-
|-- Create.task.c
|
73
|
-
|-- Create.task.params
|
74
|
-
`-- End.success}
|
75
|
-
end
|
76
|
-
|
77
37
|
it "Operation.wtf?" do
|
78
38
|
result = nil
|
79
39
|
output, = capture_io do
|
@@ -95,6 +55,6 @@ class TraceTest < Minitest::Spec
|
|
95
55
|
|
96
56
|
result.success?.must_equal true
|
97
57
|
result[:a_return].must_equal true
|
98
|
-
result[:params]
|
58
|
+
assert_equal CU.inspect(result[:params]), %({:x=>1})
|
99
59
|
end
|
100
60
|
end
|
@@ -17,13 +17,14 @@ 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", ">= 1.2.
|
20
|
+
spec.add_dependency "trailblazer-activity-dsl-linear", ">= 1.2.3", "< 1.3.0"
|
21
21
|
spec.add_dependency "trailblazer-developer", ">= 0.1.0", "< 0.2.0"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler"
|
24
24
|
spec.add_development_dependency "minitest"
|
25
25
|
spec.add_development_dependency "minitest-line"
|
26
26
|
spec.add_development_dependency "rake"
|
27
|
+
spec.add_development_dependency "trailblazer-core-utils"
|
27
28
|
|
28
29
|
spec.required_ruby_version = ">= 2.5.0"
|
29
30
|
end
|
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.11.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trailblazer-activity-dsl-linear
|
@@ -16,20 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.2.
|
19
|
+
version: 1.2.3
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 1.3.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: 1.2.
|
29
|
+
version: 1.2.3
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
32
|
+
version: 1.3.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: trailblazer-developer
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,6 +106,20 @@ dependencies:
|
|
106
106
|
- - ">="
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: trailblazer-core-utils
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
109
123
|
description: Trailblazer's operation object.
|
110
124
|
email:
|
111
125
|
- apotonick@gmail.com
|
@@ -125,16 +139,24 @@ files:
|
|
125
139
|
- lib/trailblazer/operation/public_call.rb
|
126
140
|
- lib/trailblazer/operation/railway.rb
|
127
141
|
- lib/trailblazer/operation/result.rb
|
128
|
-
- lib/trailblazer/operation/trace.rb
|
129
142
|
- lib/trailblazer/operation/version.rb
|
143
|
+
- lib/trailblazer/operation/wtf.rb
|
130
144
|
- test/benchmark/skill_resolver_benchmark.rb
|
131
145
|
- test/call_test.rb
|
132
|
-
- test/callable_test.rb
|
133
146
|
- test/class_dependencies_test.rb
|
147
|
+
- test/docs/autogenerated/activity_basics_test.rb
|
148
|
+
- test/docs/autogenerated/composable_variable_mapping_test.rb
|
149
|
+
- test/docs/autogenerated/fast_track_layout_test.rb
|
150
|
+
- test/docs/autogenerated/mechanics_test.rb
|
151
|
+
- test/docs/autogenerated/sequence_options_test.rb
|
152
|
+
- test/docs/autogenerated/subprocess_test.rb
|
153
|
+
- test/docs/autogenerated/wiring_api_test.rb
|
134
154
|
- test/docs/class_dependencies_test.rb
|
135
|
-
- test/docs/
|
136
|
-
- test/docs/macaroni_test.rb
|
155
|
+
- test/docs/developer_test.rb
|
137
156
|
- test/docs/operation_test.rb
|
157
|
+
- test/docs/public_call_monkeypatching_test.rb
|
158
|
+
- test/docs/result_test.rb
|
159
|
+
- test/docs/step_dsl_test.rb
|
138
160
|
- test/docs/wiring_test.rb
|
139
161
|
- test/fast_track_test.rb
|
140
162
|
- test/gemfiles/Gemfile.ruby-1.9
|
@@ -145,13 +167,9 @@ files:
|
|
145
167
|
- test/introspect_test.rb
|
146
168
|
- test/operation_test.rb
|
147
169
|
- test/result_test.rb
|
148
|
-
- test/skill_test.rb
|
149
170
|
- test/step_test.rb
|
150
171
|
- test/test_helper.rb
|
151
172
|
- test/trace_test.rb
|
152
|
-
- test/wire_test.rb
|
153
|
-
- test/wiring/defaults_test.rb
|
154
|
-
- test/wiring/subprocess_test.rb
|
155
173
|
- trailblazer-operation.gemspec
|
156
174
|
homepage: https://trailblazer.to/2.1/docs/operation.html
|
157
175
|
licenses:
|
@@ -172,19 +190,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
190
|
- !ruby/object:Gem::Version
|
173
191
|
version: '0'
|
174
192
|
requirements: []
|
175
|
-
rubygems_version: 3.
|
193
|
+
rubygems_version: 3.5.22
|
176
194
|
signing_key:
|
177
195
|
specification_version: 4
|
178
196
|
summary: Trailblazer's operation object with railway flow and integrated error handling.
|
179
197
|
test_files:
|
180
198
|
- test/benchmark/skill_resolver_benchmark.rb
|
181
199
|
- test/call_test.rb
|
182
|
-
- test/callable_test.rb
|
183
200
|
- test/class_dependencies_test.rb
|
201
|
+
- test/docs/autogenerated/activity_basics_test.rb
|
202
|
+
- test/docs/autogenerated/composable_variable_mapping_test.rb
|
203
|
+
- test/docs/autogenerated/fast_track_layout_test.rb
|
204
|
+
- test/docs/autogenerated/mechanics_test.rb
|
205
|
+
- test/docs/autogenerated/sequence_options_test.rb
|
206
|
+
- test/docs/autogenerated/subprocess_test.rb
|
207
|
+
- test/docs/autogenerated/wiring_api_test.rb
|
184
208
|
- test/docs/class_dependencies_test.rb
|
185
|
-
- test/docs/
|
186
|
-
- test/docs/macaroni_test.rb
|
209
|
+
- test/docs/developer_test.rb
|
187
210
|
- test/docs/operation_test.rb
|
211
|
+
- test/docs/public_call_monkeypatching_test.rb
|
212
|
+
- test/docs/result_test.rb
|
213
|
+
- test/docs/step_dsl_test.rb
|
188
214
|
- test/docs/wiring_test.rb
|
189
215
|
- test/fast_track_test.rb
|
190
216
|
- test/gemfiles/Gemfile.ruby-1.9
|
@@ -195,10 +221,6 @@ test_files:
|
|
195
221
|
- test/introspect_test.rb
|
196
222
|
- test/operation_test.rb
|
197
223
|
- test/result_test.rb
|
198
|
-
- test/skill_test.rb
|
199
224
|
- test/step_test.rb
|
200
225
|
- test/test_helper.rb
|
201
226
|
- test/trace_test.rb
|
202
|
-
- test/wire_test.rb
|
203
|
-
- test/wiring/defaults_test.rb
|
204
|
-
- test/wiring/subprocess_test.rb
|