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.
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 +16 -12
  6. data/Gemfile +5 -3
  7. data/README.md +13 -2
  8. data/Rakefile +2 -2
  9. data/lib/trailblazer/operation.rb +52 -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/public_call.rb +23 -20
  14. data/lib/trailblazer/operation/railway.rb +2 -3
  15. data/lib/trailblazer/operation/railway/macaroni.rb +2 -2
  16. data/lib/trailblazer/operation/result.rb +14 -1
  17. data/lib/trailblazer/operation/trace.rb +9 -12
  18. data/lib/trailblazer/operation/version.rb +4 -2
  19. data/test/benchmark/skill_resolver_benchmark.rb +8 -9
  20. data/test/call_test.rb +57 -31
  21. data/test/callable_test.rb +147 -147
  22. data/test/class_dependencies_test.rb +6 -7
  23. data/test/docs/doormat_test.rb +13 -12
  24. data/test/docs/macaroni_test.rb +7 -9
  25. data/test/docs/operation_test.rb +69 -4
  26. data/test/docs/wiring_test.rb +85 -153
  27. data/test/dry_container_test.rb +4 -3
  28. data/test/fast_track_test.rb +24 -44
  29. data/test/inheritance_test.rb +13 -12
  30. data/test/introspect_test.rb +6 -6
  31. data/test/operation_test.rb +17 -25
  32. data/test/result_test.rb +4 -4
  33. data/test/ruby-2.0.0/operation_test.rb +9 -9
  34. data/test/ruby-2.0.0/step_test.rb +17 -16
  35. data/test/step_test.rb +55 -50
  36. data/test/test_helper.rb +7 -13
  37. data/test/trace_test.rb +27 -27
  38. data/test/wiring/defaults_test.rb +29 -33
  39. data/trailblazer-operation.gemspec +9 -7
  40. metadata +46 -27
  41. data/lib/trailblazer/operation/heritage.rb +0 -30
  42. data/lib/trailblazer/operation/inject.rb +0 -36
  43. data/lib/trailblazer/operation/inspect.rb +0 -79
  44. data/lib/trailblazer/operation/railway/fast_track.rb +0 -13
  45. data/lib/trailblazer/operation/railway/normalizer.rb +0 -58
  46. data/lib/trailblazer/operation/railway/task_builder.rb +0 -37
  47. data/test/inspect_test.rb +0 -43
  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,124 +280,13 @@ 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
250
287
  end
251
288
  end
252
289
 
253
- =begin
254
- :before, :after, :replace, :delete, :group, :id
255
- =end
256
- class WiringsDocSeqOptionsTest < Minitest::Spec
257
- module Id
258
- class Memo < WiringDocsTest::Memo; end
259
-
260
- #:id
261
- class Memo::Create < Trailblazer::Operation
262
- step :create_model, id: "create_memo"
263
- step :validate, id: "validate_params"
264
- step :save
265
- #~id-methods
266
- def create_model(options, **)
267
- end
268
- def validate(options, **)
269
- end
270
- def save(options, **)
271
- end
272
- #~id-methods end
273
- end
274
- #:id end
275
-
276
- #:delete
277
- class Memo::Create::Admin < Memo::Create
278
- step nil, delete: "validate_params", id: ""
279
- end
280
- #:delete end
281
-
282
- #:before
283
- class Memo::Create::Authorized < Memo::Create
284
- step :policy, before: "create_memo"
285
- #~before-methods
286
- def policy(options, **)
287
- end
288
- #~before-methods end
289
- end
290
- #:before end
291
-
292
- #:after
293
- class Memo::Create::Logging < Memo::Create
294
- step :logger, after: "validate_params"
295
- #~after-methods
296
- def logger(options, **)
297
- end
298
- #~after-methods end
299
- end
300
- #:after end
301
-
302
- #:replace
303
- class Memo::Update < Memo::Create
304
- step :find_model, replace: "create_memo", id: "update_memo"
305
- #~replace-methods
306
- def find_model(options, **)
307
- end
308
- #~replace-methods end
309
- end
310
- #:replace end
311
- end
312
-
313
- it ":id shows up in introspect" do
314
- Memo = Id::Memo
315
- #:id-inspect
316
- Trailblazer::Operation.introspect( Memo::Create )
317
- #=> [>create_memo,>validate_params,>save]
318
- #:id-inspect end
319
-
320
- Trailblazer::Operation.introspect( Memo::Create ).must_equal %{[>create_memo,>validate_params,>save]}
321
- end
322
-
323
- it ":delete removes step" do
324
- Memo = Id::Memo
325
- #:delete-inspect
326
- Trailblazer::Operation.introspect( Memo::Create::Admin )
327
- #=> [>create_model,>save]
328
- #:delete-inspect end
329
-
330
- Trailblazer::Operation.introspect( Memo::Create::Admin ).must_equal %{[>create_memo,>save]}
331
- end
332
-
333
- it ":before inserts" do
334
- Memo = Id::Memo
335
- #:before-inspect
336
- Trailblazer::Operation.introspect( Memo::Create::Authorized )
337
- #=> [>create_model,>save]
338
- #:before-inspect end
339
-
340
- Trailblazer::Operation.introspect( Memo::Create::Authorized ).must_equal %{[>policy,>create_memo,>validate_params,>save]}
341
- end
342
-
343
- it ":after inserts" do
344
- Memo = Id::Memo
345
- #:after-inspect
346
- Trailblazer::Operation.introspect( Memo::Create::Logging )
347
- #=> [>create_memo,>validate_params,>logger,>save]
348
- #:after-inspect end
349
-
350
- Trailblazer::Operation.introspect( Memo::Create::Logging ).must_equal %{[>create_memo,>validate_params,>logger,>save]}
351
- end
352
-
353
- it ":replace inserts" do
354
- Memo = Id::Memo
355
- #:replace-inspect
356
- Trailblazer::Operation.introspect( Memo::Update )
357
- #=> [>update_memo,>validate_params,>save]
358
- #:replace-inspect end
359
-
360
- Trailblazer::Operation.introspect( Memo::Update ).must_equal %{[>update_memo,>validate_params,>save]}
361
- end
362
- end
363
-
364
290
  # @see https://github.com/trailblazer/trailblazer/issues/190#issuecomment-326992255
