trailblazer-operation 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +8 -0
  3. data/.rubocop_todo.yml +223 -0
  4. data/.travis.yml +6 -7
  5. data/CHANGES.md +2 -14
  6. data/Gemfile +4 -2
  7. data/README.md +13 -2
  8. data/Rakefile +2 -2
  9. data/lib/trailblazer/operation.rb +53 -67
  10. data/lib/trailblazer/operation/class_dependencies.rb +1 -1
  11. data/lib/trailblazer/operation/container.rb +14 -0
  12. data/lib/trailblazer/operation/deprecated_macro.rb +2 -2
  13. data/lib/trailblazer/operation/inspect.rb +17 -27
  14. data/lib/trailblazer/operation/public_call.rb +16 -18
  15. data/lib/trailblazer/operation/railway.rb +2 -3
  16. data/lib/trailblazer/operation/railway/macaroni.rb +2 -2
  17. data/lib/trailblazer/operation/result.rb +14 -1
  18. data/lib/trailblazer/operation/trace.rb +5 -8
  19. data/lib/trailblazer/operation/version.rb +4 -2
  20. data/test/benchmark/skill_resolver_benchmark.rb +8 -9
  21. data/test/call_test.rb +56 -30
  22. data/test/callable_test.rb +147 -147
  23. data/test/class_dependencies_test.rb +6 -7
  24. data/test/docs/doormat_test.rb +13 -12
  25. data/test/docs/macaroni_test.rb +7 -9
  26. data/test/docs/operation_test.rb +69 -4
  27. data/test/docs/wiring_test.rb +98 -53
  28. data/test/dry_container_test.rb +4 -3
  29. data/test/fast_track_test.rb +24 -44
  30. data/test/inheritance_test.rb +13 -12
  31. data/test/inspect_test.rb +6 -7
  32. data/test/introspect_test.rb +6 -6
  33. data/test/operation_test.rb +17 -25
  34. data/test/result_test.rb +4 -4
  35. data/test/ruby-2.0.0/operation_test.rb +9 -9
  36. data/test/ruby-2.0.0/step_test.rb +17 -16
  37. data/test/step_test.rb +47 -42
  38. data/test/test_helper.rb +6 -13
  39. data/test/trace_test.rb +26 -26
  40. data/test/wiring/defaults_test.rb +29 -33
  41. data/trailblazer-operation.gemspec +7 -6
  42. metadata +26 -18
  43. data/lib/trailblazer/operation/heritage.rb +0 -30
  44. data/lib/trailblazer/operation/inject.rb +0 -36
  45. data/lib/trailblazer/operation/railway/fast_track.rb +0 -13
  46. data/lib/trailblazer/operation/railway/normalizer.rb +0 -58
  47. data/lib/trailblazer/operation/railway/task_builder.rb +0 -37
  48. data/test/macro_test.rb +0 -60
  49. data/test/task_wrap_test.rb +0 -97
@@ -1,16 +1,15 @@
1
1
  require "test_helper"
2
2
 
3
3
  class ClassDependenciesTest < Minitest::Spec
4
-
5
4
  #- Operation[] and Operation[]=
6
5
 
7
- class Index < Trailblazer::Operation
8
- extend ClassDependencies
6
+ # class Index < Trailblazer::Operation
7
+ # extend ClassDependencies
9
8
 
10
- self["model.class"] = Module
9
+ # self["model.class"] = Module
11
10
 
12
- step ->(options, **) { options["a"] = options["model.class"] }
13
- end
11
+ # step ->(options, **) { options["a"] = options["model.class"] }
12
+ # end
14
13
 
15
- it { Index.({}).inspect("a", "model.class").must_equal %{<Result:true [Module, Module] >} }
14
+ it { skip "https://trello.com/c/t8bUJlqb/25-op-class-dependencies"; Index.({}).inspect("a", "model.class").must_equal %{<Result:true [Module, Module] >} }
16
15
  end
@@ -5,7 +5,7 @@ class TemplateWithGroupTest < Minitest::Spec
5
5
 
6
6
  #:template
7
7
  class Memo::Operation < Trailblazer::Operation
8
- step :log_call, group: :start
8
+ step :log_call, group: :start
9
9
  step :log_success, group: :end, before: "End.success"
