decouplio 1.0.0alpha2 → 1.0.0alpha5

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +11 -1
  3. data/.rubocop.yml +6 -0
  4. data/.ruby-version +1 -1
  5. data/README.md +2 -17
  6. data/benchmarks/multi_step_benchmark.rb +11 -10
  7. data/benchmarks/single_step_benchmark.rb +1 -1
  8. data/decouplio.gemspec +4 -4
  9. data/lib/decouplio/action.rb +12 -0
  10. data/lib/decouplio/composer.rb +47 -24
  11. data/lib/decouplio/const/doby_aide_options.rb +16 -0
  12. data/lib/decouplio/const/error_messages.rb +9 -0
  13. data/lib/decouplio/const/types.rb +14 -6
  14. data/lib/decouplio/const/validations/aide.rb +38 -0
  15. data/lib/decouplio/const/validations/doby.rb +36 -0
  16. data/lib/decouplio/const/validations/fail.rb +4 -0
  17. data/lib/decouplio/const/validations/octo.rb +2 -1
  18. data/lib/decouplio/errors/{deny_can_not_be_first_step_error.rb → aide_can_not_be_first_step_error.rb} +3 -3
  19. data/lib/decouplio/errors/aide_controversial_keys_error.rb +26 -0
  20. data/lib/decouplio/errors/aide_finish_him_error.rb +26 -0
  21. data/lib/decouplio/errors/doby_controversial_keys_error.rb +26 -0
  22. data/lib/decouplio/errors/doby_finish_him_error.rb +26 -0
  23. data/lib/decouplio/errors/execution_error.rb +20 -0
  24. data/lib/decouplio/errors/step_is_not_defined_for_aide_error.rb +26 -0
  25. data/lib/decouplio/errors/step_is_not_defined_for_doby_error.rb +27 -0
  26. data/lib/decouplio/errors/step_is_not_defined_for_pass_error.rb +27 -0
  27. data/lib/decouplio/logic_dsl.rb +23 -8
  28. data/lib/decouplio/options_validator.rb +157 -13
  29. data/lib/decouplio/steps/aide.rb +37 -0
  30. data/lib/decouplio/steps/base_resq.rb +13 -3
  31. data/lib/decouplio/steps/doby.rb +9 -8
  32. data/lib/decouplio/steps/octo.rb +7 -2
  33. data/lib/decouplio/validators/condition.rb +10 -0
  34. data/lib/decouplio/version.rb +1 -1
  35. metadata +24 -42
  36. data/docs/_config.yml +0 -1
  37. data/docs/benchmarks.md +0 -1
  38. data/docs/context.md +0 -74
  39. data/docs/context.rb +0 -62
  40. data/docs/deny.rb +0 -59
  41. data/docs/doby.rb +0 -38
  42. data/docs/doby_deny.md +0 -171
  43. data/docs/error_store.md +0 -347
  44. data/docs/error_store.rb +0 -202
  45. data/docs/fail.md +0 -1159
  46. data/docs/fail.rb +0 -859
  47. data/docs/index.md +0 -25
  48. data/docs/inner_action.md +0 -63
  49. data/docs/inner_action.rb +0 -43
  50. data/docs/logic_block.md +0 -25
  51. data/docs/octo.md +0 -269
  52. data/docs/octo.rb +0 -164
  53. data/docs/pass.md +0 -309
  54. data/docs/pass.rb +0 -213
  55. data/docs/quick_start.md +0 -71
  56. data/docs/quick_start.rb +0 -38
  57. data/docs/resq.md +0 -263
  58. data/docs/resq.rb +0 -176
  59. data/docs/step.md +0 -885
  60. data/docs/step.rb +0 -627
  61. data/docs/step_as_a_service.md +0 -123
  62. data/docs/step_as_a_service.rb +0 -77
  63. data/docs/wrap.md +0 -240
  64. data/docs/wrap.rb +0 -137
  65. data/lib/decouplio/const/validations/deny.rb +0 -11
  66. data/lib/decouplio/steps/deny.rb +0 -31