365
291
  class WiringsDocRecoverTest < Minitest::Spec
366
292
  Memo = WiringDocsTest::Memo
@@ -396,27 +322,27 @@ class WiringsDocRecoverTest < Minitest::Spec
396
322
  let(:my_image) { "beautiful landscape" }
397
323
 
398
324
  it "works for S3" do
399
- result = Memo::Upload.( image: my_image, s3: true )
325
+ result = Memo::Upload.(image: my_image, s3: true)
400
326
 
401
- [ result.success?, result[:s3], result[:azure], result[:b2], result[:problem] ].must_equal [ true, true, nil, nil, nil ]
327
+ [result.success?, result[:s3], result[:azure], result[:b2], result[:problem]].must_equal [true, true, nil, nil, nil]
402
328
  end
403
329
 
404
330
  it "works for Azure" do
405
- result = Memo::Upload.( image: my_image, azure: true, s3: false )
331
+ result = Memo::Upload.(image: my_image, azure: true, s3: false)
406
332
 
407
- [ result.success?, result[:s3], result[:azure], result[:b2], result[:problem] ].must_equal [ true, false, true, nil, nil ]
333
+ [result.success?, result[:s3], result[:azure], result[:b2], result[:problem]].must_equal [true, false, true, nil, nil]
408
334
  end
409
335
 
410
336
  it "works for B2" do
411
- result = Memo::Upload.( image: my_image, b2: true, azure: false, s3: false )
337
+ result = Memo::Upload.(image: my_image, b2: true, azure: false, s3: false)
412
338
 
413
- [ result.success?, result[:s3], result[:azure], result[:b2], result[:problem] ].must_equal [ true, false, false, true, nil ]
339
+ [result.success?, result[:s3], result[:azure], result[:b2], result[:problem]].must_equal [true, false, false, true, nil]
414
340
  end
415
341
 
416
342
  it "fails for all" do
417
- result = Memo::Upload.( image: my_image, b2: false, azure: false, s3: false )
343
+ result = Memo::Upload.(image: my_image, b2: false, azure: false, s3: false)
418
344
 
419
- [ result.success?, result[:s3], result[:azure], result[:b2], result[:problem] ].must_equal [ false, false, false, false, "All uploads failed." ]
345
+ [result.success?, result[:s3], result[:azure], result[:b2], result[:problem]].must_equal [false, false, false, false, "All uploads failed."]
420
346
  end
421
347
  end
422
348
 
@@ -425,11 +351,11 @@ class WiringsDocCustomConnectionTest < Minitest::Spec
425
351
 
426
352
  #:target-id
427
353
  class Memo::Upload < Trailblazer::Operation
428
- step :new?, Output(:failure) => "index"
354
+ step :new?, Output(:failure) => Id(:index)
429
355
  step :upload
430
356
  step :validate
431
357
  fail :validation_error
432
- step :index, id: "index"
358
+ step :index, id: :index
433
359
  #~target-id-methods
434
360
  def new?(options, is_new:, **)
435
361
  options[:new?] = is_new
@@ -439,7 +365,7 @@ class WiringsDocCustomConnectionTest < Minitest::Spec
439
365
  options[:upload] = true
440
366
  end
441
367
 
442
- def validate(options, validate:true, **)
368
+ def validate(options, validate: true, **)
443
369
  options[:validate] = validate
444
370
  end
445
371
 
