trailblazer-operation 0.4.1 → 0.6.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/.rubocop.yml +8 -0
- data/.rubocop_todo.yml +223 -0
- data/.travis.yml +6 -7
- data/CHANGES.md +16 -12
- data/Gemfile +5 -3
- data/README.md +13 -2
- data/Rakefile +2 -2
- data/lib/trailblazer/operation.rb +52 -67
- data/lib/trailblazer/operation/class_dependencies.rb +1 -1
- data/lib/trailblazer/operation/container.rb +14 -0
- data/lib/trailblazer/operation/deprecated_macro.rb +2 -2
- data/lib/trailblazer/operation/public_call.rb +23 -20
- data/lib/trailblazer/operation/railway.rb +2 -3
- data/lib/trailblazer/operation/railway/macaroni.rb +2 -2
- data/lib/trailblazer/operation/result.rb +14 -1
- data/lib/trailblazer/operation/trace.rb +9 -12
- data/lib/trailblazer/operation/version.rb +4 -2
- data/test/benchmark/skill_resolver_benchmark.rb +8 -9
- data/test/call_test.rb +57 -31
- data/test/callable_test.rb +147 -147
- data/test/class_dependencies_test.rb +6 -7
- data/test/docs/doormat_test.rb +13 -12
- data/test/docs/macaroni_test.rb +7 -9
- data/test/docs/operation_test.rb +69 -4
- data/test/docs/wiring_test.rb +85 -153
- data/test/dry_container_test.rb +4 -3
- data/test/fast_track_test.rb +24 -44
- data/test/inheritance_test.rb +13 -12
- data/test/introspect_test.rb +6 -6
- data/test/operation_test.rb +17 -25
- data/test/result_test.rb +4 -4
- data/test/ruby-2.0.0/operation_test.rb +9 -9
- data/test/ruby-2.0.0/step_test.rb +17 -16
- data/test/step_test.rb +55 -50
- data/test/test_helper.rb +7 -13
- data/test/trace_test.rb +27 -27
- data/test/wiring/defaults_test.rb +29 -33
- data/trailblazer-operation.gemspec +9 -7
- metadata +46 -27
- data/lib/trailblazer/operation/heritage.rb +0 -30
- data/lib/trailblazer/operation/inject.rb +0 -36
- data/lib/trailblazer/operation/inspect.rb +0 -79
- data/lib/trailblazer/operation/railway/fast_track.rb +0 -13
- data/lib/trailblazer/operation/railway/normalizer.rb +0 -58
- data/lib/trailblazer/operation/railway/task_builder.rb +0 -37
- data/test/inspect_test.rb +0 -43
- data/test/macro_test.rb +0 -60
- data/test/task_wrap_test.rb +0 -97
data/test/inspect_test.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
|
4
|
-
class InspectTest < Minitest::Spec
|
5
|
-
# Test: #to_table
|
6
|
-
class Create < Trailblazer::Operation
|
7
|
-
step :decide!
|
8
|
-
pass :wasnt_ok!
|
9
|
-
pass :was_ok!
|
10
|
-
fail :return_true!
|
11
|
-
fail :return_false!
|
12
|
-
step :finalize!
|
13
|
-
end
|
14
|
-
|
15
|
-
#---
|
16
|
-
#- to_table
|
17
|
-
|
18
|
-
# pp Create.instance_variable_get(:@builder)
|
19
|
-
|
20
|
-
it do
|
21
|
-
Trailblazer::Operation.introspect(Create).must_equal %{[>decide!,>>wasnt_ok!,>>was_ok!,<<return_true!,<<return_false!,>finalize!]}
|
22
|
-
end
|
23
|
-
|
24
|
-
it do
|
25
|
-
Trailblazer::Operation::Inspect.call(Create, style: :rows).must_equal %{
|
26
|
-
0 ==============================>decide!
|
27
|
-
1 ===========================>>wasnt_ok!
|
28
|
-
2 =============================>>was_ok!
|
29
|
-
3 <<return_true!========================
|
30
|
-
4 <<return_false!=======================
|
31
|
-
5 ============================>finalize!}
|
32
|
-
end
|
33
|
-
|
34
|
-
describe "step with only one output (happens with Nested)" do
|
35
|
-
class Present < Trailblazer::Operation
|
36
|
-
pass :ok!, outputs: {:success => Trailblazer::Activity::Output("signal", :success)}
|
37
|
-
end
|
38
|
-
|
39
|
-
it do
|
40
|
-
Trailblazer::Operation.introspect(Present).must_equal %{[>>ok!]}
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/test/macro_test.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
#- test
|
3
|
-
# macro [ task, {name} ]
|
4
|
-
# macro [ task, {name}, { alteration: } ] # see task_wrap_test.rb
|
5
|
-
# macro [ task, {name}, { alteration: }, {task_outputs} ] # for eg. nested
|
6
|
-
|
7
|
-
class MacroTest < Minitest::Spec
|
8
|
-
MacroB = ->(( options, *args ), **) do
|
9
|
-
options[:B] = true # we were here!
|
10
|
-
|
11
|
-
[ options[:MacroB_return], [ options, *args ] ]
|
12
|
-
end
|
13
|
-
|
14
|
-
it "raises exception when macro doesn't provide :id" do
|
15
|
-
assert_raises do
|
16
|
-
|
17
|
-
Class.new(Trailblazer::Operation) do
|
18
|
-
step( task: "<some macro>" )
|
19
|
-
end
|
20
|
-
|
21
|
-
end.message.must_equal %{No :id given for <some macro>}
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
class Create < Trailblazer::Operation
|
26
|
-
step :a
|
27
|
-
step task: MacroB, id: :MacroB, outputs: { :success => Activity::Output("Allgood", :success), :failure => Activity::Output("Fail!", :failure), :pass_fast => Activity::Output("Winning", :pass_fast) }
|
28
|
-
step :c
|
29
|
-
|
30
|
-
def a(options, **); options[:a] = true end
|
31
|
-
def c(options, **); options[:c] = true end
|
32
|
-
end
|
33
|
-
|
34
|
-
# MacroB returns Allgood and is wired to the :success edge (right track).
|
35
|
-
it { Create.( {}, MacroB_return: "Allgood" ).inspect(:a, :B, :c).must_equal %{<Result:true [true, true, true] >} }
|
36
|
-
# MacroB returns Fail! and is wired to the :failure edge (left track).
|
37
|
-
it { Create.( {}, MacroB_return: "Fail!" ).inspect(:a, :B, :c).must_equal %{<Result:false [true, true, nil] >} }
|
38
|
-
# MacroB returns Winning and is wired to the :pass_fast edge.
|
39
|
-
it { Create.( {}, MacroB_return: "Winning" ).inspect(:a, :B, :c).must_equal %{<Result:true [true, true, nil] >} }
|
40
|
-
|
41
|
-
#- user overrides :plus_poles
|
42
|
-
class Update < Trailblazer::Operation
|
43
|
-
macro = { task: MacroB, id: :MacroB, outputs: { :success => Activity::Output("Allgood", :success), :failure => Activity::Output("Fail!", :failure), :pass_fast => Activity::Output("Winning", :pass_fast) } }
|
44
|
-
|
45
|
-
step :a
|
46
|
-
step macro, outputs: { :success => Activity::Output("Fail!", :success), :fail_fast => Activity::Output("Winning", :fail_fast), :failure => Activity::Output("Allgood", :failure) }
|
47
|
-
# plus_poles: Test.plus_poles_for("Allgood" => :failure, "Fail!" => :success, "Winning" => :fail_fast)
|
48
|
-
step :c
|
49
|
-
|
50
|
-
def a(options, **); options[:a] = true end
|
51
|
-
def c(options, **); options[:c] = true end
|
52
|
-
end
|
53
|
-
|
54
|
-
# MacroB returns Allgood and is wired to the :failure edge.
|
55
|
-
it { Update.( {}, MacroB_return: "Allgood" ).inspect(:a, :B, :c).must_equal %{<Result:false [true, true, nil] >} }
|
56
|
-
# MacroB returns Fail! and is wired to the :success edge.
|
57
|
-
it { Update.( {}, MacroB_return: "Fail!" ).inspect(:a, :B, :c).must_equal %{<Result:true [true, true, true] >} }
|
58
|
-
# MacroB returns Winning and is wired to the :fail_fast edge.
|
59
|
-
it { Update.( {}, MacroB_return: "Winning" ).inspect(:a, :B, :c).must_equal %{<Result:false [true, true, nil] >} }
|
60
|
-
end
|
data/test/task_wrap_test.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
require "trailblazer/operation/inject" # an optional feature.com.
|
4
|
-
|
5
|
-
class TaskWrapTest < Minitest::Spec
|
6
|
-
MyMacro = ->( (options, *args), *) do
|
7
|
-
options["MyMacro.contract"] = options[:contract]
|
8
|
-
[ Trailblazer::Activity::Right, [options, *args] ]
|
9
|
-
end
|
10
|
-
|
11
|
-
class Create < Trailblazer::Operation
|
12
|
-
step :model!
|
13
|
-
# step [ MyMacro, { name: "MyMacro" }, { dependencies: { "contract" => :external_maybe } }]
|
14
|
-
step(
|
15
|
-
task: MyMacro,
|
16
|
-
id: "MyMacro",
|
17
|
-
|
18
|
-
Trailblazer::Activity::DSL::Extension.new(
|
19
|
-
Trailblazer::Activity::TaskWrap::Merge.new(
|
20
|
-
Module.new do
|
21
|
-
extend Trailblazer::Activity::Path::Plan()
|
22
|
-
|
23
|
-
task Trailblazer::Operation::Wrap::Inject::ReverseMergeDefaults.new( contract: "MyDefaultContract" ),
|
24
|
-
id: "inject.my_default",
|
25
|
-
before: "task_wrap.call_task"
|
26
|
-
end
|
27
|
-
)
|
28
|
-
) => true
|
29
|
-
)
|
30
|
-
|
31
|
-
def model!(options, **)
|
32
|
-
options["options.contract"] = options[:contract]
|
33
|
-
true
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# it { Create.call("adsf", options={}, {}).inspect("MyMacro.contract", "options.contract").must_equal %{} }
|
38
|
-
|
39
|
-
def inspect_hash(hash, *keys)
|
40
|
-
Hash[ keys.collect { |key| [key, hash[key]] } ].inspect
|
41
|
-
end
|
42
|
-
|
43
|
-
#-
|
44
|
-
# default gets set by Injection.
|
45
|
-
it do
|
46
|
-
result = Create.call( {} )
|
47
|
-
|
48
|
-
inspect_hash(result, "options.contract", :contract, "MyMacro.contract").
|
49
|
-
must_equal %{{"options.contract"=>nil, :contract=>"MyDefaultContract", "MyMacro.contract"=>"MyDefaultContract"}}
|
50
|
-
end
|
51
|
-
|
52
|
-
# injected from outside, Injection skips.
|
53
|
-
it do
|
54
|
-
result = Create.call( { :contract=>"MyExternalContract" } )
|
55
|
-
|
56
|
-
inspect_hash(result, "options.contract", :contract, "MyMacro.contract").
|
57
|
-
must_equal %{{"options.contract"=>"MyExternalContract", :contract=>"MyExternalContract", "MyMacro.contract"=>"MyExternalContract"}}
|
58
|
-
end
|
59
|
-
|
60
|
-
#- Nested task_wraps should not override the outer.
|
61
|
-
AnotherMacro = ->( (options, *args), *) do
|
62
|
-
options["AnotherMacro.another_contract"] = options[:another_contract]
|
63
|
-
[ Trailblazer::Activity::Right, [options, *args] ]
|
64
|
-
end
|
65
|
-
|
66
|
-
class Update < Trailblazer::Operation
|
67
|
-
step(
|
68
|
-
task: ->( (options, *args), circuit_options ) {
|
69
|
-
_d, *o = Create.call( [ options, *args ], circuit_options )
|
70
|
-
|
71
|
-
[ Trailblazer::Activity::Right, *o ]
|
72
|
-
},
|
73
|
-
id: "Create"
|
74
|
-
)
|
75
|
-
step(
|
76
|
-
task: AnotherMacro,
|
77
|
-
id: "AnotherMacro",
|
78
|
-
Trailblazer::Activity::DSL::Extension.new(
|
79
|
-
Trailblazer::Activity::TaskWrap::Merge.new(
|
80
|
-
Module.new do
|
81
|
-
extend Trailblazer::Activity::Path::Plan()
|
82
|
-
|
83
|
-
task Trailblazer::Operation::Wrap::Inject::ReverseMergeDefaults.new( another_contract: "AnotherDefaultContract" ), id: "inject.my_default",
|
84
|
-
before: "task_wrap.call_task"
|
85
|
-
end
|
86
|
-
)
|
87
|
-
) => true,
|
88
|
-
)
|
89
|
-
end
|
90
|
-
|
91
|
-
it do
|
92
|
-
result = Update.call( {} )
|
93
|
-
|
94
|
-
inspect_hash(result, "options.contract", :contract, "MyMacro.contract", "AnotherMacro.another_contract").
|
95
|
-
must_equal %{{"options.contract"=>nil, :contract=>"MyDefaultContract", "MyMacro.contract"=>"MyDefaultContract", "AnotherMacro.another_contract"=>"AnotherDefaultContract"}}
|
96
|
-
end
|
97
|
-
end
|