trailblazer 2.0.7 → 2.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +35 -1
  3. data/Gemfile +6 -12
  4. data/README.md +3 -1
  5. data/Rakefile +6 -17
  6. data/lib/trailblazer.rb +7 -4
  7. data/lib/trailblazer/deprecation/call.rb +46 -0
  8. data/lib/trailblazer/deprecation/context.rb +43 -0
  9. data/lib/trailblazer/operation/contract.rb +40 -9
  10. data/lib/trailblazer/operation/deprecations.rb +21 -0
  11. data/lib/trailblazer/operation/guard.rb +5 -5
  12. data/lib/trailblazer/operation/model.rb +15 -10
  13. data/lib/trailblazer/operation/nested.rb +56 -85
  14. data/lib/trailblazer/operation/persist.rb +4 -2
  15. data/lib/trailblazer/operation/policy.rb +16 -7
  16. data/lib/trailblazer/operation/pundit.rb +3 -3
  17. data/lib/trailblazer/operation/representer.rb +5 -0
  18. data/lib/trailblazer/operation/rescue.rb +12 -9
  19. data/lib/trailblazer/operation/validate.rb +36 -29
  20. data/lib/trailblazer/operation/wrap.rb +49 -11
  21. data/lib/trailblazer/task.rb +20 -0
  22. data/lib/trailblazer/version.rb +1 -1
  23. data/test/benchmark.rb +63 -0
  24. data/test/deprecation/call_test.rb +42 -0
  25. data/test/deprecation/context_test.rb +19 -0
  26. data/test/docs/contract_test.rb +73 -53
  27. data/test/docs/dry_test.rb +2 -2
  28. data/test/docs/fast_test.rb +133 -13
  29. data/test/docs/guard_test.rb +28 -35
  30. data/test/docs/macro_test.rb +1 -1
  31. data/test/docs/model_test.rb +13 -13
  32. data/test/docs/nested_test.rb +54 -122
  33. data/test/docs/operation_test.rb +42 -43
  34. data/test/docs/pundit_test.rb +16 -16
  35. data/test/docs/representer_test.rb +18 -18
  36. data/test/docs/rescue_test.rb +29 -29
  37. data/test/docs/trace_test.rb +82 -0
  38. data/test/docs/wrap_test.rb +59 -26
  39. data/test/module_test.rb +75 -75
  40. data/test/nested_test.rb +293 -0
  41. data/test/operation/contract_test.rb +23 -153
  42. data/test/operation/dsl/contract_test.rb +9 -9
  43. data/test/operation/dsl/representer_test.rb +169 -169
  44. data/test/operation/model_test.rb +15 -21
  45. data/test/operation/persist_test.rb +18 -11
  46. data/test/operation/pundit_test.rb +25 -23
  47. data/test/operation/representer_test.rb +254 -254
  48. data/test/test_helper.rb +5 -2
  49. data/test/variables_test.rb +158 -0
  50. data/trailblazer.gemspec +1 -1
  51. data/untitled +33 -0
  52. metadata +25 -27
  53. data/lib/trailblazer/operation/callback.rb +0 -35
  54. data/lib/trailblazer/operation/procedural/contract.rb +0 -15
  55. data/lib/trailblazer/operation/procedural/validate.rb +0 -22
  56. data/test/operation/callback_test.rb +0 -70
  57. data/test/operation/dsl/callback_test.rb +0 -106
  58. data/test/operation/params_test.rb +0 -36
  59. data/test/operation/pipedream_test.rb +0 -59
  60. data/test/operation/pipetree_test.rb +0 -104
  61. data/test/operation/present_test.rb +0 -24
  62. data/test/operation/resolver_test.rb +0 -47
  63. data/test/operation_test.rb +0 -143
@@ -11,8 +11,8 @@ class DocsOperationExampleTest < Minitest::Spec
11
11
  step Model( Song, :new )
12
12
  step :assign_current_user!
13
13
  # ..
14
- def assign_current_user!(options)
15
- options["model"].created_by = options["current_user"]
14
+ def assign_current_user!(options, **)
15
+ options[:model].created_by = options[:current_user]
16
16
  end
17
17
  end
18
18
  #:invocation-dep end
@@ -20,46 +20,44 @@ class DocsOperationExampleTest < Minitest::Spec
20
20
  it do
21
21
  current_user = User.new("Ema")
22
22
  #:invocation-dep-call
23
- result = Create.( { title: "Roxanne" }, "current_user" => current_user )
23
+ result = Create.( params: { title: "Roxanne" }, :current_user => current_user )
24
24
  #:invocation-dep-call end