10
10
  fail :log_errors, group: :end, before: "End.failure"
11
11
  #~tmethods
@@ -49,8 +49,10 @@ class TemplateWithGroupTest < Minitest::Spec
49
49
  #:template-user end
50
50
 
51
51
  # it { pp F['__sequence__'].to_a }
52
- it { Memo::Create.(params: {}, "b_return" => false,
53
- ).inspect("row").must_equal %{<Result:true [[:a, :l, :b, :c, :z]] >} }
52
+ it {
53
+ skip
54
+ Memo::Create.(params: {}, "b_return" => false).inspect("row").must_equal %{<Result:true [[:a, :l, :b, :c, :z]] >}
55
+ }
54
56
  end
55
57
 
56
58
  class DoormatWithGroupTest < Minitest::Spec
@@ -59,12 +61,12 @@ class DoormatWithGroupTest < Minitest::Spec
59
61
  #:doormat-group
60
62
  class Memo::Create < Trailblazer::Operation
61
63
  step :create_model
62
- step :log_success, group: :end, before: "End.success"
64
+ step :log_success, group: :end, before: "End.success"
63
65
 
64
66
  step :validate
65
67
  step :save
66
68
 
67
- fail :log_errors, group: :end, before: "End.failure"
69
+ fail :log_errors, group: :end, before: "End.failure"
68
70
  #~methods
69
71
  def create_model(options, **)
70
72
  options["row"] = [:a]
@@ -93,8 +95,10 @@ class DoormatWithGroupTest < Minitest::Spec
93
95
  #:doormat-group end
94
96
 
95
97
  # it { pp F['__sequence__'].to_a }
96
- it { Memo::Create.(params: {}, "b_return" => false,
97
- ).inspect("row").must_equal %{<Result:true [[:a, :b, :c, :z]] >} }
98
+ it {
99
+ skip
100
+ Memo::Create.(params: {}, "b_return" => false).inspect("row").must_equal %{<Result:true [[:a, :b, :c, :z]] >}
101
+ }
98
102
  end
99
103
 
100
104
  class DoormatStepDocsTest < Minitest::Spec
@@ -137,8 +141,7 @@ class DoormatStepDocsTest < Minitest::Spec
137
141
  #:doormat-before end
138
142
 
139
143
  # it { pp F['__sequence__'].to_a }
140
- it { Memo::Create.(params: {}, "b_return" => false,
141
- ).inspect("row").must_equal %{<Result:true [[:a, :b, :c, :z]] >} }
144
+ it { Memo::Create.(params: {}, "b_return" => false).inspect("row").must_equal %{<Result:true [[:a, :b, :c, :z]] >} }
142
145
  end
143
146
 
144
147
  class DoormatInheritanceTest < Minitest::Spec
@@ -183,7 +186,5 @@ class DoormatInheritanceTest < Minitest::Spec
183
186
  #:doormat-before-inheritance-sub end
184
187
 
185
188
  # it { pp F['__sequence__'].to_a }
186
- it { Create.({}, "b_return" => false,
187
- ).inspect("row").must_equal %{<Result:true [[:a, :b, :c, :z]] >} }
189
+ it { Create.("b_return" => false).inspect("row").must_equal %{<Result:true [[:a, :b, :c, :z]] >} }
188
190
  end
189
-
@@ -8,19 +8,17 @@ class MacaroniTaskBuilderTest < Minitest::Spec
8
8
  end
9
9
 
10
10
  #:create
11
- class Memo::Create < Trailblazer::Operation
11
+ class Memo::Create < Trailblazer::Operation(step_interface_builder: Trailblazer::Operation::Railway::KwSignature)
12
12
  #~ign
13
- Normalizer, _ = Trailblazer::Activity::Magnetic::Normalizer.build( task_builder: Railway::KwSignature, pipeline: Railway::Normalizer::Pipeline )
14
-
15
- step :create_model, normalizer: Normalizer
16
- step :save, normalizer: Normalizer
13
+ step :create_model
14
+ step :save
17
15
  #~ign end
18
16
  #~methods
19
- def create_model( params:, options:, ** )
20
- options[:model] = Memo.new( title: params[:title] )
17
+ def create_model(params:, options:, **)
18
+ options[:model] = Memo.new(title: params[:title])
21
19
  end
