interaktor 0.2.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/publish.yml +5 -4
- data/.github/workflows/tests.yml +5 -5
- data/.gitignore +3 -0
- data/.ruby-version +1 -1
- data/Gemfile +1 -1
- data/Gemfile.ci +6 -0
- data/README.md +65 -29
- data/interaktor.gemspec +3 -2
- data/lib/interaktor/callable.rb +235 -108
- data/lib/interaktor/error/attribute_error.rb +3 -1
- data/lib/interaktor/error/attribute_schema_validation_error.rb +54 -0
- data/lib/interaktor/error/missing_explicit_success_error.rb +5 -0
- data/lib/interaktor/error/organizer_missing_passed_attribute_error.rb +21 -0
- data/lib/interaktor/error/organizer_success_attribute_missing_error.rb +20 -0
- data/lib/interaktor/hooks.rb +16 -0
- data/lib/interaktor/organizer.rb +33 -7
- data/lib/interaktor.rb +11 -16
- data/spec/integration_spec.rb +142 -71
- data/spec/{interactor → interaktor}/context_spec.rb +1 -1
- data/spec/{interactor → interaktor}/hooks_spec.rb +100 -2
- data/spec/interaktor/organizer_spec.rb +249 -0
- data/spec/interaktor_spec.rb +2 -2
- data/spec/spec_helper.rb +20 -0
- data/spec/support/helpers.rb +14 -0
- data/spec/support/lint.rb +403 -166
- metadata +31 -17
- data/.travis.yml +0 -14
- data/lib/interaktor/error/disallowed_attribute_assignment_error.rb +0 -9
- data/lib/interaktor/error/missing_attribute_error.rb +0 -5
- data/lib/interaktor/error/option_error.rb +0 -16
- data/lib/interaktor/error/unknown_attribute_error.rb +0 -5
- data/lib/interaktor/error/unknown_option_error.rb +0 -5
- data/spec/interactor/organizer_spec.rb +0 -128
data/spec/integration_spec.rb
CHANGED
@@ -3,37 +3,7 @@
|
|
3
3
|
# rubocop:disable RSpec/ScatteredSetup
|
4
4
|
# rubocop:disable Style/DocumentationMethod
|
5
5
|
|
6
|
-
describe "Integration" do
|
7
|
-
def build_interaktor(&block)
|
8
|
-
Class.new.tap do |interaktor|
|
9
|
-
interaktor.send(:include, Interaktor)
|
10
|
-
interaktor.class_eval(&block) if block
|
11
|
-
interaktor.class_eval do
|
12
|
-
optional :steps
|
13
|
-
|
14
|
-
def unexpected_error!
|
15
|
-
raise "foo"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def build_organizer(options = {}, &block)
|
22
|
-
Class.new.tap do |organizer|
|
23
|
-
organizer.send(:include, Interaktor::Organizer)
|
24
|
-
|
25
|
-
organizer.organize(options[:organize]) if options[:organize]
|
26
|
-
organizer.class_eval(&block) if block
|
27
|
-
organizer.class_eval do
|
28
|
-
optional :steps
|
29
|
-
|
30
|
-
def unexpected_error!
|
31
|
-
raise "foo"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
6
|
+
RSpec.describe "Integration" do
|
37
7
|
# rubocop:disable Style/AsciiComments
|
38
8
|
#
|
39
9
|
# organizer
|
@@ -52,7 +22,10 @@ describe "Integration" do
|
|
52
22
|
|
53
23
|
let(:organizer) {
|
54
24
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
55
|
-
|
25
|
+
|
26
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
27
|
+
organize(interaktors)
|
28
|
+
|
56
29
|
around do |interaktor|
|
57
30
|
@context.steps << :around_before
|
58
31
|
interaktor.call
|
@@ -70,7 +43,11 @@ describe "Integration" do
|
|
70
43
|
}
|
71
44
|
|
72
45
|
let(:organizer2) {
|
73
|
-
|
46
|
+
interaktors = [interaktor2a, interaktor2b, interaktor2c]
|
47
|
+
|
48
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
49
|
+
organize(interaktors)
|
50
|
+
|
74
51
|
around do |interaktor|
|
75
52
|
@context.steps << :around_before2
|
76
53
|
interaktor.call
|
@@ -88,7 +65,7 @@ describe "Integration" do
|
|
88
65
|
}
|
89
66
|
|
90
67
|
let(:interaktor2a) {
|
91
|
-
build_interaktor do
|
68
|
+
FakeInteraktor.build_interaktor do
|
92
69
|
around do |interaktor|
|
93
70
|
@context.steps << :around_before2a
|
94
71
|
interaktor.call
|
@@ -114,7 +91,7 @@ describe "Integration" do
|
|
114
91
|
}
|
115
92
|
|
116
93
|
let(:interaktor2b) {
|
117
|
-
build_interaktor do
|
94
|
+
FakeInteraktor.build_interaktor do
|
118
95
|
around do |interaktor|
|
119
96
|
@context.steps << :around_before2b
|
120
97
|
interaktor.call
|
@@ -140,7 +117,7 @@ describe "Integration" do
|
|
140
117
|
}
|
141
118
|
|
142
119
|
let(:interaktor2c) {
|
143
|
-
build_interaktor do
|
120
|
+
FakeInteraktor.build_interaktor do
|
144
121
|
around do |interaktor|
|
145
122
|
@context.steps << :around_before2c
|
146
123
|
interaktor.call
|
@@ -166,7 +143,7 @@ describe "Integration" do
|
|
166
143
|
}
|
167
144
|
|
168
145
|
let(:interaktor3) {
|
169
|
-
build_interaktor do
|
146
|
+
FakeInteraktor.build_interaktor do
|
170
147
|
around do |interaktor|
|
171
148
|
@context.steps << :around_before3
|
172
149
|
interaktor.call
|
@@ -192,7 +169,11 @@ describe "Integration" do
|
|
192
169
|
}
|
193
170
|
|
194
171
|
let(:organizer4) {
|
195
|
-
|
172
|
+
interaktors = [interaktor4a, interaktor4b, interaktor4c]
|
173
|
+
|
174
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
175
|
+
organize(interaktors)
|
176
|
+
|
196
177
|
around do |interaktor|
|
197
178
|
@context.steps << :around_before4
|
198
179
|
interaktor.call
|
@@ -210,7 +191,7 @@ describe "Integration" do
|
|
210
191
|
}
|
211
192
|
|
212
193
|
let(:interaktor4a) {
|
213
|
-
build_interaktor do
|
194
|
+
FakeInteraktor.build_interaktor do
|
214
195
|
around do |interaktor|
|
215
196
|
@context.steps << :around_before4a
|
216
197
|
interaktor.call
|
@@ -236,7 +217,7 @@ describe "Integration" do
|
|
236
217
|
}
|
237
218
|
|
238
219
|
let(:interaktor4b) {
|
239
|
-
build_interaktor do
|
220
|
+
FakeInteraktor.build_interaktor do
|
240
221
|
around do |interaktor|
|
241
222
|
@context.steps << :around_before4b
|
242
223
|
interaktor.call
|
@@ -262,7 +243,7 @@ describe "Integration" do
|
|
262
243
|
}
|
263
244
|
|
264
245
|
let(:interaktor4c) {
|
265
|
-
build_interaktor do
|
246
|
+
FakeInteraktor.build_interaktor do
|
266
247
|
around do |interaktor|
|
267
248
|
@context.steps << :around_before4c
|
268
249
|
interaktor.call
|
@@ -288,7 +269,7 @@ describe "Integration" do
|
|
288
269
|
}
|
289
270
|
|
290
271
|
let(:interaktor5) {
|
291
|
-
build_interaktor do
|
272
|
+
FakeInteraktor.build_interaktor do
|
292
273
|
around do |interaktor|
|
293
274
|
@context.steps << :around_before5
|
294
275
|
interaktor.call
|
@@ -341,7 +322,10 @@ describe "Integration" do
|
|
341
322
|
context "when an around hook fails early" do
|
342
323
|
let(:organizer) {
|
343
324
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
344
|
-
|
325
|
+
|
326
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
327
|
+
organize(interaktors)
|
328
|
+
|
345
329
|
around do |interaktor|
|
346
330
|
@context.fail!
|
347
331
|
@context.steps << :around_before
|
@@ -370,7 +354,10 @@ describe "Integration" do
|
|
370
354
|
context "when an around hook errors early" do
|
371
355
|
let(:organizer) {
|
372
356
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
373
|
-
|
357
|
+
|
358
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
359
|
+
organize(interaktors)
|
360
|
+
|
374
361
|
around do |interaktor|
|
375
362
|
unexpected_error!
|
376
363
|
@context.steps << :around_before
|
@@ -386,6 +373,10 @@ describe "Integration" do
|
|
386
373
|
after do
|
387
374
|
@context.steps << :after
|
388
375
|
end
|
376
|
+
|
377
|
+
def unexpected_error!
|
378
|
+
raise "foo"
|
379
|
+
end
|
389
380
|
end
|
390
381
|
}
|
391
382
|
|
@@ -409,7 +400,10 @@ describe "Integration" do
|
|
409
400
|
context "when a before hook fails" do
|
410
401
|
let(:organizer) {
|
411
402
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
412
|
-
|
403
|
+
|
404
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
405
|
+
organize(interaktors)
|
406
|
+
|
413
407
|
around do |interaktor|
|
414
408
|
@context.steps << :around_before
|
415
409
|
interaktor.call
|
@@ -439,7 +433,10 @@ describe "Integration" do
|
|
439
433
|
context "when a before hook errors" do
|
440
434
|
let(:organizer) {
|
441
435
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
442
|
-
|
436
|
+
|
437
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
438
|
+
organize(interaktors)
|
439
|
+
|
443
440
|
around do |interaktor|
|
444
441
|
@context.steps << :around_before
|
445
442
|
interaktor.call
|
@@ -454,6 +451,10 @@ describe "Integration" do
|
|
454
451
|
after do
|
455
452
|
@context.steps << :after
|
456
453
|
end
|
454
|
+
|
455
|
+
def unexpected_error!
|
456
|
+
raise "foo"
|
457
|
+
end
|
457
458
|
end
|
458
459
|
}
|
459
460
|
|
@@ -479,7 +480,10 @@ describe "Integration" do
|
|
479
480
|
context "when an after hook fails" do
|
480
481
|
let(:organizer) {
|
481
482
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
482
|
-
|
483
|
+
|
484
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
485
|
+
organize(interaktors)
|
486
|
+
|
483
487
|
around do |interaktor|
|
484
488
|
@context.steps << :around_before
|
485
489
|
interaktor.call
|
@@ -529,7 +533,10 @@ describe "Integration" do
|
|
529
533
|
context "when an after hook errors" do
|
530
534
|
let(:organizer) {
|
531
535
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
532
|
-
|
536
|
+
|
537
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
538
|
+
organize(interaktors)
|
539
|
+
|
533
540
|
around do |interaktor|
|
534
541
|
@context.steps << :around_before
|
535
542
|
interaktor.call
|
@@ -544,6 +551,10 @@ describe "Integration" do
|
|
544
551
|
unexpected_error!
|
545
552
|
@context.steps << :after
|
546
553
|
end
|
554
|
+
|
555
|
+
def unexpected_error!
|
556
|
+
raise "foo"
|
557
|
+
end
|
547
558
|
end
|
548
559
|
}
|
549
560
|
|
@@ -589,7 +600,10 @@ describe "Integration" do
|
|
589
600
|
context "when an around hook fails late" do
|
590
601
|
let(:organizer) {
|
591
602
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
592
|
-
|
603
|
+
|
604
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
605
|
+
organize(interaktors)
|
606
|
+
|
593
607
|
around do |interaktor|
|
594
608
|
@context.steps << :around_before
|
595
609
|
interaktor.call
|
@@ -640,7 +654,10 @@ describe "Integration" do
|
|
640
654
|
context "when an around hook errors late" do
|
641
655
|
let(:organizer) {
|
642
656
|
interaktors = [organizer2, interaktor3, organizer4, interaktor5]
|
643
|
-
|
657
|
+
|
658
|
+
FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
659
|
+
organize(interaktors)
|
660
|
+
|
644
661
|
around do |interaktor|
|
645
662
|
@context.steps << :around_before
|
646
663
|
interaktor.call
|
@@ -655,6 +672,10 @@ describe "Integration" do
|
|
655
672
|
after do
|
656
673
|
@context.steps << :after
|
657
674
|
end
|
675
|
+
|
676
|
+
def unexpected_error!
|
677
|
+
raise "foo"
|
678
|
+
end
|
658
679
|
end
|
659
680
|
}
|
660
681
|
|
@@ -700,7 +721,7 @@ describe "Integration" do
|
|
700
721
|
|
701
722
|
context "when a nested around hook fails early" do
|
702
723
|
let(:interaktor3) {
|
703
|
-
build_interaktor do
|
724
|
+
FakeInteraktor.build_interaktor do
|
704
725
|
around do |interaktor|
|
705
726
|
@context.fail!
|
706
727
|
@context.steps << :around_before3
|
@@ -745,7 +766,7 @@ describe "Integration" do
|
|
745
766
|
|
746
767
|
context "when a nested around hook errors early" do
|
747
768
|
let(:interaktor3) {
|
748
|
-
build_interaktor do
|
769
|
+
FakeInteraktor.build_interaktor do
|
749
770
|
around do |interaktor|
|
750
771
|
unexpected_error!
|
751
772
|
@context.steps << :around_before3
|
@@ -768,6 +789,10 @@ describe "Integration" do
|
|
768
789
|
def rollback
|
769
790
|
@context.steps << :rollback3
|
770
791
|
end
|
792
|
+
|
793
|
+
def unexpected_error!
|
794
|
+
raise "foo"
|
795
|
+
end
|
771
796
|
end
|
772
797
|
}
|
773
798
|
|
@@ -800,7 +825,7 @@ describe "Integration" do
|
|
800
825
|
|
801
826
|
context "when a nested before hook fails" do
|
802
827
|
let(:interaktor3) {
|
803
|
-
build_interaktor do
|
828
|
+
FakeInteraktor.build_interaktor do
|
804
829
|
around do |interaktor|
|
805
830
|
@context.steps << :around_before3
|
806
831
|
interaktor.call
|
@@ -846,7 +871,7 @@ describe "Integration" do
|
|
846
871
|
|
847
872
|
context "when a nested before hook errors" do
|
848
873
|
let(:interaktor3) {
|
849
|
-
build_interaktor do
|
874
|
+
FakeInteraktor.build_interaktor do
|
850
875
|
around do |interaktor|
|
851
876
|
@context.steps << :around_before3
|
852
877
|
interaktor.call
|
@@ -869,6 +894,10 @@ describe "Integration" do
|
|
869
894
|
def rollback
|
870
895
|
@context.steps << :rollback3
|
871
896
|
end
|
897
|
+
|
898
|
+
def unexpected_error!
|
899
|
+
raise "foo"
|
900
|
+
end
|
872
901
|
end
|
873
902
|
}
|
874
903
|
|
@@ -902,7 +931,7 @@ describe "Integration" do
|
|
902
931
|
|
903
932
|
context "when a nested call fails" do
|
904
933
|
let(:interaktor3) {
|
905
|
-
build_interaktor do
|
934
|
+
FakeInteraktor.build_interaktor do
|
906
935
|
around do |interaktor|
|
907
936
|
@context.steps << :around_before3
|
908
937
|
interaktor.call
|
@@ -948,7 +977,7 @@ describe "Integration" do
|
|
948
977
|
|
949
978
|
context "when a nested call errors" do
|
950
979
|
let(:interaktor3) {
|
951
|
-
build_interaktor do
|
980
|
+
FakeInteraktor.build_interaktor do
|
952
981
|
around do |interaktor|
|
953
982
|
@context.steps << :around_before3
|
954
983
|
interaktor.call
|
@@ -971,6 +1000,10 @@ describe "Integration" do
|
|
971
1000
|
def rollback
|
972
1001
|
@context.steps << :rollback3
|
973
1002
|
end
|
1003
|
+
|
1004
|
+
def unexpected_error!
|
1005
|
+
raise "foo"
|
1006
|
+
end
|
974
1007
|
end
|
975
1008
|
}
|
976
1009
|
|
@@ -1004,7 +1037,7 @@ describe "Integration" do
|
|
1004
1037
|
|
1005
1038
|
context "when a nested after hook fails" do
|
1006
1039
|
let(:interaktor3) {
|
1007
|
-
build_interaktor do
|
1040
|
+
FakeInteraktor.build_interaktor do
|
1008
1041
|
around do |interaktor|
|
1009
1042
|
@context.steps << :around_before3
|
1010
1043
|
interaktor.call
|
@@ -1051,7 +1084,7 @@ describe "Integration" do
|
|
1051
1084
|
|
1052
1085
|
context "when a nested after hook errors" do
|
1053
1086
|
let(:interaktor3) {
|
1054
|
-
build_interaktor do
|
1087
|
+
FakeInteraktor.build_interaktor do
|
1055
1088
|
around do |interaktor|
|
1056
1089
|
@context.steps << :around_before3
|
1057
1090
|
interaktor.call
|
@@ -1074,6 +1107,10 @@ describe "Integration" do
|
|
1074
1107
|
def rollback
|
1075
1108
|
@context.steps << :rollback3
|
1076
1109
|
end
|
1110
|
+
|
1111
|
+
def unexpected_error!
|
1112
|
+
raise "foo"
|
1113
|
+
end
|
1077
1114
|
end
|
1078
1115
|
}
|
1079
1116
|
|
@@ -1108,7 +1145,7 @@ describe "Integration" do
|
|
1108
1145
|
|
1109
1146
|
context "when a nested around hook fails late" do
|
1110
1147
|
let(:interaktor3) {
|
1111
|
-
build_interaktor do
|
1148
|
+
FakeInteraktor.build_interaktor do
|
1112
1149
|
around do |interaktor|
|
1113
1150
|
@context.steps << :around_before3
|
1114
1151
|
interaktor.call
|
@@ -1155,7 +1192,7 @@ describe "Integration" do
|
|
1155
1192
|
|
1156
1193
|
context "when a nested around hook errors late" do
|
1157
1194
|
let(:interaktor3) {
|
1158
|
-
build_interaktor do
|
1195
|
+
FakeInteraktor.build_interaktor do
|
1159
1196
|
around do |interaktor|
|
1160
1197
|
@context.steps << :around_before3
|
1161
1198
|
interaktor.call
|
@@ -1178,6 +1215,10 @@ describe "Integration" do
|
|
1178
1215
|
def rollback
|
1179
1216
|
@context.steps << :rollback3
|
1180
1217
|
end
|
1218
|
+
|
1219
|
+
def unexpected_error!
|
1220
|
+
raise "foo"
|
1221
|
+
end
|
1181
1222
|
end
|
1182
1223
|
}
|
1183
1224
|
|
@@ -1212,7 +1253,7 @@ describe "Integration" do
|
|
1212
1253
|
|
1213
1254
|
context "when a deeply nested around hook fails early" do
|
1214
1255
|
let(:interaktor4b) {
|
1215
|
-
build_interaktor do
|
1256
|
+
FakeInteraktor.build_interaktor do
|
1216
1257
|
around do |interaktor|
|
1217
1258
|
@context.fail!
|
1218
1259
|
@context.steps << :around_before4b
|
@@ -1262,7 +1303,7 @@ describe "Integration" do
|
|
1262
1303
|
|
1263
1304
|
context "when a deeply nested around hook errors early" do
|
1264
1305
|
let(:interaktor4b) {
|
1265
|
-
build_interaktor do
|
1306
|
+
FakeInteraktor.build_interaktor do
|
1266
1307
|
around do |interaktor|
|
1267
1308
|
unexpected_error!
|
1268
1309
|
@context.steps << :around_before4b
|
@@ -1285,6 +1326,10 @@ describe "Integration" do
|
|
1285
1326
|
def rollback
|
1286
1327
|
@context.steps << :rollback4b
|
1287
1328
|
end
|
1329
|
+
|
1330
|
+
def unexpected_error!
|
1331
|
+
raise "foo"
|
1332
|
+
end
|
1288
1333
|
end
|
1289
1334
|
}
|
1290
1335
|
|
@@ -1322,7 +1367,7 @@ describe "Integration" do
|
|
1322
1367
|
|
1323
1368
|
context "when a deeply nested before hook fails" do
|
1324
1369
|
let(:interaktor4b) {
|
1325
|
-
build_interaktor do
|
1370
|
+
FakeInteraktor.build_interaktor do
|
1326
1371
|
around do |interaktor|
|
1327
1372
|
@context.steps << :around_before4b
|
1328
1373
|
interaktor.call
|
@@ -1373,7 +1418,7 @@ describe "Integration" do
|
|
1373
1418
|
|
1374
1419
|
context "when a deeply nested before hook errors" do
|
1375
1420
|
let(:interaktor4b) {
|
1376
|
-
build_interaktor do
|
1421
|
+
FakeInteraktor.build_interaktor do
|
1377
1422
|
around do |interaktor|
|
1378
1423
|
@context.steps << :around_before4b
|
1379
1424
|
interaktor.call
|
@@ -1396,6 +1441,10 @@ describe "Integration" do
|
|
1396
1441
|
def rollback
|
1397
1442
|
@context.steps << :rollback4b
|
1398
1443
|
end
|
1444
|
+
|
1445
|
+
def unexpected_error!
|
1446
|
+
raise "foo"
|
1447
|
+
end
|
1399
1448
|
end
|
1400
1449
|
}
|
1401
1450
|
|
@@ -1434,7 +1483,7 @@ describe "Integration" do
|
|
1434
1483
|
|
1435
1484
|
context "when a deeply nested call fails" do
|
1436
1485
|
let(:interaktor4b) {
|
1437
|
-
build_interaktor do
|
1486
|
+
FakeInteraktor.build_interaktor do
|
1438
1487
|
around do |interaktor|
|
1439
1488
|
@context.steps << :around_before4b
|
1440
1489
|
interaktor.call
|
@@ -1485,7 +1534,7 @@ describe "Integration" do
|
|
1485
1534
|
|
1486
1535
|
context "when a deeply nested call errors" do
|
1487
1536
|
let(:interaktor4b) {
|
1488
|
-
build_interaktor do
|
1537
|
+
FakeInteraktor.build_interaktor do
|
1489
1538
|
around do |interaktor|
|
1490
1539
|
@context.steps << :around_before4b
|
1491
1540
|
interaktor.call
|
@@ -1508,6 +1557,10 @@ describe "Integration" do
|
|
1508
1557
|
def rollback
|
1509
1558
|
@context.steps << :rollback4b
|
1510
1559
|
end
|
1560
|
+
|
1561
|
+
def unexpected_error!
|
1562
|
+
raise "foo"
|
1563
|
+
end
|
1511
1564
|
end
|
1512
1565
|
}
|
1513
1566
|
|
@@ -1546,7 +1599,7 @@ describe "Integration" do
|
|
1546
1599
|
|
1547
1600
|
context "when a deeply nested after hook fails" do
|
1548
1601
|
let(:interaktor4b) {
|
1549
|
-
build_interaktor do
|
1602
|
+
FakeInteraktor.build_interaktor do
|
1550
1603
|
around do |interaktor|
|
1551
1604
|
@context.steps << :around_before4b
|
1552
1605
|
interaktor.call
|
@@ -1598,7 +1651,7 @@ describe "Integration" do
|
|
1598
1651
|
|
1599
1652
|
context "when a deeply nested after hook errors" do
|
1600
1653
|
let(:interaktor4b) {
|
1601
|
-
build_interaktor do
|
1654
|
+
FakeInteraktor.build_interaktor do
|
1602
1655
|
around do |interaktor|
|
1603
1656
|
@context.steps << :around_before4b
|
1604
1657
|
interaktor.call
|
@@ -1621,6 +1674,10 @@ describe "Integration" do
|
|
1621
1674
|
def rollback
|
1622
1675
|
@context.steps << :rollback4b
|
1623
1676
|
end
|
1677
|
+
|
1678
|
+
def unexpected_error!
|
1679
|
+
raise "foo"
|
1680
|
+
end
|
1624
1681
|
end
|
1625
1682
|
}
|
1626
1683
|
|
@@ -1660,7 +1717,7 @@ describe "Integration" do
|
|
1660
1717
|
|
1661
1718
|
context "when a deeply nested around hook fails late" do
|
1662
1719
|
let(:interaktor4b) {
|
1663
|
-
build_interaktor do
|
1720
|
+
FakeInteraktor.build_interaktor do
|
1664
1721
|
around do |interaktor|
|
1665
1722
|
@context.steps << :around_before4b
|
1666
1723
|
interaktor.call
|
@@ -1712,7 +1769,7 @@ describe "Integration" do
|
|
1712
1769
|
|
1713
1770
|
context "when a deeply nested around hook errors late" do
|
1714
1771
|
let(:interaktor4b) {
|
1715
|
-
build_interaktor do
|
1772
|
+
FakeInteraktor.build_interaktor do
|
1716
1773
|
around do |interaktor|
|
1717
1774
|
@context.steps << :around_before4b
|
1718
1775
|
interaktor.call
|
@@ -1735,6 +1792,10 @@ describe "Integration" do
|
|
1735
1792
|
def rollback
|
1736
1793
|
@context.steps << :rollback4b
|
1737
1794
|
end
|
1795
|
+
|
1796
|
+
def unexpected_error!
|
1797
|
+
raise "foo"
|
1798
|
+
end
|
1738
1799
|
end
|
1739
1800
|
}
|
1740
1801
|
|
@@ -1774,7 +1835,17 @@ describe "Integration" do
|
|
1774
1835
|
|
1775
1836
|
context "when there are multiple organize calls" do
|
1776
1837
|
it "runs all passed interaktors in correct order" do
|
1777
|
-
organizer = build_organizer(organize: [organizer2, interaktor3])
|
1838
|
+
# organizer = build_organizer(organize: [organizer2, interaktor3])
|
1839
|
+
interaktors = ([organizer2, interaktor3])
|
1840
|
+
|
1841
|
+
organizer = FakeInteraktor.build_interaktor(type: Interaktor::Organizer) do
|
1842
|
+
organize(interaktors)
|
1843
|
+
|
1844
|
+
def unexpected_error!
|
1845
|
+
raise "foo"
|
1846
|
+
end
|
1847
|
+
end
|
1848
|
+
|
1778
1849
|
organizer.organize(organizer4, interaktor5)
|
1779
1850
|
|
1780
1851
|
expect {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# rubocop:disable RSpec/ScatteredSetup
|
2
2
|
|
3
3
|
module Interaktor
|
4
|
-
describe Hooks do
|
4
|
+
RSpec.describe Hooks do
|
5
5
|
describe "#with_hooks" do
|
6
6
|
def build_hooked(&block)
|
7
7
|
hooked = Class.new.send(:include, Interaktor::Hooks)
|
@@ -308,7 +308,95 @@ module Interaktor
|
|
308
308
|
end
|
309
309
|
end
|
310
310
|
|
311
|
-
context "with
|
311
|
+
context "with an ensure_hook method" do
|
312
|
+
let(:hooked) {
|
313
|
+
build_hooked do
|
314
|
+
ensure_hook :add_ensure
|
315
|
+
|
316
|
+
private
|
317
|
+
|
318
|
+
def add_ensure
|
319
|
+
steps << :ensure
|
320
|
+
end
|
321
|
+
end
|
322
|
+
}
|
323
|
+
|
324
|
+
it "runs the after hook method" do
|
325
|
+
expect(hooked.process).to eq([
|
326
|
+
:process,
|
327
|
+
:ensure,
|
328
|
+
])
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
context "with an ensure_hook block" do
|
333
|
+
let(:hooked) {
|
334
|
+
build_hooked do
|
335
|
+
ensure_hook do
|
336
|
+
steps << :ensure
|
337
|
+
end
|
338
|
+
end
|
339
|
+
}
|
340
|
+
|
341
|
+
it "runs the after hook block" do
|
342
|
+
expect(hooked.process).to eq([
|
343
|
+
:process,
|
344
|
+
:ensure,
|
345
|
+
])
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
349
|
+
context "with an ensure_hook method and block in one call" do
|
350
|
+
let(:hooked) {
|
351
|
+
build_hooked do
|
352
|
+
ensure_hook :add_ensure1 do
|
353
|
+
steps << :ensure2
|
354
|
+
end
|
355
|
+
|
356
|
+
private
|
357
|
+
|
358
|
+
def add_ensure1
|
359
|
+
steps << :ensure1
|
360
|
+
end
|
361
|
+
end
|
362
|
+
}
|
363
|
+
|
364
|
+
it "runs the ensure_hook method and block in order" do
|
365
|
+
expect(hooked.process).to eq([
|
366
|
+
:process,
|
367
|
+
:ensure1,
|
368
|
+
:ensure2,
|
369
|
+
])
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
context "with an ensure_hook method and block in multiple calls" do
|
374
|
+
let(:hooked) {
|
375
|
+
build_hooked do
|
376
|
+
ensure_hook do
|
377
|
+
steps << :ensure1
|
378
|
+
end
|
379
|
+
|
380
|
+
ensure_hook :add_ensure2
|
381
|
+
|
382
|
+
private
|
383
|
+
|
384
|
+
def add_ensure2
|
385
|
+
steps << :ensure2
|
386
|
+
end
|
387
|
+
end
|
388
|
+
}
|
389
|
+
|
390
|
+
it "runs the ensure_hook block and method in order" do
|
391
|
+
expect(hooked.process).to eq([
|
392
|
+
:process,
|
393
|
+
:ensure1,
|
394
|
+
:ensure2,
|
395
|
+
])
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
context "with around, before, after and ensure_hook hooks" do
|
312
400
|
let(:hooked) {
|
313
401
|
build_hooked do
|
314
402
|
around do |hooked|
|
@@ -338,6 +426,14 @@ module Interaktor
|
|
338
426
|
after do
|
339
427
|
steps << :after2
|
340
428
|
end
|
429
|
+
|
430
|
+
ensure_hook do
|
431
|
+
steps << :ensure1
|
432
|
+
end
|
433
|
+
|
434
|
+
ensure_hook do
|
435
|
+
steps << :ensure2
|
436
|
+
end
|
341
437
|
end
|
342
438
|
}
|
343
439
|
|
@@ -352,6 +448,8 @@ module Interaktor
|
|
352
448
|
:after1,
|
353
449
|
:around_after2,
|
354
450
|
:around_after1,
|
451
|
+
:ensure1,
|
452
|
+
:ensure2,
|
355
453
|
])
|
356
454
|
end
|
357
455
|
end
|