25
25
 
26
26
  #:invocation-dep-res
27
- result["current_user"] #=> #<User name="Ema">
28
- result["model"] #=> #<Song id=nil, title=nil, created_by=#<User name="Ema">>
27
+ result[:current_user] #=> #<User name="Ema">
28
+ result[:model] #=> #<Song id=nil, title=nil, created_by=#<User name="Ema">>
29
29
  #:invocation-dep-res end
30
30
  end
31
31
 
32
- it { Create.({ title: "Roxanne" }, "current_user" => Module).inspect("model").must_equal %{<Result:true [#<struct DocsOperationExampleTest::Song id=nil, title=nil, created_by=Module>] >} }
32
+ it { Create.(params: { title: "Roxanne" }, :current_user => Module).inspect(:model).must_equal %{<Result:true [#<struct DocsOperationExampleTest::Song id=nil, title=nil, created_by=Module>] >} }
33
33
 
34
34
  #:op
35
35
  class Song::Create < Trailblazer::Operation
36
- extend Contract::DSL
37
-
38
- contract do
36
+ class Form < Reform::Form
39
37
  property :title
40
38
  validates :title, presence: true
41
39
  end
42
40
 
43
41
  step Model( Song, :new )
44
42
  step :assign_current_user!
45
- step Contract::Build()
43
+ step Contract::Build( constant: Form )
46
44
  step Contract::Validate( )
47
45
  failure :log_error!
48
46
  step Contract::Persist( )
49
47
 
50
- def log_error!(options)
48
+ def log_error!(options, **)
51
49
  # ..
52
50
  end
53
51
 
54
- def assign_current_user!(options)
55
- options["model"].created_by =
56
- options["current_user"]
52
+ def assign_current_user!(options, **)
53
+ options[:model].created_by =
54
+ options[:current_user]
57
55
  end
58
56
  end
59
57
  #:op end
60
58
 
61
- it { Song::Create.({ }).inspect("model").must_equal %{<Result:false [#<struct DocsOperationExampleTest::Song id=nil, title=nil, created_by=nil>] >} }
62
- it { Song::Create.({ title: "Nothin'" }, "current_user"=>Module).inspect("model").must_equal %{<Result:true [#<struct DocsOperationExampleTest::Song id=nil, title="Nothin'", created_by=Module>] >} }
59
+ it { Song::Create.(params: { }).inspect(:model).must_equal %{<Result:false [#<struct DocsOperationExampleTest::Song id=nil, title=nil, created_by=nil>] >} }
60
+ it { Song::Create.(params: { title: "Nothin'" }, :current_user=>Module).inspect(:model).must_equal %{<Result:true [#<struct DocsOperationExampleTest::Song id=nil, title="Nothin'", created_by=Module>] >} }
63
61
  end
64
62
 
65
63
  class DndTest < Minitest::Spec
@@ -83,8 +81,8 @@ class DocsResultTest < Minitest::Spec
83
81
  step :validate!
84
82
 
85
83
  def model!(options, current_user:, **)
86
- options["model"] = Song.new
87
- options["model"].created_by = current_user
84
+ options[:model] = Song.new
85
+ options[:model].created_by = current_user
88
86
  end
89
87
 
90
88
  def assign!(*, params:, model:, **)
@@ -102,13 +100,13 @@ class DocsResultTest < Minitest::Spec
102
100
  it do
103
101
  current_user = Struct.new(:email).new("nick@trailblazer.to")
104
102
  #:step-res
105
- result = Song::Create.({ title: "Roxanne" }, "current_user" => current_user)
103
+ result = Song::Create.(params: { title: "Roxanne" }, :current_user => current_user)
106
104
 
107
- result["model"] #=> #<Song title="Roxanne", "created_by"=<User ...>
105
+ result[:model] #=> #<Song title="Roxanne", "created_by"=<User ...>
108
106
  result["result.validate"] #=> true
109
107
  #:step-res end
110
108
 
111
- result.inspect("current_user", "model").must_equal %{<Result:true [#<struct email=\"nick@trailblazer.to\">, #<struct DocsResultTest::Song id=nil, title="Roxanne", created_by=#<struct email=\"nick@trailblazer.to\">>] >}
109
+ result.inspect(:current_user, :model).must_equal %{<Result:true [#<struct email=\"nick@trailblazer.to\">, #<struct DocsResultTest::Song id=nil, title="Roxanne", created_by=#<struct email=\"nick@trailblazer.to\">>] >}
112
110
 
113
111
  #:step-binary
114
112
  result.success? #=> true
@@ -116,11 +114,11 @@ class DocsResultTest < Minitest::Spec
116
114
  #:step-binary end
117
115
 
118
116
  #:step-dep
119
- result["current_user"] #=> <User ...>
117
+ result[:current_user] #=> <User ...>
120
118
  #:step-dep end
121
119
 
122
120
  #:step-inspect
123
- result.inspect("current_user", "model") #=> "<Result:true [#<User email=\"nick@tra... "
121
+ result.inspect(:current_user, :model) #=> "<Result:true [#<User email=\"nick@tra... "
124
122
  #:step-inspect end
125
123
  end
126
124
  end
@@ -133,6 +131,7 @@ class DocsDependencyTest < Minitest::Spec
133
131
 
134
132
  #:dep-op
135
133
  class Song::Create < Trailblazer::Operation
134
+ extend ClassDependencies
136
135
  self["my.model.class"] = Song
137
136
 
138
137
  #~dep-pipe
@@ -194,19 +193,19 @@ class DocsOperationAPIExampleTest < Minitest::Spec
194
193
  failure :log_error!
195
194
  step Contract::Persist()
196
195
 
197
- def log_error!(options)
196
+ def log_error!(options, **)
198
197
  # ..
199
198
  end
200
199
 
201
- def assign_current_user!(options)
202
- options["model"].created_by =
203
- options["current_user"]
200
+ def assign_current_user!(options, **)
201
+ options[:model].created_by =
202
+ options[:current_user]
204
203
  end
205
204
  end
206
205
  #:op-api end
207
206
 
208
- it { Song::Create.({ }).inspect("model").must_equal %{<Result:false [#<struct DocsOperationAPIExampleTest::Song id=nil, title=nil, created_by=nil>] >} }
209
- it { Song::Create.({ title: "Nothin'" }, "current_user"=>Module).inspect("model").must_equal %{<Result:true [#<struct DocsOperationAPIExampleTest::Song id=nil, title="Nothin'", created_by=Module>] >} }
207
+ it { Song::Create.(params: {}).inspect(:model).must_equal %{<Result:false [#<struct DocsOperationAPIExampleTest::Song id=nil, title=nil, created_by=nil>] >} }
208
+ it { Song::Create.(params: { title: "Nothin'" }, :current_user=>Module).inspect(:model).must_equal %{<Result:true [#<struct DocsOperationAPIExampleTest::Song id=nil, title="Nothin'", created_by=Module>] >} }
210
209
  end
211
210
 
212
211
 
@@ -227,7 +226,7 @@ class DocsOperationInheritanceTest < Minitest::Spec
227
226
  end
228
227
  #:inh-new end
229
228
 
230
- puts New["pipetree"].inspect(style: :row)
229
+ puts Trailblazer::Operation::Inspect.(New, style: :row)
231
230
  =begin
232
231
  #:inh-new-pipe
233
232
  0 =======================>>operation.new
@@ -243,7 +242,7 @@ class DocsOperationInheritanceTest < Minitest::Spec
243
242
  end
244
243
  #:inh-create end
245
244
 
246
- puts Create["pipetree"].inspect(style: :row)
245
+ puts Trailblazer::Operation::Inspect.(Create, style: :row)
247
246
  =begin
248
247
  #:inh-create-pipe
249
248
  0 =======================>>operation.new
@@ -279,7 +278,7 @@ class DocsOperationInheritanceTest < Minitest::Spec
279
278
  end
280
279
  #:override-new end
281
280
 
282
- puts Song::New["pipetree"].inspect(style: :row)
281
+ puts Trailblazer::Operation::Inspect.(Song::New, style: :row)
283
282
  =begin
284
283
  #:override-pipe
285
284
  Song::New["pipetree"].inspect(style: :row)
@@ -290,8 +289,8 @@ class DocsOperationInheritanceTest < Minitest::Spec
290
289
  =end
291
290
 
292
291
  it do
293
- Song::New["pipetree"].inspect.must_equal %{[>operation.new,>model.build,>contract.build]}
294
- Song::New.().inspect("model").must_equal %{<Result:true [#<struct DocsOperationInheritanceTest::Song id=nil, title=nil, created_by=nil>] >}
292
+ Trailblazer::Operation::Inspect.(Song::New).must_equal %{[>model.build,>contract.build]}
293
+ Song::New.(params: {}).inspect(:model).must_equal %{<Result:true [#<struct DocsOperationInheritanceTest::Song id=nil, title=nil, created_by=nil>] >}
295
294
  end
296
295
  end
297
296
 
@@ -309,7 +308,7 @@ class DocsOperationStepOptionsTest < Minitest::Spec
309
308
  end
310
309
  #:name-auto end
311
310
 
312
- puts New["pipetree"].inspect(style: :row)
311
+ puts Trailblazer::Operation::Inspect.(New, style: :row)
313
312
  =begin
314
313
  #:name-auto-pipe
315
314
  0 =======================>>operation.new
@@ -323,7 +322,7 @@ class DocsOperationStepOptionsTest < Minitest::Spec
323
322
  end
324
323
  #:replace-inh end
325
324
 
326
- puts Update["pipetree"].inspect(style: :row)
325
+ puts Trailblazer::Operation::Inspect.(Update, style: :row)
327
326
  =begin
328
327
  #:replace-inh-pipe
329
328
  0 =======================>>operation.new
@@ -331,7 +330,7 @@ class DocsOperationStepOptionsTest < Minitest::Spec
331
330
  #:replace-inh-pipe end
332
331
  =end
333
332
 
334
- it { Update.({}).inspect("model").must_equal %{<Result:false [nil] >} }
333
+ it { Update.(params: {}).inspect(:model).must_equal %{<Result:false [nil] >} }
335
334
 
336
335
 
337
336
  # #:delete-inh
@@ -349,19 +348,19 @@ class DocsOperationStepOptionsTest < Minitest::Spec
349
348
  # #:delete-inh-pipe end
350
349
  # =end
351
350
 
352
- # it { Noop.({}).inspect("model").must_equal %{<Result:false [nil] >} }
351
+ # it { Noop.({}).inspect(:model).must_equal %{<Result:false [nil] >} }
353
352
  end
354
353
 
355
354
  class ManualNameTest < Minitest::Spec
356
355
  #:name-manu
357
356
  class New < Trailblazer::Operation
358
- step Model( Song, :new ), name: "build.song.model"
357
+ step(Model( Song, :new ), {name: "build.song.model"})
359
358
  step :validate_params!, name: "my.params.validate"
360
359
  # ..
361
360
  end
362
361
  #:name-manu end
363
362
 
364
- puts New["pipetree"].inspect(style: :row)
363
+ puts Trailblazer::Operation::Inspect.(New, style: :row)
365
364
  =begin
366
365
  #:name-manu-pipe
367
366
  0 =======================>>operation.new
@@ -380,7 +379,7 @@ class DocsOperationStepOptionsTest < Minitest::Spec
380
379
  end
381
380
  #:pos-before end
382
381
 
383
- puts New["pipetree"].inspect(style: :row)
382
+ puts Trailblazer::Operation::Inspect.(New, style: :row)
384
383
  =begin
385
384
  #:pos-before-pipe
386
385
  0 =======================>>operation.new
@@ -391,11 +390,11 @@ class DocsOperationStepOptionsTest < Minitest::Spec
391
390
 
392
391
  #:pos-inh
393
392
  class Create < New
394
- step :policy!, after: "operation.new"
393
+ step :policy!, before: "model.build"
395
394
  end
396
395
  #:pos-inh end
397
396
 
398
- puts Create["pipetree"].inspect(style: :row)
397
+ puts Trailblazer::Operation::Inspect.(Create, style: :row)
399
398
  =begin
400
399
  #:pos-inh-pipe
401
400
  0 =======================>>operation.new
@@ -29,13 +29,13 @@ class DocsPunditProcTest < Minitest::Spec
29
29
  end
30
30
  #:pundit end
31
31
 
32
- it { Create["pipetree"].inspect.must_equal %{[>operation.new,>model.build,>policy.default.eval]} }
33
- it { Create.({}, "current_user" => Module).inspect("model").must_equal %{<Result:true [#<struct DocsPunditProcTest::Song id=nil>] >} }
34
- it { Create.({} ).inspect("model").must_equal %{<Result:false [#<struct DocsPunditProcTest::Song id=nil>] >} }
32
+ it { Trailblazer::Operation::Inspect.(Create).must_equal %{[>model.build,>policy.default.eval]} }
33
+ it { Create.(params: {}, current_user: Module).inspect(:model).must_equal %{<Result:true [#<struct DocsPunditProcTest::Song id=nil>] >} }
34
+ it { Create.(params: {} ).inspect(:model).must_equal %{<Result:false [#<struct DocsPunditProcTest::Song id=nil>] >} }
35
35
 
36
36
  it do
37
37
  #:pundit-result
38
- result = Create.({}, "current_user" => Module)
38
+ result = Create.(params: {}, current_user: Module)
39
39
  result["result.policy.default"].success? #=> true
40
40
  result["result.policy.default"]["policy"] #=> #<MyPolicy ...>
41
41
  #:pundit-result end
@@ -49,9 +49,9 @@ class DocsPunditProcTest < Minitest::Spec
49
49
  step Policy::Pundit( MyPolicy, :new? ), override: true
50
50
  end
51
51
 
52
- it { New["pipetree"].inspect.must_equal %{[>operation.new,>model.build,>policy.default.eval]} }
53
- it { New.({}, "current_user" => Class ).inspect("model").must_equal %{<Result:true [#<struct DocsPunditProcTest::Song id=nil>] >} }
54
- it { New.({}, "current_user" => nil ).inspect("model").must_equal %{<Result:false [#<struct DocsPunditProcTest::Song id=nil>] >} }
52
+ it { Trailblazer::Operation::Inspect.(New).must_equal %{[>model.build,>policy.default.eval]} }
53
+ it { New.(params: {}, current_user: Class ).inspect(:model).must_equal %{<Result:true [#<struct DocsPunditProcTest::Song id=nil>] >} }
54
+ it { New.(params: {}, current_user: nil ).inspect(:model).must_equal %{<Result:false [#<struct DocsPunditProcTest::Song id=nil>] >} }
55
55
 
56
56
  #---
57
57
  #- override with :name
@@ -64,10 +64,10 @@ class DocsPunditProcTest < Minitest::Spec
64
64
  step Policy::Pundit( MyPolicy, :new?, name: "first" ), override: true
65
65
  end
66
66
 
67
- it { Edit["pipetree"].inspect.must_equal %{[>operation.new,>policy.first.eval,>policy.second.eval]} }
68
- it { Edit.({}, "current_user" => Class).inspect("model").must_equal %{<Result:false [nil] >} }
69
- it { Update["pipetree"].inspect.must_equal %{[>operation.new,>policy.first.eval,>policy.second.eval]} }
70
- it { Update.({}, "current_user" => Class).inspect("model").must_equal %{<Result:true [nil] >} }
67
+ it { Trailblazer::Operation::Inspect.(Edit).must_equal %{[>policy.first.eval,>policy.second.eval]} }
68
+ it { Edit.(params: {}, current_user: Class).inspect(:model).must_equal %{<Result:false [nil] >} }
69
+ it { Trailblazer::Operation::Inspect.(Update).must_equal %{[>policy.first.eval,>policy.second.eval]} }
70
+ it { Update.(params: {}, current_user: Class).inspect(:model).must_equal %{<Result:true [nil] >} }
71
71
 
72
72
  #---
73
73
  # dependency injection
@@ -80,8 +80,8 @@ class DocsPunditProcTest < Minitest::Spec
80
80
  it {
81
81
  result =
82
82
  #:di-call
83
- Create.({},
84
- "current_user" => Module,
83
+ Create.(params: {},
84
+ current_user: Module,
85
85
  "policy.default.eval" => Trailblazer::Operation::Policy::Pundit.build(AnotherPolicy, :create?)
86
86
  )
87
87
  #:di-call end
@@ -103,7 +103,7 @@ class PunditWithNameTest < Minitest::Spec
103
103
 
104
104
  it {
105
105
  #:name-call
106
- result = Create.({}, "current_user" => Module)
106
+ result = Create.(params: {}, current_user: Module)
107
107
  result["result.policy.after_model"].success? #=> true
108
108
  #:name-call end
109
109
  result["result.policy.after_model"].success?.must_equal true }
@@ -123,8 +123,8 @@ end
123
123
  # #:class-level end
124
124
 
125
125
  # it { Create.(); Create["result.policy"].must_equal nil }
126
- # it { Create.({}, "current_user" => Module)["x"].must_equal true }
127
- # it { Create.({} )["x"].must_equal nil }
126
+ # it { Create.(params: {}, current_user: Module)["x"].must_equal true }
127
+ # it { Create.(params: {} )["x"].must_equal nil }
128
128
  # end
129
129
 
130
130
 
@@ -20,7 +20,7 @@ class DocsRepresenterInferTest < Minitest::Spec
20
20
  #:infer end
21
21
 
22
22
  let (:json) { MultiJson.dump(id: 1) }
23
- it { Create.({}, "document" => json).inspect("model").must_equal %{<Result:true [#<struct DocsRepresenterInferTest::Song id=1, title=nil>] >} }
23
+ it { Create.( params: {}, document: json ).inspect(:model).must_equal %{<Result:true [#<struct DocsRepresenterInferTest::Song id=1, title=nil>] >} }
24
24
  end
25
25
 
26
26
  #---
@@ -49,18 +49,18 @@ class DocsRepresenterExplicitTest < Minitest::Spec
49
49
  #:explicit-op end
50
50
 
51
51
  let (:json) { MultiJson.dump(id: 1) }
52
- it { Create.({}, "document" => json).inspect("model").must_equal %{<Result:true [#<struct DocsRepresenterExplicitTest::Song id=1, title=nil>] >} }
52
+ it { Create.(params: {}, document: json).inspect(:model).must_equal %{<Result:true [#<struct DocsRepresenterExplicitTest::Song id=1, title=nil>] >} }
53
53
  it do
54
54
  #:explicit-call
55
- Create.({}, "document" => '{"id": 1}')
55
+ Create.(params: {}, document: '{"id": 1}')
56
56
  #:explicit-call end
57
57
  end
58
58
 
59
59
  #- render
60
60
  it do
61
61
  #:render
62
- result = Create.({}, "document" => '{"id": 1}')
63
- json = result["representer.default.class"].new(result["model"]).to_json
62
+ result = Create.( params: {}, document: '{"id": 1}' )
63
+ json = result["representer.default.class"].new(result[:model]).to_json
64
64
  json #=> '{"id":1}'
65
65
  #:render end
66
66
  json.must_equal '{"id":1}'
@@ -81,12 +81,12 @@ class DocsRepresenterExplicitTest < Minitest::Spec
81
81
  let (:xml) { %{<body><id>1</id></body>} }
82
82
  it do
83
83
  #:di-call
84
- result = Create.({},
85
- "document" => '<body><id>1</id></body>',
84
+ result = Create.(params: {},
85
+ document: '<body><id>1</id></body>',
86
86
  "representer.default.class" => MyXMLRepresenter # injection
87
87
  )
88
88
  #:di-call end
89
- result.inspect("model").must_equal %{<Result:true [#<struct DocsRepresenterExplicitTest::Song id="1", title=nil>] >}
89
+ result.inspect(:model).must_equal %{<Result:true [#<struct DocsRepresenterExplicitTest::Song id="1", title=nil>] >}
90
90
  end
91
91
  end
92
92
 
@@ -112,8 +112,8 @@ class DocsRepresenterDITest < Minitest::Spec
112
112
  end
113
113
 
114
114
  let (:json) { MultiJson.dump(id: 1) }
115
- it { Create.({}, "document" => json,
116
- "representer.default.class" => MyRepresenter).inspect("model").must_equal %{<Result:true [#<struct DocsRepresenterDITest::Song id=1, title=nil>] >} }
115
+ it { Create.(params: {}, document: json,
116
+ "representer.default.class" => MyRepresenter).inspect(:model).must_equal %{<Result:true [#<struct DocsRepresenterDITest::Song id=1, title=nil>] >} }
117
117
  end
118
118
 
119
119
  #---
@@ -141,7 +141,7 @@ class DocsRepresenterInlineTest < Minitest::Spec
141
141
  #:inline end
142
142
 
143
143
  let (:json) { MultiJson.dump(id: 1) }
144
- it { Create.({}, "document" => json).inspect("model").must_equal %{<Result:true [#<struct DocsRepresenterInlineTest::Song id=1, title=nil>] >} }
144
+ it { Create.(params: {}, document: json).inspect(:model).must_equal %{<Result:true [#<struct DocsRepresenterInlineTest::Song id=1, title=nil>] >} }
145
145
  end
146
146
 
147
147
  #---
@@ -163,8 +163,8 @@ class DocsRepresenterManualRenderTest < Minitest::Spec
163
163
  end
164
164
 
165
165
  it do
166
- result =Show.({ id: 1 })
167
- json = result["representer.default.class"].new(result["model"]).to_json
166
+ result =Show.(params: { id: 1 })
167
+ json = result["representer.default.class"].new(result[:model]).to_json
168
168
  json.must_equal %{{"id":1}}
169
169
  end
170
170
  end
@@ -236,19 +236,19 @@ class DocsRepresenterFullExampleTest < Minitest::Spec
236
236
  #:full end
237
237
 
238
238
  it do
239
- result =Create.({}, "document" => '{"title": "Tested"}')
239
+ result =Create.(params: {}, document: '{"title": "Tested"}')
240
240
 
241
- json = result["representer.render.class"].new(result["model"]).to_json
241
+ json = result["representer.render.class"].new(result[:model]).to_json
242
242
 
243
243
  json.must_equal %{{"id":1,"title":"Tested","_links":{"self":{"href":"/songs/1"}}}}
244
244
 
245
245
 
246
246
  #:full-call
247
247
  def create
248
- result = Create.(params, "document" => request.body.read)
248
+ result = Create.(params, document: request.body.read)
249
249
 
250
250
  if result.success?
251
- result["representer.render.class"].new(result["model"]).to_json
251
+ result["representer.render.class"].new(result[:model]).to_json
252
252
  else
253
253
  result["representer.errors.class"].new(result["result.contract.default"]).to_json
254
254
  end
@@ -257,7 +257,7 @@ class DocsRepresenterFullExampleTest < Minitest::Spec
257
257
  end
258
258
 
259
259
  it do
260
- result =Create.({}, "document" => '{"title": ""}')
260
+ result =Create.(params: {}, document: '{"title": ""}')
261
261
 
262
262
  if result.failure?
263
263
  json = result["representer.errors.class"].new(result["result.contract.default"]).to_json
@@ -8,33 +8,33 @@ class NestedRescueTest < Minitest::Spec
8
8
 
9
9
  class NestedInsanity < Trailblazer::Operation
10
10
  step Rescue {
11
- step ->(options) { options["a"] = true }
11
+ step ->(options, **) { options["a"] = true }
12
12
  step Rescue {
13
- step ->(options) { options["y"] = true }
14
- success ->(options) { raise Y if options["raise-y"] }
15
- step ->(options) { options["z"] = true }
13
+ step ->(options, **) { options["y"] = true }
14
+ success ->(options, **) { raise Y if options["raise-y"] }
15
+ step ->(options, **) { options["z"] = true }
16
16
  }
17
- step ->(options) { options["b"] = true }
18
- success ->(options) { raise A if options["raise-a"] }
19
- step ->(options) { options["c"] = true }
20
- failure ->(options) { options["inner-err"] = true }
17
+ step ->(options, **) { options["b"] = true }
18
+ success ->(options, **) { raise A if options["raise-a"] }
19
+ step ->(options, **) { options["c"] = true }
20
+ failure ->(options, **) { options["inner-err"] = true }
21
21
  }
22
- step ->(options) { options["e"] = true }
23
- failure ->(options) { options["outer-err"] = true }
22
+ step ->(options, **) { options["e"] = true }, name: "nested/e"
23
+ failure ->(options, **) { options["outer-err"] = true }, name: "nested/failure"
24
24
  end
25
25
 
26
- it { NestedInsanity["pipetree"].inspect.must_equal %{[>operation.new,>Rescue:10,>rescue_test.rb:22,<rescue_test.rb:23]} }
27
- it { NestedInsanity.({}).inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:true [true, true, true, true, true, true, nil, nil] >} }
28
- it { NestedInsanity.({}, "raise-y" => true).inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:false [true, true, nil, nil, nil, nil, true, true] >} }
29
- it { NestedInsanity.({}, "raise-a" => true).inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:false [true, true, true, true, nil, nil, nil, true] >} }
26
+ it { Trailblazer::Operation::Inspect.(NestedInsanity).must_match /\[>Rescue\(\d+\),>nested/ } # FIXME: better introspect tests for all id-generating macros.
27
+ it { NestedInsanity.().inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:true [true, true, true, true, true, true, nil, nil] >} }
28
+ it { NestedInsanity.( "raise-y" => true).inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:false [true, true, nil, nil, nil, nil, true, true] >} }
29
+ it { NestedInsanity.( "raise-a" => true).inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:false [true, true, true, true, nil, nil, nil, true] >} }
30
30
 
31
31
  #-
32
32
  # inheritance
33
33
  class UbernestedInsanity < NestedInsanity
34
34
  end
35
35
 
36
- it { UbernestedInsanity.({}).inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:true [true, true, true, true, true, true, nil, nil] >} }
37
- it { UbernestedInsanity.({}, "raise-a" => true).inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:false [true, true, true, true, nil, nil, nil, true] >} }
36
+ it { UbernestedInsanity.().inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:true [true, true, true, true, true, true, nil, nil] >} }
37
+ it { UbernestedInsanity.( "raise-a" => true).inspect("a", "y", "z", "b", "c", "e", "inner-err", "outer-err").must_equal %{<Result:false [true, true, true, true, nil, nil, nil, true] >} }
38
38
  end
39
39
 
40
40
  class RescueTest < Minitest::Spec
@@ -66,8 +66,8 @@ class RescueTest < Minitest::Spec
66
66
  end
67
67
  #:simple end
68
68
 
69
- it { Create.( id: 1, title: "Prodigal Son" )["contract.default"].model.inspect.must_equal %{#<struct RescueTest::Song id=1, title="Prodigal Son">} }
70
- it { Create.( id: nil ).inspect("model").must_equal %{<Result:false [nil] >} }
69
+ it { Create.( params: {id: 1, title: "Prodigal Son"} )["contract.default"].model.inspect.must_equal %{#<struct RescueTest::Song id=1, title="Prodigal Son">} }
70
+ it { Create.( params: {id: nil} ).inspect(:model).must_equal %{<Result:false [nil] >} }
71
71
 
72
72
  #-
73
73
  # Rescue ExceptionClass, handler: ->(*) { }
@@ -91,10 +91,10 @@ class RescueTest < Minitest::Spec
91
91
  end
92
92
  #:name end
93
93
 
94
- it { Create.( id: 1, title: "Prodigal Son" )["contract.default"].model.inspect.must_equal %{#<struct RescueTest::Song id=1, title="Prodigal Son">} }
95
- it { Create.( id: 1, title: "Prodigal Son" ).inspect("x").must_equal %{<Result:true [nil] >} }
96
- it { Create.( id: nil ).inspect("model", "x").must_equal %{<Result:false [nil, RescueTest::RecordNotFound] >} }
97
- it { assert_raises(RuntimeError) { Create.( id: "RuntimeError!" ) } }
94
+ it { Create.( params: {id: 1, title: "Prodigal Son"} )["contract.default"].model.inspect.must_equal %{#<struct RescueTest::Song id=1, title="Prodigal Son">} }
95
+ it { Create.( params: {id: 1, title: "Prodigal Son"} ).inspect("x").must_equal %{<Result:true [nil] >} }
96
+ it { Create.( params: {id: nil} ).inspect(:model, "x").must_equal %{<Result:false [nil, RescueTest::RecordNotFound] >} }
97
+ it { assert_raises(RuntimeError) { Create.( params: {id: "RuntimeError!"} ) } }
98
98
  end
99
99
 
100
100
 
@@ -120,7 +120,7 @@ class RescueTest < Minitest::Spec
120
120
  step Rescue( RecordNotFound, handler: :rollback! ) {
121
121
  step Wrap ->(*, &block) { Sequel.transaction do block.call end } {
122
122
  step Model( Song, :find )
123
- step ->(options) { options["model"].lock! } # lock the model.
123
+ step ->(options, *) { options[:model].lock! } # lock the model.
124
124
  step Contract::Build( constant: MyContract )
125
125
  step Contract::Validate( )
126
126
  step Contract::Persist( method: :sync )
@@ -134,7 +134,7 @@ class RescueTest < Minitest::Spec
134
134
  #~ex end
135
135
  end
136
136
 
137
- def error!(options)
137
+ def error!(options, *)
138
138
  #~ex
139
139
  options["err"] = true
140
140
  #~ex end
@@ -142,13 +142,13 @@ class RescueTest < Minitest::Spec
142
142
  end
143
143
  #:example end
144
144
 
145
- it { Create.( id: 1, title: "Pie" ).inspect("model", "x", "err").must_equal %{<Result:true [#<struct RescueTest::Song id=1, title=\"Pie\">, nil, nil] >} }
145
+ it { Create.( params: {id: 1, title: "Pie"} ).inspect(:model, "x", "err").must_equal %{<Result:true [#<struct RescueTest::Song id=1, title=\"Pie\">, nil, nil] >} }
146
146
  # raise exceptions in Model:
147
- it { Create.( id: nil ).inspect("model", "x").must_equal %{<Result:false [nil, RescueTest::RecordNotFound] >} }
148
- it { assert_raises(RuntimeError) { Create.( id: "RuntimeError!" ) } }
147
+ it { Create.( params: {id: nil} ).inspect(:model, "x").must_equal %{<Result:false [nil, RescueTest::RecordNotFound] >} }
148
+ it { assert_raises(RuntimeError) { Create.( params: {id: "RuntimeError!"} ) } }
149
149
  it do
150
- Create.( id: 1, title: "Pie" )
151
- Sequel.result.first.must_equal Pipetree::Railway::Right
150
+ Create.( params: {id: 1, title: "Pie"} )
151
+ Sequel.result.first.must_be_kind_of Trailblazer::Operation::Railway::End::Success
152
152
  end
153
153
  end
154
154
  end