data/docs/fail.rb DELETED
@@ -1,859 +0,0 @@
1
- require_relative '../lib/decouplio'
2
-
3
-
4
-
5
- # Behavior
6
- class SomeAction < Decouplio::Action
7
- logic do
8
- step :step_one
9
- fail :fail_one
10
- fail :fail_two
11
- end
12
-
13
- def step_one(param_for_step_one:, **)
14
- param_for_step_one
15
- end
16
-
17
- def fail_one(**)
18
- ctx[:action_failed] = true
19
- end
20
-
21
- def fail_two(**)
22
- ctx[:fail_two] = 'Failure'
23
- end
24
- end
25
-
26
- success_action = SomeAction.call(param_for_step_one: true)
27
- failure_action = SomeAction.call(param_for_step_one: false)
28
-
29
- success_action # =>
30
- # Result: success
31
-
32
- # Railway Flow:
33
- # step_one
34
-
35
- # Context:
36
- # {:param_for_step_one=>true}
37
-
38
- # Errors:
39
- # {}
40
-
41
-
42
- failure_action # =>
43
- # Result: failure
44
-
45
- # Railway Flow:
46
- # step_one -> fail_one -> fail_two
47
-
48
- # Context:
49
- # {:param_for_step_one=>false, :action_failed=>true, :fail_two=>"Failure"}
50
-
51
- # Errors:
52
- # {}
53
-
54
-
55
-
56
- # on_success: :finish_him
57
- class SomeActionOnSuccessFinishHim < Decouplio::Action
58
- logic do
59
- step :step_one
60
- fail :fail_one, on_success: :finish_him
61
- fail :fail_two
62
- end
63
-
64
- def step_one(param_for_step_one:, **)
65
- param_for_step_one
66
- end
67
-
68
- def fail_one(fail_one_param:, **)
69
- ctx[:action_failed] = fail_one_param
70
- end
71
-
72
- def fail_two(**)
73
- ctx[:fail_two] = 'Failure'
74
- end
75
- end
76
-
77
- success_action = SomeActionOnSuccessFinishHim.call(
78
- param_for_step_one: true
79
- )
80
- fail_step_success = SomeActionOnSuccessFinishHim.call(
81
- param_for_step_one: false,
82
- fail_one_param: true
83
- )
84
- fail_step_failure = SomeActionOnSuccessFinishHim.call(
85
- param_for_step_one: false,
86
- fail_one_param: false
87
- )
88
-
89
- success_action # =>
90
- # Result: success
91
-
92
- # Railway Flow:
93
- # step_one
94
-
95
- # Context:
96
- # {:param_for_step_one=>true}
97
-
98
- # Errors:
99
- # {}
100
-
101
- fail_step_success # =>
102
- # Result: failure
103
-
104
- # Railway Flow:
105
- # step_one -> fail_one
106
-
107
- # Context:
108
- # {:param_for_step_one=>false, :fail_one_param=>true, :action_failed=>true}
109
-
110
- # Errors:
111
- # {}
112
-
113
- fail_step_failure # =>
114
- # Result: failure
115
-
116
- # Railway Flow:
117
- # step_one -> fail_one -> fail_two
118
-
119
- # Context:
120
- # {:param_for_step_one=>false, :fail_one_param=>false, :action_failed=>false, :fail_two=>"Failure"}
121
-
122
- # Errors:
123
- # {}
124
-
125
-
126
-
127
- # on_success: next success track step
128
- class SomeActionOnSuccessToSuccessTrack < Decouplio::Action
129
- logic do
130
- step :step_one
131
- fail :fail_one, on_success: :step_two
132
- step :step_two
133
- fail :fail_two
134
- end
135
-
136
- def step_one(param_for_step_one:, **)
137
- param_for_step_one
138
- end
139
-
140
- def fail_one(fail_one_param:, **)
141
- ctx[:action_failed] = fail_one_param
142
- end
143
-
144
- def step_two(**)
145
- ctx[:step_two] = 'Success'
146
- end
147
-
148
- def fail_two(**)
149
- ctx[:fail_two] = 'Failure'
150
- end
151
- end
152
-
153
- success_action = SomeActionOnSuccessToSuccessTrack.call(
154
- param_for_step_one: true
155
- )
156
- fail_step_success = SomeActionOnSuccessToSuccessTrack.call(
157
- param_for_step_one: false,
158
- fail_one_param: true
159
- )
160
- fail_step_failure = SomeActionOnSuccessToSuccessTrack.call(
161
- param_for_step_one: false,
162
- fail_one_param: false
163
- )
164
-
165
- success_action # =>
166
- # Result: success
167
-
168
- # Railway Flow:
169
- # step_one -> step_two
170
-
171
- # Context:
172
- # {:param_for_step_one=>true, :step_two=>"Success"}
173
-
174
- # Errors:
175
- # {}
176
-
177
- fail_step_success # =>
178
- # Result: success
179
-
180
- # Railway Flow:
181
- # step_one -> fail_one -> step_two
182
-
183
- # Context:
184
- # {:param_for_step_one=>false, :fail_one_param=>true, :action_failed=>true, :step_two=>"Success"}
185
-
186
- # Errors:
187
- # {}
188
-
189
- fail_step_failure # =>
190
- # Result: failure
191
-
192
- # Railway Flow:
193
- # step_one -> fail_one -> fail_two
194
-
195
- # Context:
196
- # {:param_for_step_one=>false, :fail_one_param=>false, :action_failed=>false, :fail_two=>"Failure"}
197
-
198
- # Errors:
199
- # {}
200
-
201
-
202
-
203
- # on_success: next failure track step
204
- class SomeActionOnSuccessToFailureTrack < Decouplio::Action
205
- logic do
206
- step :step_one
207
- fail :fail_one, on_success: :fail_three
208
- step :step_two
209
- fail :fail_two
210
- fail :fail_three
211
- end
212
-
213
- def step_one(param_for_step_one:, **)
214
- param_for_step_one
215
- end
216
-
217
- def fail_one(fail_one_param:, **)
218
- ctx[:action_failed] = fail_one_param
219
- end
220
-
221
- def step_two(**)
222
- ctx[:step_two] = 'Success'
223
- end
224
-
225
- def fail_two(**)
226
- ctx[:fail_two] = 'Failure'
227
- end
228
-
229
- def fail_three(**)
230
- ctx[:fail_three] = 'Failure'
231
- end
232
- end
233
-
234
- success_action = SomeActionOnSuccessToFailureTrack.call(
235
- param_for_step_one: true
236
- )
237
- fail_step_success = SomeActionOnSuccessToFailureTrack.call(
238
- param_for_step_one: false,
239
- fail_one_param: true
240
- )
241
- fail_step_failure = SomeActionOnSuccessToFailureTrack.call(
242
- param_for_step_one: false,
243
- fail_one_param: false
244
- )
245
-
246
- success_action # =>
247
- # Result: success
248
-
249
- # Railway Flow:
250
- # step_one -> step_two
251
-
252
- # Context:
253
- # {:param_for_step_one=>true, :step_two=>"Success"}
254
-
255
- # Errors:
256
- # {}
257
-
258
-
259
- fail_step_success # =>
260
- # Result: failure
261
-
262
- # Railway Flow:
263
- # step_one -> fail_one -> fail_three
264
-
265
- # Context:
266
- # {:param_for_step_one=>false, :fail_one_param=>true, :action_failed=>true, :fail_three=>"Failure"}
267
-
268
- # Errors:
269
- # {}
270
-
271
-
272
- fail_step_failure # =>
273
- # Result: failure
274
-
275
- # Railway Flow:
276
- # step_one -> fail_one -> fail_two -> fail_three
277
-
278
- # Context:
279
- # {:param_for_step_one=>false, :fail_one_param=>false, :action_failed=>false, :fail_two=>"Failure", :fail_three=>"Failure"}
280
-
281
- # Errors:
282
- # {}
283
-
284
-
285
-
286
- # on_success: :PASS
287
- class SomeActionOnSuccessPass < Decouplio::Action
288
- logic do
289
- step :step_one
290
- fail :fail_one, on_success: :PASS
291
- end
292
-
293
- def step_one(**)
294
- ctx[:step_one] = false
295
- end
296
-
297
- def fail_one(fail_one_param:, **)
298
- ctx[:fail_one] = fail_one_param
299
- end
300
- end
301
-
302
- fail_step_success = SomeActionOnSuccessPass.call(fail_one_param: true)
303
- fail_step_failure = SomeActionOnSuccessPass.call(fail_one_param: false)
304
-
305
- fail_step_success # =>
306
- # Result: success
307
-
308
- # Railway Flow:
309
- # step_one -> fail_one
310
-
311
- # Context:
312
- # :fail_one_param => true
313
- # :step_one => false
314
- # :fail_one => true
315
-
316
- # Errors:
317
- # {}
318
-
319
- fail_step_failure # =>
320
- # Result: failure
321
-
322
- # Railway Flow:
323
- # step_one -> fail_one
324
-
325
- # Context:
326
- # :fail_one_param => false
327
- # :step_one => false
328
- # :fail_one => false
329
-
330
- # Errors:
331
- # {}
332
-
333
-
334
-
335
-
336
- # on_failure: :finish_him
337
- class SomeActionOnFailureFinishHim < Decouplio::Action
338
- logic do
339
- step :step_one
340
- fail :fail_one, on_failure: :finish_him
341
- step :step_two
342
- fail :fail_two
343
- end
344
-
345
- def step_one(param_for_step_one:, **)
346
- param_for_step_one
347
- end
348
-
349
- def fail_one(fail_one_param:, **)
350
- ctx[:action_failed] = fail_one_param
351
- end
352
-
353
- def step_two(**)
354
- ctx[:step_two] = 'Success'
355
- end
356
-
357
- def fail_two(**)
358
- ctx[:fail_two] = 'Failure'
359
- end
360
- end
361
-
362
- success_action = SomeActionOnFailureFinishHim.call(
363
- param_for_step_one: true
364
- )
365
- fail_step_success = SomeActionOnFailureFinishHim.call(
366
- param_for_step_one: false,
367
- fail_one_param: true
368
- )
369
- fail_step_failure = SomeActionOnFailureFinishHim.call(
370
- param_for_step_one: false,
371
- fail_one_param: false
372
- )
373
-
374
- success_action # =>
375
- # Result: success
376
-
377
- # Railway Flow:
378
- # step_one -> step_two
379
-
380
- # Context:
381
- # {:param_for_step_one=>true, :step_two=>"Success"}
382
-
383
- # Errors:
384
- # {}
385
-
386
-
387
- fail_step_success # =>
388
- # Result: failure
389
-
390
- # Railway Flow:
391
- # step_one -> fail_one -> fail_two
392
-
393
- # Context:
394
- # {:param_for_step_one=>false, :fail_one_param=>true, :action_failed=>true, :fail_two=>"Failure"}
395
-
396
- # Errors:
397
- # {}
398
-
399
-
400
- fail_step_failure # =>
401
- # Result: failure
402
-
403
- # Railway Flow:
404
- # step_one -> fail_one
405
-
406
- # Context:
407
- # {:param_for_step_one=>false, :fail_one_param=>false, :action_failed=>false}
408
-
409
- # Errors:
410
- # {}
411
-
412
-
413
-
414
- # on_failure: next success track step
415
- class SomeActionOnFailureToSuccessTrack < Decouplio::Action
416
- logic do
417
- step :step_one
418
- fail :fail_one, on_failure: :step_two
419
- step :step_two
420
- fail :fail_two
421
- end
422
-
423
- def step_one(param_for_step_one:, **)
424
- param_for_step_one
425
- end
426
-
427
- def fail_one(fail_one_param:, **)
428
- ctx[:action_failed] = fail_one_param
429
- end
430
-
431
- def step_two(**)
432
- ctx[:step_two] = 'Success'
433
- end
434
-
435
- def fail_two(**)
436
- ctx[:fail_two] = 'Failure'
437
- end
438
- end
439
-
440
- success_action = SomeActionOnFailureToSuccessTrack.call(
441
- param_for_step_one: true
442
- )
443
- fail_step_success = SomeActionOnFailureToSuccessTrack.call(
444
- param_for_step_one: false,
445
- fail_one_param: true
446
- )
447
- fail_step_failure = SomeActionOnFailureToSuccessTrack.call(
448
- param_for_step_one: false,
449
- fail_one_param: false
450
- )
451
-
452
- success_action # =>
453
- # Result: success
454
-
455
- # Railway Flow:
456
- # step_one -> step_two
457
-
458
- # Context:
459
- # {:param_for_step_one=>true, :step_two=>"Success"}
460
-
461
- # Errors:
462
- # {}
463
-
464
- fail_step_success # =>
465
- # Result: failure
466
-
467
- # Railway Flow:
468
- # step_one -> fail_one -> fail_two
469
-
470
- # Context:
471
- # {:param_for_step_one=>false, :fail_one_param=>true, :action_failed=>true, :fail_two=>"Failure"}
472
-
473
- # Errors:
474
- # {}
475
-
476
-
477
- fail_step_failure # =>
478
- # Result: success
479
-
480
- # Railway Flow:
481
- # step_one -> fail_one -> step_two
482
-
483
- # Context:
484
- # {:param_for_step_one=>false, :fail_one_param=>false, :action_failed=>false, :step_two=>"Success"}
485
-
486
- # Errors:
487
- # {}
488
-
489
-
490
-
491
- # on_failure: next failure track step
492
- class SomeActionOnFailureToFailureTrack < Decouplio::Action
493
- logic do
494
- step :step_one
495
- fail :fail_one, on_failure: :fail_three
496
- step :step_two
497
- fail :fail_two
498
- fail :fail_three
499
- end
500
-
501
- def step_one(param_for_step_one:, **)
502
- param_for_step_one
503
- end
504
-
505
- def fail_one(fail_one_param:, **)
506
- ctx[:action_failed] = fail_one_param
507
- end
508
-
509
- def step_two(**)
510
- ctx[:step_two] = 'Success'
511
- end
512
-
513
- def fail_two(**)
514
- ctx[:fail_two] = 'Failure'
515
- end
516
-
517
- def fail_three(**)
518
- ctx[:fail_three] = 'Failure'
519
- end
520
- end
521
-
522
- success_action = SomeActionOnFailureToFailureTrack.call(
523
- param_for_step_one: true
524
- )
525
- fail_step_success = SomeActionOnFailureToFailureTrack.call(
526
- param_for_step_one: false,
527
- fail_one_param: true
528
- )
529
- fail_step_failure = SomeActionOnFailureToFailureTrack.call(
530
- param_for_step_one: false,
531
- fail_one_param: false
532
- )
533
-
534
- success_action # =>
535
- # Result: success
536
-
537
- # Railway Flow:
538
- # step_one -> step_two
539
-
540
- # Context:
541
- # {:param_for_step_one=>true, :step_two=>"Success"}
542
-
543
- # Errors:
544
- # {}
545
- fail_step_success # =>
546
- # Result: failure
547
-
548
- # Railway Flow:
549
- # step_one -> fail_one -> fail_two -> fail_three
550
-
551
- # Context:
552
- # {:param_for_step_one=>false, :fail_one_param=>true, :action_failed=>true, :fail_two=>"Failure", :fail_three=>"Failure"}
553
-
554
- # Errors:
555
- # {}
556
- fail_step_failure # =>
557
- # Result: failure
558
-
559
- # Railway Flow:
560
- # step_one -> fail_one -> fail_three
561
-
562
- # Context:
563
- # {:param_for_step_one=>false, :fail_one_param=>false, :action_failed=>false, :fail_three=>"Failure"}
564
-
565
- # Errors:
566
- # {}
567
-
568
-
569
-
570
- # on_failure: :PASS
571
- class SomeActionOnFailurePass < Decouplio::Action
572
- logic do
573
- step :step_one
574
- fail :fail_one, on_failure: :PASS
575
- end
576
-
577
- def step_one(**)
578
- false
579
- end
580
-
581
- def fail_one(fail_one_param:, **)
582
- ctx[:fail_one] = fail_one_param
583
- end
584
- end
585
-
586
- fail_step_success = SomeActionOnFailurePass.call(fail_one_param: true)
587
- fail_step_failure = SomeActionOnFailurePass.call(fail_one_param: false)
588
-
589
- fail_step_success # =>
590
- # Result: failure
591
-
592
- # Railway Flow:
593
- # step_one -> fail_one
594
-
595
- # Context:
596
- # :fail_one_param => true
597
- # :fail_one => true
598
-
599
- # Errors:
600
- # {}
601
-
602
- fail_step_failure # =>
603
- # Result: success
604
-
605
- # Railway Flow:
606
- # step_one -> fail_one
607
-
608
- # Context:
609
- # :fail_one_param => false
610
- # :fail_one => false
611
-
612
- # Errors:
613
- # {}
614
-
615
-
616
-
617
- # if: condition method name
618
- class SomeActionOnIfCondition < Decouplio::Action
619
- logic do
620
- step :step_one
621
- fail :fail_one
622
- step :step_two
623
- fail :fail_two, if: :some_condition?
624
- fail :fail_three
625
- end
626
-
627
- def step_one(param_for_step_one:, **)
628
- param_for_step_one
629
- end
630
-
631
- def fail_one(**)
632
- ctx[:action_failed] = true
633
- end
634
-
635
- def step_two(**)
636
- ctx[:step_two] = 'Success'
637
- end
638
-
639
- def fail_two(**)
640
- ctx[:fail_two] = 'Failure'
641
- end
642
-
643
- def fail_three(**)
644
- ctx[:fail_three] = 'Failure'
645
- end
646
-
647
- def some_condition?(if_condition_param:, **)
648
- if_condition_param
649
- end
650
- end
651
-
652
- success_action = SomeActionOnIfCondition.call(
653
- param_for_step_one: true
654
- )
655
- fail_condition_positive = SomeActionOnIfCondition.call(
656
- param_for_step_one: false,
657
- if_condition_param: true
658
- )
659
- fail_condition_negative = SomeActionOnIfCondition.call(
660
- param_for_step_one: false,
661
- if_condition_param: false
662
- )
663
-
664
- success_action # =>
665
- # Result: success
666
-
667
- # Railway Flow:
668
- # step_one -> step_two
669
-
670
- # Context:
671
- # {:param_for_step_one=>true, :step_two=>"Success"}
672
-
673
- # Errors:
674
- # {}
675
-
676
- fail_condition_positive # =>
677
- # Result: failure
678
-
679
- # Railway Flow:
680
- # step_one -> fail_one -> fail_two -> fail_three
681
-
682
- # Context:
683
- # {:param_for_step_one=>false, :if_condition_param=>true, :action_failed=>true, :fail_two=>"Failure", :fail_three=>"Failure"}
684
-
685
- # Errors:
686
- # {}
687
-
688
- fail_condition_negative # =>
689
- # Result: failure
690
-
691
- # Railway Flow:
692
- # step_one -> fail_one -> fail_three
693
-
694
- # Context:
695
- # {:param_for_step_one=>false, :if_condition_param=>false, :action_failed=>true, :fail_three=>"Failure"}
696
-
697
- # Errors:
698
- # {}
699
-
700
-
701
-
702
- # unless: condition method name
703
- class SomeActionOnUnlessCondition < Decouplio::Action
704
- logic do
705
- step :step_one
706
- fail :fail_one
707
- step :step_two
708
- fail :fail_two, unless: :some_condition?
709
- fail :fail_three
710
- end
711
-
712
- def step_one(param_for_step_one:, **)
713
- param_for_step_one
714
- end
715
-
716
- def fail_one(**)
717
- ctx[:action_failed] = true
718
- end
719
-
720
- def step_two(**)
721
- ctx[:step_two] = 'Success'
722
- end
723
-
724
- def fail_two(**)
725
- ctx[:fail_two] = 'Failure'
726
- end
727
-
728
- def fail_three(**)
729
- ctx[:fail_three] = 'Failure'
730
- end
731
-
732
- def some_condition?(if_condition_param:, **)
733
- if_condition_param
734
- end
735
- end
736
-
737
- success_action = SomeActionOnUnlessCondition.call(
738
- param_for_step_one: true
739
- )
740
- fail_condition_positive = SomeActionOnUnlessCondition.call(
741
- param_for_step_one: false,
742
- if_condition_param: false
743
- )
744
- fail_condition_negative = SomeActionOnUnlessCondition.call(
745
- param_for_step_one: false,
746
- if_condition_param: true
747
- )
748
-
749
- success_action # =>
750
- # Result: success
751
-
752
- # Railway Flow:
753
- # step_one -> step_two
754
-
755
- # Context:
756
- # {:param_for_step_one=>true, :step_two=>"Success"}
757
-
758
- # Errors:
759
- # {}
760
-
761
- fail_condition_positive # =>
762
- # Result: failure
763
-
764
- # Railway Flow:
765
- # step_one -> fail_one -> fail_two -> fail_three
766
-
767
- # Context:
768
- # {:param_for_step_one=>false, :if_condition_param=>false, :action_failed=>true, :fail_two=>"Failure", :fail_three=>"Failure"}
769
-
770
- # Errors:
771
- # {}
772
-
773
- fail_condition_negative # =>
774
- # Result: failure
775
-
776
- # Railway Flow:
777
- # step_one -> fail_one -> fail_three
778
-
779
- # Context:
780
- # {:param_for_step_one=>false, :if_condition_param=>true, :action_failed=>true, :fail_three=>"Failure"}
781
-
782
- # Errors:
783
- # {}
784
-
785
-
786
-
787
- # finish_him: true
788
- class SomeActionFinishHimTrue < Decouplio::Action
789
- logic do
790
- step :step_one
791
- fail :fail_one, finish_him: true
792
- step :step_two
793
- fail :fail_two
794
- end
795
-
796
- def step_one(param_for_step_one:, **)
797
- param_for_step_one
798
- end
799
-
800
- def fail_one(fail_one_param:, **)
801
- ctx[:action_failed] = fail_one_param
802
- end
803
-
804
- def step_two(**)
805
- ctx[:step_two] = 'Success'
806
- end
807
-
808
- def fail_two(**)
809
- ctx[:fail_two] = 'Failure'
810
- end
811
- end
812
-
813
- success_action = SomeActionFinishHimTrue.call(
814
- param_for_step_one: true
815
- )
816
- fail_step_success = SomeActionFinishHimTrue.call(
817
- param_for_step_one: false,
818
- fail_one_param: true
819
- )
820
- fail_step_failure = SomeActionFinishHimTrue.call(
821
- param_for_step_one: false,
822
- fail_one_param: false
823
- )
824
-
825
- success_action # =>
826
- # Result: success
827
-
828
- # Railway Flow:
829
- # step_one -> step_two
830
-
831
- # Context:
832
- # {:param_for_step_one=>true, :step_two=>"Success"}
833
-
834
- # Errors:
835
- # {}
836
-
837
- fail_step_success # =>
838
- # Result: failure
839
-
840
- # Railway Flow:
841
- # step_one -> fail_one
842
-
843
- # Context:
844
- # {:param_for_step_one=>false, :fail_one_param=>true, :action_failed=>true}
845
-
846
- # Errors:
847
- # {}
848
-
849
- fail_step_failure # =>
850
- # Result: failure
851
-
852
- # Railway Flow:
853
- # step_one -> fail_one
854
-
855
- # Context:
856
- # {:param_for_step_one=>false, :fail_one_param=>false, :action_failed=>false}
857
-
858
- # Errors:
859
- # {}