22
20
 
23
- def save( model:, ** )
21
+ def save(model:, **)
24
22
  model.save
25
23
  end
26
24
  #~methods end
@@ -28,6 +26,6 @@ class MacaroniTaskBuilderTest < Minitest::Spec
28
26
  #:create end
29
27
 
30
28
  it "allows optional macaroni call style" do
31
- Memo::Create.( params: { title: "Wow!" } ).inspect(:model).must_equal %{<Result:true [#<struct MacaroniTaskBuilderTest::Memo title=\"!woW\">] >}
29
+ Memo::Create.(params: {title: "Wow!"}).inspect(:model).must_equal %{<Result:true [#<struct MacaroniTaskBuilderTest::Memo title=\"!woW\">] >}
32
30
  end
33
31
  end
@@ -1,23 +1,88 @@
1
1
  require "test_helper"
2
2
 
3
3
  class DocsActivityTest < Minitest::Spec
4
- Memo = Struct.new(:body)
4
+ Memo = Struct.new(:text)
5
5
 
6
+ #:memo
6
7
  class Memo::Create < Trailblazer::Operation
7
8
  step :create_model
9
+
8
10
  def create_model(ctx, params:, **)
9
- ctx[:model] = Memo.new(params[:body])
11
+ ctx[:model] = Memo.new(params[:text])
10
12
  end
11
13
  end
14
+ #:memo end
15
+
16
+ it "what" do
17
+ #:call-circuit
18
+ ctx = {params: {text: "Enjoy an IPA"}}
19
+ signal, (ctx, _) = Memo::Create.([ctx, {}], {})
20
+
21
+ puts signal #=> #<Trailblazer::Activity::Railway::End::Success semantic=:success>
22
+ #:call-circuit end
23
+
24
+ signal.inspect.must_equal %{#<Trailblazer::Activity::Railway::End::Success semantic=:success>}
25
+ end
12
26
 
13
27
  #:describe
14
28
  describe Memo::Create do
15
29
  it "creates a sane Memo instance" do
16
- result = Memo::Create.( params: { body: "Enjoy an IPA" } )
30
+ #:call-public
31
+ result = Memo::Create.(params: {text: "Enjoy an IPA"})
32
+
33
+ puts result.success? #=> true
34
+
35
+ model = result[:model]
36
+ puts model.text #=> "Enjoy an IPA"
37
+ #:call-public end
17
38
 
18
39
  result.success?.must_equal true
19
- result[:model].body.must_equal "Enjoy an IPA"
40
+ result[:model].text.must_equal "Enjoy an IPA"
20
41
  end
21
42
  end
22
43
  #:describe end
44
+
45
+ it do
46
+ module J
47
+ Memo = Struct.new(:id)
48
+
49
+ #:op
50
+ class Create < Trailblazer::Operation
51
+ #~flow
52
+ step :validate, fast_track: true
53
+ fail :log_error
54
+ step :create
55
+ #~flow end
56
+
57
+ #~mod
58
+ def create(ctx, **)
59
+ ctx[:model] = Memo.new
60
+ end
61
+ #~rest
62
+ def validate(ctx, params:, **)
63
+ ctx[:input] # true/false
64
+ true
65
+ end
66
+
67
+ def log_error(ctx, params:, **)
68
+ logger.error("wrong params: #{params.inspect}")
69
+ true
70
+ end
71
+ #~rest
72
+ #~mod end
73
+ end
74
+ #:op end
75
+ end
76
+
77
+ ctx = {params: {text: "Hydrate!"}}
78
+ result = J::Create.(ctx)
79
+
80
+ result.success?.must_equal true
81
+ # ctx.inspect.must_equal %{{:params=>{:text=>\"Hydrate!\"}, :create=>true}}
82
+
83
+ #:op-result
84
+ result.success? #=> true
85
+ result[:model] #=> #<Memo ..>
86
+ #:op-result end
87
+ end
23
88
  end
@@ -2,7 +2,7 @@ require "test_helper"
2
2
 
3
3
  class WiringDocsTest < Minitest::Spec
4
4
  class Memo
5
- def initialize(options={})
5
+ def initialize(_options = {})
6
6
  @options
7
7
  end
8
8
 
@@ -16,6 +16,8 @@ class WiringDocsTest < Minitest::Spec
16
16
  # _"Everything's a memo."_
17
17
 
18
18
  module Step
19
+ Memo = Class.new(WiringDocsTest::Memo)
20
+
19
21
  #:memo-op
20
22
  class Memo::Create < Trailblazer::Operation
21
23
  step :create_model
@@ -28,34 +30,41 @@ class WiringDocsTest < Minitest::Spec
28
30
  #~memo-methods
29
31
  def create_model(options, **)
30
32
  end
33
+
31
34
  def validate(options, **)
32
35
  end
36
+
33
37
  def assign_errors(options, **)
34
38
  end
39
+
35
40
  def index(options, **)
36
41
  end
42
+
37
43
  def uuid(options, **)
38
44
  end
45
+
39
46
  def save(options, **)
40
47
  end
48
+
41
49
  def log_errors(options, **)
42
50
  end
43
51
  #~memo-methods end
44
52
  end
45
53
  #:memo-op end
46
-
47
54
  end
48
55
 
49
56
  it do
50
- result = Memo::Create.( text: "Punk is not dead." )
57
+ Step::Memo::Create.(text: "Punk is not dead.")
51
58
  end
52
59
 
53
60
 
54
61
  module PassFast
62
+ Memo = Class.new(WiringDocsTest::Memo)
63
+
55
64
  #:pf-op
56
65
  class Memo::Create < Trailblazer::Operation
57
66
  step :create_model
58
- step :validate, pass_fast: true
67
+ step :validate, pass_fast: true
59
68
  fail :assign_errors
60
69
  step :index
61
70
  pass :uuid
@@ -64,25 +73,32 @@ class WiringDocsTest < Minitest::Spec
64
73
  #~pf-methods
65
74
  def create_model(options, **)
66
75
  end
76
+
67
77
  def validate(options, **)
68
78
  end
79
+
69
80
  def assign_errors(options, **)
70
81
  end
82
+
71
83
  def index(options, **)
72
84
  end
85
+
73
86
  def uuid(options, **)
74
87
  end
88
+
75
89
  def save(options, **)
76
90
  end
91
+
77
92
  def log_errors(options, **)
78
93
  end
79
94
  #~pf-methods end
80
95
  end
81
96
  #:pf-op end
82
-
83
97
  end
84
98
 
85
99
  module FailFast
100
+ Memo = Class.new(WiringDocsTest::Memo)
101
+
86
102
  #:ff-op
87
103
  class Memo::Create < Trailblazer::Operation
88
104
  step :create_model
@@ -95,25 +111,33 @@ class WiringDocsTest < Minitest::Spec
95
111
  #~ff-methods
96
112
  def create_model(options, **)
97
113
  end
114
+
98
115
  def validate(options, **)
99
116
  end
117
+
100
118
  def assign_errors(options, **)
101
119
  end
120
+
102
121
  def index(options, **)
103
122
  end
123
+
104
124
  def uuid(options, **)
105
125
  end
126
+
106
127
  def save(options, **)
107
128
  end
129
+
108
130
  def log_errors(options, **)
109
131
  end
110
132
  #~ff-methods end
111
133
  end
112
134
  #:ff-op end
113
-
114
135
  end
115
136
 
137
+ #rubocop:disable Lint/DuplicateMethods
116
138
  module FailFast
139
+ Memo = Class.new(WiringDocsTest::Memo)
140
+
117
141
  #:ff-step-op
118
142
  class Memo::Create < Trailblazer::Operation
119
143
  step :create_model
@@ -126,32 +150,39 @@ class WiringDocsTest < Minitest::Spec
126
150
  #~ff-step-methods
127
151
  def create_model(options, **)
128
152
  end
153
+
129
154
  def validate(options, **)
130
155
  end
156
+
131
157
  def assign_errors(options, **)
132
158
  end
159
+
133
160
  def index(options, **)
134
161
  end
162
+
135
163
  def uuid(options, **)
136
164
  end
165
+
137
166
  def save(options, **)
138
167
  end
168
+
139
169
  def log_errors(options, **)
140
170
  end
141
171
  #~ff-step-methods end
142
172
  end
143
173
  #:ff-step-op end
144
174
  end
175
+ #rubocop:enable Lint/DuplicateMethods
145
176
 
146
177
  =begin
147
178
  describe all options :pass_fast, :fast_track and emiting signals directly, like Left.
148
179
  =end
149
180
  module FastTrack
150
- class Memo < WiringDocsTest::Memo; end
181
+ Memo = Class.new(WiringDocsTest::Memo)
151
182
 
152
183
  #:ft-step-op
153
184
  class Memo::Create < Trailblazer::Operation
154
- step :create_model, fast_track: true
185
+ step :create_model, fast_track: true
155
186
  step :validate
156
187
  fail :assign_errors, fast_track: true
157
188
  step :index
@@ -160,34 +191,40 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
160
191
  fail :log_errors
161
192
  #~ft-step-methods
162
193
  #:ft-create
163
- def create_model(options, create_empty_model:false, **)
194
+ def create_model(options, create_empty_model: false, **)
164
195
  options[:model] = Memo.new
165
196
  create_empty_model ? Railway.pass_fast! : true
166
197
  end
198
+
167
199
  #:ft-create end
168
200
  #:signal-validate
169
- def validate(options, params: {}, **)
201
+ def validate(_options, params: {}, **)
170
202
  if params[:text].nil?
171
203
  Trailblazer::Activity::Left #=> left track, failure
172
204
  else
173
205
  Trailblazer::Activity::Right #=> right track, success
174
206
  end
175
207
  end
208
+
176
209
  #:signal-validate end
177
210
  def assign_errors(options, model:, **)
178
211
  options[:errors] = "Something went wrong!"
179
212
 
180
213
  model.id.nil? ? Railway.fail_fast! : false
181
214
  end
182
- def index(options, model:, **)
215
+
216
+ def index(_options, *)
183
217
  true
184
218
  end
185
- def uuid(options, **)
219
+
220
+ def uuid(_options, **)
186
221
  true
187
222
  end
188
- def save(options, model:, **)
223
+
224
+ def save(_options, model:, **)
189
225
  model.id = 1
190
226
  end
227
+
191
228
  def log_errors(options, **)
192
229
  end
193
230
  #~ft-step-methods end
@@ -196,7 +233,7 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
196
233
 
197
234
  class Memo::Create2 < Memo::Create
198
235
  #:signalhelper-validate
199
- def validate(options, params: {}, **)
236
+ def validate(_options, params: {}, **)
200
237
  if params[:text].nil?
201
238
  Railway.fail! #=> left track, failure
202
239
  else
@@ -210,7 +247,7 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
210
247
  it "runs #create_model, only" do
211
248
  Memo = FastTrack::Memo
212
249
  #:ft-call
213
- result = Memo::Create.( create_empty_model: true )
250
+ result = Memo::Create.(create_empty_model: true)
214
251
  puts result.success? #=> true
215
252
  puts result[:model].inspect #=> #<Memo text=nil>
216
253
  #:ft-call end
@@ -222,7 +259,7 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
222
259
  it "fast-tracks in #assign_errors" do
223
260
  Memo = FastTrack::Memo
224
261
  #:ft-call-err
225
- result = Memo::Create.( {} )
262
+ result = Memo::Create.({})
226
263
  puts result.success? #=> false
227
264
  puts result[:model].inspect #=> #<Memo text=nil>
228
265
  puts result[:errors].inspect #=> "Something went wrong!"
@@ -235,7 +272,7 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
235
272
 
236
273
  it "goes till #save by emitting signals directly" do
237
274
  Memo = FastTrack::Memo
238
- result = Memo::Create.( params: { text: "Punk is not dead!" } )
275
+ result = Memo::Create.(params: {text: "Punk is not dead!"})
239
276
  result.success?.must_equal true
240
277
  result[:model].id.must_equal 1
241
278
  result[:errors].must_be_nil
@@ -243,7 +280,7 @@ describe all options :pass_fast, :fast_track and emiting signals directly, like
243
280
 
244
281
  it "goes till #save by using signal helper" do
245
282
  Memo = FastTrack::Memo
246
- result = Memo::Create2.( params: { text: "Punk is not dead!" } )
283
+ result = Memo::Create2.(params: {text: "Punk is not dead!"})
247
284
  result.success?.must_equal true
248
285
  result[:model].id.must_equal 1
249
286
  result[:errors].must_be_nil
@@ -255,7 +292,7 @@ end
255
292
  =end
256
293
  class WiringsDocSeqOptionsTest < Minitest::Spec
257
294
  module Id
258
- class Memo < WiringDocsTest::Memo; end
295
+ Memo = Class.new(WiringDocsTest::Memo)
259
296
 
260
297
  #:id
261
298
  class Memo::Create < Trailblazer::Operation
@@ -265,8 +302,10 @@ class WiringsDocSeqOptionsTest < Minitest::Spec
265
302
  #~id-methods
266
303
  def create_model(options, **)
267
304
  end
305
+
268
306
  def validate(options, **)
269
307
  end
308
+
270
309
  def save(options, **)
271
310
  end
272
311
  #~id-methods end
@@ -313,51 +352,51 @@ class WiringsDocSeqOptionsTest < Minitest::Spec
313
352
  it ":id shows up in introspect" do
314
353
  Memo = Id::Memo
315
354
  #:id-inspect
316
- Trailblazer::Operation.introspect( Memo::Create )
355
+ Trailblazer::Operation.introspect(Memo::Create)
317
356
  #=> [>create_memo,>validate_params,>save]
318
357
  #:id-inspect end
319
358
 
320
- Trailblazer::Operation.introspect( Memo::Create ).must_equal %{[>create_memo,>validate_params,>save]}
359
+ Trailblazer::Operation.introspect(Memo::Create).must_equal %{[>create_memo,>validate_params,>save]}
321
360
  end
322
361
 
323
362
  it ":delete removes step" do
324
363
  Memo = Id::Memo
325
364
  #:delete-inspect
326
- Trailblazer::Operation.introspect( Memo::Create::Admin )
365
+ Trailblazer::Operation.introspect(Memo::Create::Admin)
327
366
  #=> [>create_model,>save]
328
367
  #:delete-inspect end
329
368
 
330
- Trailblazer::Operation.introspect( Memo::Create::Admin ).must_equal %{[>create_memo,>save]}
369
+ Trailblazer::Operation.introspect(Memo::Create::Admin).must_equal %{[>create_memo,>save]}
331
370
  end
332
371
 
333
372
  it ":before inserts" do
334
373
  Memo = Id::Memo
335
374
  #:before-inspect
336
- Trailblazer::Operation.introspect( Memo::Create::Authorized )
375
+ Trailblazer::Operation.introspect(Memo::Create::Authorized)
337
376
  #=> [>create_model,>save]
338
377
  #:before-inspect end
339
378
 
340
- Trailblazer::Operation.introspect( Memo::Create::Authorized ).must_equal %{[>policy,>create_memo,>validate_params,>save]}
379
+ Trailblazer::Operation.introspect(Memo::Create::Authorized).must_equal %{[>policy,>create_memo,>validate_params,>save]}
341
380
  end
342
381
 
343
382
  it ":after inserts" do
344
383
  Memo = Id::Memo
345
384
  #:after-inspect
346
- Trailblazer::Operation.introspect( Memo::Create::Logging )
385
+ Trailblazer::Operation.introspect(Memo::Create::Logging)
347
386
  #=> [>create_memo,>validate_params,>logger,>save]
348
387
  #:after-inspect end
349
388
 
350
- Trailblazer::Operation.introspect( Memo::Create::Logging ).must_equal %{[>create_memo,>validate_params,>logger,>save]}
389
+ Trailblazer::Operation.introspect(Memo::Create::Logging).must_equal %{[>create_memo,>validate_params,>logger,>save]}
351
390
  end
352
391
 
353
392
  it ":replace inserts" do
354
393
  Memo = Id::Memo
355
394
  #:replace-inspect
356
- Trailblazer::Operation.introspect( Memo::Update )
395
+ Trailblazer::Operation.introspect(Memo::Update)
357
396
  #=> [>update_memo,>validate_params,>save]
358
397
  #:replace-inspect end
359
398
 
360
- Trailblazer::Operation.introspect( Memo::Update ).must_equal %{[>update_memo,>validate_params,>save]}
399
+ Trailblazer::Operation.introspect(Memo::Update).must_equal %{[>update_memo,>validate_params,>save]}
361
400
  end
362
401
  end
363
402
 
@@ -396,27 +435,27 @@ class WiringsDocRecoverTest < Minitest::Spec
396
435
  let(:my_image) { "beautiful landscape" }
397
436
 
398
437
  it "works for S3" do
399
- result = Memo::Upload.( image: my_image, s3: true )
438
+ result = Memo::Upload.(image: my_image, s3: true)
400
439
 
401
- [ result.success?, result[:s3], result[:azure], result[:b2], result[:problem] ].must_equal [ true, true, nil, nil, nil ]
440
+ [result.success?, result[:s3], result[:azure], result[:b2], result[:problem]].must_equal [true, true, nil, nil, nil]
402
441
  end
403
442
 
404
443
  it "works for Azure" do
405
- result = Memo::Upload.( image: my_image, azure: true, s3: false )
444
+ result = Memo::Upload.(image: my_image, azure: true, s3: false)
406
445
 
407
- [ result.success?, result[:s3], result[:azure], result[:b2], result[:problem] ].must_equal [ true, false, true, nil, nil ]
446
+ [result.success?, result[:s3], result[:azure], result[:b2], result[:problem]].must_equal [true, false, true, nil, nil]
408
447
  end
409
448
 
410
449
  it "works for B2" do
411
- result = Memo::Upload.( image: my_image, b2: true, azure: false, s3: false )
450
+ result = Memo::Upload.(image: my_image, b2: true, azure: false, s3: false)
412
451
 
413
- [ result.success?, result[:s3], result[:azure], result[:b2], result[:problem] ].must_equal [ true, false, false, true, nil ]
452
+ [result.success?, result[:s3], result[:azure], result[:b2], result[:problem]].must_equal [true, false, false, true, nil]
414
453
  end
415
454
 
416
455
  it "fails for all" do
417
- result = Memo::Upload.( image: my_image, b2: false, azure: false, s3: false )
456
+ result = Memo::Upload.(image: my_image, b2: false, azure: false, s3: false)
418
457
 
419
- [ result.success?, result[:s3], result[:azure], result[:b2], result[:problem] ].must_equal [ false, false, false, false, "All uploads failed." ]
458
+ [result.success?, result[:s3], result[:azure], result[:b2], result[:problem]].must_equal [false, false, false, false, "All uploads failed."]
420
459
  end
421
460
  end
422
461
 
@@ -425,11 +464,11 @@ class WiringsDocCustomConnectionTest < Minitest::Spec
425
464
 
426
465
  #:target-id
427
466
  class Memo::Upload < Trailblazer::Operation
428
- step :new?, Output(:failure) => "index"
467
+ step :new?, Output(:failure) => Id(:index)
429
468
  step :upload
430
469
  step :validate
431
470
  fail :validation_error
432
- step :index, id: "index"
471
+ step :index, id: :index
433
472
  #~target-id-methods
434
473
  def new?(options, is_new:, **)
435
474
  options[:new?] = is_new
@@ -439,7 +478,7 @@ class WiringsDocCustomConnectionTest < Minitest::Spec
439
478
  options[:upload] = true
440
479
  end
441
480
 
442
- def validate(options, validate:true, **)
481
+ def validate(options, validate: true, **)
443
482
  options[:validate] = validate
444
483
  end
445
484
 
@@ -457,17 +496,17 @@ class WiringsDocCustomConnectionTest < Minitest::Spec
457
496
  let(:my_image) { "beautiful landscape" }
458
497
 
459
498
  it "works with new image" do
460
- result = Memo::Upload.( image: my_image, is_new: true )
499
+ result = Memo::Upload.(image: my_image, is_new: true)
461
500
  result.inspect(:new?, :upload, :validate, :validation_error, :index).must_equal %{<Result:true [true, true, true, nil, true] >}
462
501
  end
463
502
 
464
503
  it "skips everything but index for existing image" do
465
- result = Memo::Upload.( image: my_image, is_new: false )
504
+ result = Memo::Upload.(image: my_image, is_new: false)
466
505
  result.inspect(:new?, :upload, :validate, :validation_error, :index).must_equal %{<Result:true [false, nil, nil, nil, true] >}
467
506
  end
468
507
 
469
508
  it "fails in validation" do
470
- result = Memo::Upload.( image: my_image, is_new: true, validate: false )
509
+ result = Memo::Upload.(image: my_image, is_new: true, validate: false)
471
510
  result.inspect(:new?, :upload, :validate, :validation_error, :index).must_equal %{<Result:false [true, true, false, true, nil] >}
472
511
  end
473
512
  end
@@ -479,22 +518,25 @@ class WiringsDocDeciderTest < Minitest::Spec
479
518
  class Memo::Upsert < Trailblazer::Operation
480
519
  step :find_model, Output(:failure) => Track(:create_route)
481
520
  step :update
482
- step :create, magnetic_to: [:create_route]
521
+ step :create, magnetic_to: :create_route
483
522
  step :save
484
523
  #~methods
485
- def find_model(options, id:nil, **)
524
+ def find_model(options, id: nil, **)
486
525
  options[:model] = Memo.find(id)
487
526
  end
488
527
 
489
- def find_model(options, id:, **)
528
+ def find_model(options, id:, **) #rubocop:disable Lint/DuplicateMethods
490
529
  options[:find_model] = id
491
530
  end
531
+
492
532
  def update(options, **)
493
533
  options[:update] = true
494
534
  end
535
+
495
536
  def create(options, **)
496
537
  options[:create] = true
497
538
  end
539
+
498
540
  def save(options, **)
499
541
  options[:save] = true
500
542
  end
@@ -503,11 +545,11 @@ class WiringsDocDeciderTest < Minitest::Spec
503
545
  #:decider end
504
546
 
505
547
  it "goes the create route" do
506
- Memo::Upsert.( id: false ).inspect(:find_model, :update, :create, :save).must_equal %{<Result:true [false, nil, true, true] >}
548
+ Memo::Upsert.(id: false).inspect(:find_model, :update, :create, :save).must_equal %{<Result:true [false, nil, true, true] >}
507
549
  end
508
550
 
509
551
  it "goes the update route" do
510
- Memo::Upsert.( id: true ).inspect(:find_model, :update, :create, :save).must_equal %{<Result:true [true, true, nil, true] >}
552
+ Memo::Upsert.(id: true).inspect(:find_model, :update, :create, :save).must_equal %{<Result:true [true, true, nil, true] >}
511
553
  end
512
554
  end
513
555
 
@@ -521,19 +563,22 @@ class WiringsDocEndTest < Minitest::Spec
521
563
  fail :db_error
522
564
  step :save
523
565
  #~methods
524
- def find_model(options, id:nil, **)
566
+ def find_model(options, id: nil, **)
525
567
  options[:model] = Memo.find(id)
526
568
  end
527
569
 
528
- def find_model(options, id:, **)
570
+ def find_model(options, id:, **) #rubocop:disable Lint/DuplicateMethods
529
571
  options[:find_model] = id
530
572
  end
573
+
531
574
  def update(options, update: true, **)
532
575
  options[:update] = update
533
576
  end
577
+
534
578
  def db_error(options, **)
535
579
  options[:db_error] = 1
536
580
  end
581
+
537
582
  def save(options, **)
538
583
  options[:save] = true
539
584
  end
@@ -542,17 +587,17 @@ class WiringsDocEndTest < Minitest::Spec
542
587
  #:end end
543
588
 
544
589
  it "goes success path" do
545
- Memo::Update.( id: true ).inspect(:find_model, :update, :save, :db_error).must_equal %{<Result:true [true, true, true, nil] >}
590
+ Memo::Update.(id: true).inspect(:find_model, :update, :save, :db_error).must_equal %{<Result:true [true, true, true, nil] >}
546
591
  end
547
592
 
548
593
  it "errors out on End.model_not_found" do
549
- result = Memo::Update.( id: false )
594
+ result = Memo::Update.(id: false)
550
595
  result.inspect(:find_model, :update, :save, :db_error).must_equal %{<Result:false [false, nil, nil, nil] >}
551
596
  result.event.to_h.must_equal(semantic: :model_not_found)
552
597
  end
553
598
 
554
599
  it "takes normal error track" do
555
- result = Memo::Update.( id: true, update: false )
600
+ result = Memo::Update.(id: true, update: false)
556
601
  result.inspect(:find_model, :update, :save, :db_error).must_equal %{<Result:false [true, false, nil, 1] >}
557
602
  result.event.to_h.must_equal(semantic: :failure)
558
603
  end