@@ -457,17 +383,17 @@ class WiringsDocCustomConnectionTest < Minitest::Spec
457
383
  let(:my_image) { "beautiful landscape" }
458
384
 
459
385
  it "works with new image" do
460
- result = Memo::Upload.( image: my_image, is_new: true )
386
+ result = Memo::Upload.(image: my_image, is_new: true)
461
387
  result.inspect(:new?, :upload, :validate, :validation_error, :index).must_equal %{<Result:true [true, true, true, nil, true] >}
462
388
  end
463
389
 
464
390
  it "skips everything but index for existing image" do
465
- result = Memo::Upload.( image: my_image, is_new: false )
391
+ result = Memo::Upload.(image: my_image, is_new: false)
466
392
  result.inspect(:new?, :upload, :validate, :validation_error, :index).must_equal %{<Result:true [false, nil, nil, nil, true] >}
467
393
  end
468
394
 
469
395
  it "fails in validation" do
470
- result = Memo::Upload.( image: my_image, is_new: true, validate: false )
396
+ result = Memo::Upload.(image: my_image, is_new: true, validate: false)
471
397
  result.inspect(:new?, :upload, :validate, :validation_error, :index).must_equal %{<Result:false [true, true, false, true, nil] >}
472
398
  end
473
399
  end
@@ -479,22 +405,25 @@ class WiringsDocDeciderTest < Minitest::Spec
479
405
  class Memo::Upsert < Trailblazer::Operation
480
406
  step :find_model, Output(:failure) => Track(:create_route)
481
407
  step :update
482
- step :create, magnetic_to: [:create_route]
408
+ step :create, magnetic_to: :create_route
483
409
  step :save
484
410
  #~methods
485
- def find_model(options, id:nil, **)
411
+ def find_model(options, id: nil, **)
486
412
  options[:model] = Memo.find(id)
487
413
  end
488
414
 
489
- def find_model(options, id:, **)
415
+ def find_model(options, id:, **) #rubocop:disable Lint/DuplicateMethods
490
416
  options[:find_model] = id
491
417
  end
418
+
492
419
  def update(options, **)
493
420
  options[:update] = true
494
421
  end
422
+
495
423
  def create(options, **)
496
424
  options[:create] = true
497
425
  end
426
+
498
427
  def save(options, **)
499
428
  options[:save] = true
500
429
  end
@@ -503,11 +432,11 @@ class WiringsDocDeciderTest < Minitest::Spec
503
432
  #:decider end
504
433
 
505
434
  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] >}
435
+ Memo::Upsert.(id: false).inspect(:find_model, :update, :create, :save).must_equal %{<Result:true [false, nil, true, true] >}
507
436
  end
508
437
 
509
438
  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] >}
439
+ Memo::Upsert.(id: true).inspect(:find_model, :update, :create, :save).must_equal %{<Result:true [true, true, nil, true] >}
511
440
  end
512
441
  end
513
442
 
@@ -521,19 +450,22 @@ class WiringsDocEndTest < Minitest::Spec
521
450
  fail :db_error
522
451
  step :save
523
452
  #~methods
524
- def find_model(options, id:nil, **)
453
+ def find_model(options, id: nil, **)
525
454
  options[:model] = Memo.find(id)
526
455
  end
527
456
 
528
- def find_model(options, id:, **)
457
+ def find_model(options, id:, **) #rubocop:disable Lint/DuplicateMethods
529
458
  options[:find_model] = id
530
459
  end
460
+
531
461
  def update(options, update: true, **)
532
462
  options[:update] = update
533
463
  end
464
+
534
465
  def db_error(options, **)
535
466
  options[:db_error] = 1
536
467
  end
468
+
537
469
  def save(options, **)
538
470
  options[:save] = true
539
471
  end
@@ -542,17 +474,17 @@ class WiringsDocEndTest < Minitest::Spec
542
474
  #:end end
543
475
 
544
476
  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] >}
477
+ Memo::Update.(id: true).inspect(:find_model, :update, :save, :db_error).must_equal %{<Result:true [true, true, true, nil] >}
546
478
  end
547
479
 
548
480
  it "errors out on End.model_not_found" do
549
- result = Memo::Update.( id: false )
481
+ result = Memo::Update.(id: false)
550
482
  result.inspect(:find_model, :update, :save, :db_error).must_equal %{<Result:false [false, nil, nil, nil] >}
551
483
  result.event.to_h.must_equal(semantic: :model_not_found)
552
484
  end
553
485
 
554
486
  it "takes normal error track" do
555
- result = Memo::Update.( id: true, update: false )
487
+ result = Memo::Update.(id: true, update: false)
556
488
  result.inspect(:find_model, :update, :save, :db_error).must_equal %{<Result:false [true, false, nil, 1] >}
557
489
  result.event.to_h.must_equal(semantic: :failure)
558
490
  end