trailblazer-operation 0.4.1 → 0.5.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.
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