decouplio 1.0.0alpha7 → 1.0.0rc
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.
- checksums.yaml +4 -4
- data/README.md +313 -15
- data/decouplio.gemspec +8 -2
- data/lib/decouplio/action.rb +34 -74
- data/lib/decouplio/action_state_printer.rb +34 -0
- data/lib/decouplio/const/flows.rb +59 -0
- data/lib/decouplio/const/reserved_methods.rb +6 -13
- data/lib/decouplio/const/types.rb +1 -165
- data/lib/decouplio/const/validations/common.rb +10 -0
- data/lib/decouplio/const/validations/octo.rb +16 -0
- data/lib/decouplio/const/validations/resq.rb +12 -1
- data/lib/decouplio/ctx.rb +13 -0
- data/lib/decouplio/default_meta_store.rb +37 -0
- data/lib/decouplio/errors/action_class_error.rb +0 -3
- data/lib/decouplio/errors/base_error.rb +0 -3
- data/lib/decouplio/errors/execution_error.rb +0 -2
- data/lib/decouplio/errors/extra_key_for_pass_error.rb +0 -3
- data/lib/decouplio/errors/fail_can_not_be_first_step_error.rb +0 -3
- data/lib/decouplio/errors/fail_controversial_keys_error.rb +0 -3
- data/lib/decouplio/errors/fail_finish_him_error.rb +0 -3
- data/lib/decouplio/errors/invalid_error_class_error.rb +0 -3
- data/lib/decouplio/errors/invalid_options_for_resq_step.rb +18 -0
- data/lib/decouplio/errors/invalid_wrap_name_error.rb +0 -3
- data/lib/decouplio/errors/logic_is_not_defined_error.rb +0 -3
- data/lib/decouplio/errors/logic_redefinition_error.rb +0 -3
- data/lib/decouplio/errors/octo_block_is_not_defined_error.rb +0 -3
- data/lib/decouplio/errors/octo_case_is_not_defined_error.rb +19 -0
- data/lib/decouplio/errors/octo_controversial_keys_error.rb +0 -3
- data/lib/decouplio/errors/{error_store_error.rb → octo_finish_him_is_not_allowed_error.rb} +2 -4
- data/lib/decouplio/errors/options_validation_error.rb +13 -1
- data/lib/decouplio/errors/palp_block_is_not_defined_error.rb +0 -3
- data/lib/decouplio/errors/palp_validation_error.rb +0 -3
- data/lib/decouplio/errors/pass_controversial_keys_error.rb +0 -3
- data/lib/decouplio/errors/pass_finish_him_error.rb +0 -3
- data/lib/decouplio/errors/required_options_is_missing_for_octo_error.rb +0 -3
- data/lib/decouplio/errors/resq_definition_error.rb +0 -3
- data/lib/decouplio/errors/resq_error_class_error.rb +0 -3
- data/lib/decouplio/errors/resq_handler_method_error.rb +0 -3
- data/lib/decouplio/errors/step_controversial_keys_error.rb +0 -3
- data/lib/decouplio/errors/step_definition_error.rb +17 -0
- data/lib/decouplio/errors/step_finish_him_error.rb +0 -3
- data/lib/decouplio/errors/step_is_not_defined_for_fail_error.rb +0 -3
- data/lib/decouplio/errors/step_is_not_defined_for_pass_error.rb +0 -4
- data/lib/decouplio/errors/step_is_not_defined_for_step_error.rb +0 -4
- data/lib/decouplio/errors/step_is_not_defined_for_wrap_error.rb +0 -3
- data/lib/decouplio/errors/step_name_error.rb +0 -3
- data/lib/decouplio/errors/wrap_block_is_not_defined_error.rb +0 -3
- data/lib/decouplio/errors/wrap_controversial_keys_error.rb +0 -3
- data/lib/decouplio/errors/wrap_finish_him_error.rb +0 -3
- data/lib/decouplio/errors/wrap_klass_method_error.rb +0 -3
- data/lib/decouplio/graph.rb +9 -0
- data/lib/decouplio/logic_dsl.rb +337 -107
- data/lib/decouplio/new_flow.rb +283 -0
- data/lib/decouplio/octo_hash_case.rb +20 -5
- data/lib/decouplio/octo_options_validator.rb +10 -64
- data/lib/decouplio/step_validator.rb +200 -0
- data/lib/decouplio/steps/base_condition.rb +21 -0
- data/lib/decouplio/steps/base_if_condition.rb +11 -0
- data/lib/decouplio/steps/base_inner_action.rb +42 -0
- data/lib/decouplio/steps/base_octo.rb +26 -0
- data/lib/decouplio/steps/base_resq.rb +25 -28
- data/lib/decouplio/steps/base_resq_with_mapping.rb +34 -0
- data/lib/decouplio/steps/base_service_step.rb +39 -0
- data/lib/decouplio/steps/base_step.rb +33 -6
- data/lib/decouplio/steps/base_unless_condition.rb +11 -0
- data/lib/decouplio/steps/base_wrap.rb +27 -0
- data/lib/decouplio/steps/fail.rb +1 -28
- data/lib/decouplio/steps/if_condition_fail.rb +1 -21
- data/lib/decouplio/steps/if_condition_pass.rb +1 -19
- data/lib/decouplio/steps/inner_action_fail.rb +1 -33
- data/lib/decouplio/steps/inner_action_pass.rb +12 -30
- data/lib/decouplio/steps/inner_action_step.rb +1 -33
- data/lib/decouplio/steps/octo_by_key.rb +31 -0
- data/lib/decouplio/steps/octo_by_method.rb +31 -0
- data/lib/decouplio/steps/pass.rb +5 -26
- data/lib/decouplio/steps/resq_fail.rb +0 -2
- data/lib/decouplio/steps/resq_pass.rb +1 -3
- data/lib/decouplio/steps/resq_with_mapping_fail.rb +8 -0
- data/lib/decouplio/steps/resq_with_mapping_pass.rb +8 -0
- data/lib/decouplio/steps/service_as_fail.rb +8 -0
- data/lib/decouplio/steps/service_as_pass.rb +16 -0
- data/lib/decouplio/steps/service_as_step.rb +8 -0
- data/lib/decouplio/steps/step.rb +0 -24
- data/lib/decouplio/steps/unless_condition_fail.rb +1 -21
- data/lib/decouplio/steps/unless_condition_pass.rb +1 -19
- data/lib/decouplio/steps/wrap.rb +25 -37
- data/lib/decouplio/steps/wrap_with_class.rb +43 -0
- data/lib/decouplio/steps/wrap_with_class_method.rb +45 -0
- data/lib/decouplio/utils/prepare_resq_mappings.rb +17 -0
- data/lib/decouplio/version.rb +1 -1
- data/lib/decouplio.rb +93 -0
- metadata +32 -55
- data/.circleci/config.yml +0 -63
- data/.dockerignore +0 -12
- data/.gitignore +0 -13
- data/.rspec +0 -3
- data/.rubocop.yml +0 -116
- data/.rubocop_todo.yml +0 -147
- data/.ruby-version +0 -1
- data/.vscode/settings.json +0 -3
- data/Dockerfile +0 -12
- data/Gemfile +0 -8
- data/benchmarks/.ruby-version +0 -1
- data/benchmarks/Dockerfile +0 -12
- data/benchmarks/Gemfile +0 -12
- data/benchmarks/multi_step_benchmark.rb +0 -336
- data/benchmarks/single_step_benchmark.rb +0 -159
- data/bin/console +0 -15
- data/bin/setup +0 -8
- data/docker-compose.yml +0 -29
- data/lib/decouplio/composer.rb +0 -691
- data/lib/decouplio/const/colors.rb +0 -25
- data/lib/decouplio/const/doby_aide_options.rb +0 -16
- data/lib/decouplio/const/results.rb +0 -15
- data/lib/decouplio/const/step_options.rb +0 -16
- data/lib/decouplio/const/validations/aide.rb +0 -38
- data/lib/decouplio/const/validations/doby.rb +0 -36
- data/lib/decouplio/default_error_handler.rb +0 -39
- data/lib/decouplio/errors/aide_can_not_be_first_step_error.rb +0 -18
- data/lib/decouplio/errors/aide_controversial_keys_error.rb +0 -26
- data/lib/decouplio/errors/aide_finish_him_error.rb +0 -26
- data/lib/decouplio/errors/doby_controversial_keys_error.rb +0 -26
- data/lib/decouplio/errors/doby_finish_him_error.rb +0 -26
- data/lib/decouplio/errors/extra_key_for_fail_error.rb +0 -26
- data/lib/decouplio/errors/extra_key_for_octo_error.rb +0 -26
- data/lib/decouplio/errors/extra_key_for_resq_error.rb +0 -29
- data/lib/decouplio/errors/extra_key_for_step_error.rb +0 -23
- data/lib/decouplio/errors/extra_key_for_wrap_error.rb +0 -23
- data/lib/decouplio/errors/palp_is_not_defined_error.rb +0 -26
- data/lib/decouplio/errors/step_is_not_defined_for_aide_error.rb +0 -26
- data/lib/decouplio/errors/step_is_not_defined_for_doby_error.rb +0 -27
- data/lib/decouplio/flow.rb +0 -17
- data/lib/decouplio/options_validator.rb +0 -716
- data/lib/decouplio/processor.rb +0 -20
- data/lib/decouplio/steps/aide.rb +0 -37
- data/lib/decouplio/steps/doby.rb +0 -37
- data/lib/decouplio/steps/octo.rb +0 -27
- data/lib/decouplio/steps/service_fail.rb +0 -41
- data/lib/decouplio/steps/service_pass.rb +0 -41
- data/lib/decouplio/steps/service_step.rb +0 -41
- data/lib/decouplio/steps/shared/fail_resolver.rb +0 -40
- data/lib/decouplio/steps/shared/step_resolver.rb +0 -43
- data/lib/decouplio/validators/condition.rb +0 -59
data/lib/decouplio/logic_dsl.rb
CHANGED
@@ -1,25 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'flow'
|
4
|
-
require_relative 'const/types'
|
5
|
-
require_relative 'const/doby_aide_options'
|
6
|
-
require_relative 'const/step_options'
|
7
|
-
require_relative 'octo_hash_case'
|
8
|
-
require_relative 'errors/options_validation_error'
|
9
|
-
require_relative 'errors/palp_validation_error'
|
10
|
-
require_relative 'errors/resq_definition_error'
|
11
|
-
require_relative 'errors/wrap_block_is_not_defined_error'
|
12
|
-
require_relative 'errors/palp_block_is_not_defined_error'
|
13
|
-
require_relative 'errors/fail_can_not_be_first_step_error'
|
14
|
-
require_relative 'errors/aide_can_not_be_first_step_error'
|
15
|
-
require_relative 'errors/octo_block_is_not_defined_error'
|
16
|
-
|
17
3
|
module Decouplio
|
18
4
|
class LogicDsl
|
19
|
-
DEFAULT_WRAP_NAME = 'wrap'
|
20
|
-
|
21
5
|
class << self
|
22
|
-
attr_reader :steps
|
6
|
+
attr_reader :steps
|
23
7
|
|
24
8
|
def inherited(subclass)
|
25
9
|
subclass.init_steps
|
@@ -27,64 +11,199 @@ module Decouplio
|
|
27
11
|
|
28
12
|
def init_steps
|
29
13
|
@steps = []
|
30
|
-
@palps = {}
|
31
14
|
end
|
32
15
|
|
33
16
|
def step(stp, **options)
|
34
|
-
|
35
|
-
|
17
|
+
if_condition = options.delete(:if)
|
18
|
+
unless_condition = options.delete(:unless)
|
36
19
|
|
37
|
-
|
38
|
-
|
39
|
-
|
20
|
+
if if_condition && unless_condition
|
21
|
+
raise Decouplio::Errors::StepControversialKeysError.new(
|
22
|
+
errored_option: { if: if_condition, unless: unless_condition },
|
23
|
+
details: %i[if unless]
|
24
|
+
)
|
25
|
+
end
|
40
26
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
27
|
+
if if_condition
|
28
|
+
@steps << Decouplio::Steps::IfConditionPass.new(
|
29
|
+
if_condition
|
30
|
+
)
|
31
|
+
end
|
32
|
+
if unless_condition
|
33
|
+
@steps << Decouplio::Steps::UnlessConditionPass.new(
|
34
|
+
unless_condition
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
if stp.is_a?(Class)
|
39
|
+
if stp < Decouplio::Action
|
40
|
+
@steps << Decouplio::Steps::InnerActionStep.new(
|
41
|
+
stp.name.to_sym,
|
42
|
+
stp,
|
43
|
+
options.delete(:on_success),
|
44
|
+
options.delete(:on_failure),
|
45
|
+
options.delete(:on_error),
|
46
|
+
options.delete(:finish_him)
|
47
|
+
)
|
48
|
+
elsif stp.respond_to?(:call)
|
49
|
+
@steps << Decouplio::Steps::ServiceAsStep.new(
|
50
|
+
stp.name.to_sym,
|
51
|
+
stp,
|
52
|
+
options.delete(:on_success),
|
53
|
+
options.delete(:on_failure),
|
54
|
+
options.delete(:on_error),
|
55
|
+
options.delete(:finish_him),
|
56
|
+
options
|
57
|
+
)
|
58
|
+
else
|
59
|
+
raise Decouplio::Errors::ActionClassError.new(
|
60
|
+
step_type: :step,
|
61
|
+
errored_option: "step #{stp}"
|
62
|
+
)
|
63
|
+
end
|
47
64
|
else
|
48
|
-
@steps <<
|
65
|
+
@steps << Decouplio::Steps::Step.new(
|
66
|
+
stp,
|
67
|
+
options.delete(:on_success),
|
68
|
+
options.delete(:on_failure),
|
69
|
+
options.delete(:on_error),
|
70
|
+
options.delete(:finish_him)
|
71
|
+
)
|
49
72
|
end
|
50
73
|
end
|
51
74
|
|
52
75
|
def fail(stp, **options)
|
53
76
|
raise Decouplio::Errors::FailCanNotBeFirstStepError if @steps.empty?
|
54
77
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
78
|
+
if_condition = options.delete(:if)
|
79
|
+
unless_condition = options.delete(:unless)
|
80
|
+
|
81
|
+
if if_condition && unless_condition
|
82
|
+
raise Decouplio::Errors::FailControversialKeysError.new(
|
83
|
+
errored_option: { if: if_condition, unless: unless_condition },
|
84
|
+
details: %i[if unless]
|
85
|
+
)
|
86
|
+
end
|
60
87
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
88
|
+
if if_condition
|
89
|
+
@steps << Decouplio::Steps::IfConditionFail.new(
|
90
|
+
if_condition
|
91
|
+
)
|
92
|
+
end
|
93
|
+
if unless_condition
|
94
|
+
@steps << Decouplio::Steps::UnlessConditionFail.new(
|
95
|
+
unless_condition
|
96
|
+
)
|
97
|
+
end
|
98
|
+
|
99
|
+
if stp.is_a?(Class)
|
100
|
+
if stp < Decouplio::Action
|
101
|
+
@steps << Decouplio::Steps::InnerActionFail.new(
|
102
|
+
stp.name.to_sym,
|
103
|
+
stp,
|
104
|
+
options.delete(:on_success),
|
105
|
+
options.delete(:on_failure),
|
106
|
+
options.delete(:on_error),
|
107
|
+
options.delete(:finish_him)
|
108
|
+
)
|
109
|
+
elsif stp.respond_to?(:call)
|
110
|
+
@steps << Decouplio::Steps::ServiceAsFail.new(
|
111
|
+
stp.name.to_sym,
|
112
|
+
stp,
|
113
|
+
options.delete(:on_success),
|
114
|
+
options.delete(:on_failure),
|
115
|
+
options.delete(:on_error),
|
116
|
+
options.delete(:finish_him),
|
117
|
+
options
|
118
|
+
)
|
119
|
+
else
|
120
|
+
raise Decouplio::Errors::ActionClassError.new(
|
121
|
+
step_type: :fail,
|
122
|
+
errored_option: "fail #{stp}"
|
123
|
+
)
|
124
|
+
end
|
67
125
|
else
|
68
|
-
@steps <<
|
126
|
+
@steps << Decouplio::Steps::Fail.new(
|
127
|
+
stp,
|
128
|
+
options.delete(:on_success),
|
129
|
+
options.delete(:on_failure),
|
130
|
+
options.delete(:on_error),
|
131
|
+
options.delete(:finish_him)
|
132
|
+
)
|
69
133
|
end
|
70
134
|
end
|
71
135
|
|
72
136
|
def pass(stp, **options)
|
73
|
-
|
74
|
-
|
137
|
+
on_success = options.delete(:on_success)
|
138
|
+
on_failure = options.delete(:on_failure)
|
75
139
|
|
76
|
-
|
77
|
-
|
78
|
-
|
140
|
+
if on_success
|
141
|
+
raise Decouplio::Errors::ExtraKeyForPassError.new(
|
142
|
+
errored_option: { on_success: on_success },
|
143
|
+
details: :on_success
|
144
|
+
)
|
145
|
+
elsif on_failure
|
146
|
+
raise Decouplio::Errors::ExtraKeyForPassError.new(
|
147
|
+
errored_option: { on_failure: on_failure },
|
148
|
+
details: :on_failure
|
149
|
+
)
|
150
|
+
end
|
151
|
+
|
152
|
+
if_condition = options.delete(:if)
|
153
|
+
unless_condition = options.delete(:unless)
|
154
|
+
|
155
|
+
if if_condition && unless_condition
|
156
|
+
raise Decouplio::Errors::PassControversialKeysError.new(
|
157
|
+
errored_option: { if: if_condition, unless: unless_condition },
|
158
|
+
details: %i[if unless]
|
159
|
+
)
|
160
|
+
end
|
161
|
+
|
162
|
+
if if_condition
|
163
|
+
@steps << Decouplio::Steps::IfConditionPass.new(
|
164
|
+
if_condition
|
165
|
+
)
|
166
|
+
end
|
167
|
+
if unless_condition
|
168
|
+
@steps << Decouplio::Steps::UnlessConditionPass.new(
|
169
|
+
unless_condition
|
170
|
+
)
|
171
|
+
end
|
79
172
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
173
|
+
if stp.is_a?(Class)
|
174
|
+
if stp < Decouplio::Action
|
175
|
+
@steps << Decouplio::Steps::InnerActionPass.new(
|
176
|
+
stp.name.to_sym,
|
177
|
+
stp,
|
178
|
+
nil,
|
179
|
+
nil,
|
180
|
+
options.delete(:on_error),
|
181
|
+
options.delete(:finish_him)
|
182
|
+
)
|
183
|
+
elsif stp.respond_to?(:call)
|
184
|
+
@steps << Decouplio::Steps::ServiceAsPass.new(
|
185
|
+
stp.name.to_sym,
|
186
|
+
stp,
|
187
|
+
nil,
|
188
|
+
nil,
|
189
|
+
options.delete(:on_error),
|
190
|
+
options.delete(:finish_him),
|
191
|
+
options
|
192
|
+
)
|
193
|
+
else
|
194
|
+
raise Decouplio::Errors::ActionClassError.new(
|
195
|
+
step_type: :pass,
|
196
|
+
errored_option: "pass #{stp}"
|
197
|
+
)
|
198
|
+
end
|
86
199
|
else
|
87
|
-
@steps <<
|
200
|
+
@steps << Decouplio::Steps::Pass.new(
|
201
|
+
stp,
|
202
|
+
nil,
|
203
|
+
nil,
|
204
|
+
options.delete(:on_error),
|
205
|
+
options.delete(:finish_him)
|
206
|
+
)
|
88
207
|
end
|
89
208
|
end
|
90
209
|
|
@@ -95,77 +214,188 @@ module Decouplio
|
|
95
214
|
|
96
215
|
raise Decouplio::Errors::OctoBlockIsNotDefinedError if hash_case.empty?
|
97
216
|
|
98
|
-
|
99
|
-
|
100
|
-
end
|
217
|
+
if_condition = options.delete(:if)
|
218
|
+
unless_condition = options.delete(:unless)
|
101
219
|
|
102
|
-
|
103
|
-
|
220
|
+
if if_condition && unless_condition
|
221
|
+
raise Decouplio::Errors::OctoControversialKeysError.new(
|
222
|
+
errored_option: { if: if_condition, unless: unless_condition },
|
223
|
+
details: %i[if unless]
|
224
|
+
)
|
225
|
+
end
|
104
226
|
|
105
|
-
|
227
|
+
if if_condition
|
228
|
+
@steps << Decouplio::Steps::IfConditionPass.new(
|
229
|
+
if_condition
|
230
|
+
)
|
231
|
+
end
|
232
|
+
if unless_condition
|
233
|
+
@steps << Decouplio::Steps::UnlessConditionPass.new(
|
234
|
+
unless_condition
|
235
|
+
)
|
236
|
+
end
|
106
237
|
|
107
|
-
|
238
|
+
by_method = options.delete(:method)
|
239
|
+
by_key = options.delete(:ctx_key)
|
240
|
+
finish_him = options.delete(:finish_him)
|
241
|
+
on_success = options.delete(:on_success)
|
242
|
+
on_failure = options.delete(:on_failure)
|
243
|
+
on_error = options.delete(:on_error)
|
244
|
+
|
245
|
+
raise Decouplio::Errors::OctoFinishHimIsNotAllowedError if finish_him
|
246
|
+
|
247
|
+
if by_key && by_method
|
248
|
+
raise Decouplio::Errors::OctoControversialKeysError.new(
|
249
|
+
errored_option: { ctx_key: by_key, method: by_method },
|
250
|
+
details: %i[ctx_key method]
|
251
|
+
)
|
252
|
+
end
|
253
|
+
|
254
|
+
if by_method
|
255
|
+
@steps << Decouplio::Steps::OctoByMethod.new(
|
256
|
+
octo_name,
|
257
|
+
by_method,
|
258
|
+
hash_case,
|
259
|
+
on_success,
|
260
|
+
on_failure,
|
261
|
+
on_error,
|
262
|
+
finish_him
|
263
|
+
)
|
264
|
+
elsif by_key
|
265
|
+
@steps << Decouplio::Steps::OctoByKey.new(
|
266
|
+
octo_name,
|
267
|
+
by_key,
|
268
|
+
hash_case,
|
269
|
+
on_success,
|
270
|
+
on_failure,
|
271
|
+
on_error,
|
272
|
+
finish_him
|
273
|
+
)
|
274
|
+
else
|
275
|
+
raise Decouplio::Errors::RequiredOptionsIsMissingForOctoError.new(
|
276
|
+
details: 'ctx_key, method'
|
277
|
+
)
|
278
|
+
end
|
108
279
|
end
|
109
280
|
|
110
|
-
def resq(name =
|
111
|
-
unless Decouplio::Const::
|
281
|
+
def resq(name = nil, **options)
|
282
|
+
unless Decouplio::Const::Flows::MAIN_FLOW.include?(@steps.last.class)
|
112
283
|
raise Decouplio::Errors::ResqDefinitionError
|
113
284
|
end
|
114
285
|
|
115
|
-
@steps
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
286
|
+
last_step = @steps.delete(@steps.last)
|
287
|
+
|
288
|
+
resq_step = if name.is_a?(Symbol)
|
289
|
+
if Decouplio::Const::Flows::PASS_FLOW.include?(last_step.class)
|
290
|
+
Decouplio::Steps::ResqPass.new(
|
291
|
+
last_step.name,
|
292
|
+
name
|
293
|
+
)
|
294
|
+
elsif Decouplio::Const::Flows::FAIL_FLOW.include?(last_step.class)
|
295
|
+
Decouplio::Steps::ResqFail.new(
|
296
|
+
last_step.name,
|
297
|
+
name
|
298
|
+
)
|
299
|
+
else
|
300
|
+
raise StandardError, 'Most likely it is a bug, please create an issue here https://github.com/differencialx/decouplio/issues'
|
301
|
+
end
|
302
|
+
elsif options.size.positive?
|
303
|
+
if Decouplio::Const::Flows::PASS_FLOW.include?(last_step.class)
|
304
|
+
Decouplio::Steps::ResqWithMappingPass.new(
|
305
|
+
last_step.name,
|
306
|
+
Decouplio::Utils::PrepareResqMappings.call(options)
|
307
|
+
)
|
308
|
+
elsif Decouplio::Const::Flows::FAIL_FLOW.include?(last_step.class)
|
309
|
+
Decouplio::Steps::ResqWithMappingFail.new(
|
310
|
+
last_step.name,
|
311
|
+
Decouplio::Utils::PrepareResqMappings.call(options)
|
312
|
+
)
|
313
|
+
else
|
314
|
+
raise StandardError, 'Most likely it is a bug, please create an issue here https://github.com/differencialx/decouplio/issues'
|
315
|
+
end
|
316
|
+
else
|
317
|
+
raise Decouplio::Errors::InvalidOptionsForResqStep.new(
|
318
|
+
errored_option: "resq -->#{name}<--, -->#{options}<--"
|
319
|
+
)
|
320
|
+
end
|
321
|
+
if last_step.is_a?(Decouplio::Steps::BaseOcto)
|
322
|
+
last_step._add_resq(resq_step)
|
323
|
+
@steps << last_step
|
324
|
+
else
|
325
|
+
resq_step._add_step_to_resq(last_step)
|
326
|
+
@steps << resq_step
|
327
|
+
end
|
121
328
|
end
|
122
329
|
|
123
330
|
def wrap(name = nil, **options, &block)
|
124
331
|
raise Decouplio::Errors::WrapBlockIsNotDefinedError unless block_given?
|
125
332
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
)
|
131
|
-
|
333
|
+
wrap_class = options.delete(:klass)
|
334
|
+
wrap_method = options.delete(:method)
|
335
|
+
if_condition = options.delete(:if)
|
336
|
+
unless_condition = options.delete(:unless)
|
337
|
+
finish_him = options.delete(:finish_him)
|
338
|
+
on_success = options.delete(:on_success)
|
339
|
+
on_failure = options.delete(:on_failure)
|
340
|
+
on_error = options.delete(:on_error)
|
132
341
|
|
133
|
-
|
134
|
-
warn(
|
135
|
-
'DEPRECATION WARNING: "doby" step type will be deprecated at alpha8 version. Use "step" or "pass" instead.'
|
136
|
-
)
|
137
|
-
step_options = {}
|
138
|
-
options.each_key do |key|
|
139
|
-
step_options[key] = options.delete(key) if Decouplio::Const::DobyAideOptions::ALLOWED.include?(key)
|
140
|
-
end
|
141
|
-
doby_options = options
|
142
|
-
|
143
|
-
@steps << {
|
144
|
-
type: Decouplio::Const::Types::DOBY_TYPE,
|
145
|
-
name: doby_class.name.to_sym,
|
146
|
-
doby_class: doby_class,
|
147
|
-
doby_options: doby_options,
|
148
|
-
**step_options
|
149
|
-
}
|
150
|
-
end
|
342
|
+
raise Decouplio::Errors::InvalidWrapNameError unless name
|
151
343
|
|
152
|
-
|
153
|
-
|
154
|
-
|
344
|
+
if if_condition && unless_condition
|
345
|
+
raise Decouplio::Errors::WrapControversialKeysError.new(
|
346
|
+
errored_option: { if: if_condition, unless: unless_condition },
|
347
|
+
details: %i[if unless]
|
348
|
+
)
|
349
|
+
end
|
155
350
|
|
156
|
-
|
157
|
-
|
158
|
-
|
351
|
+
if if_condition
|
352
|
+
@steps << Decouplio::Steps::IfConditionPass.new(
|
353
|
+
if_condition
|
354
|
+
)
|
355
|
+
end
|
356
|
+
if unless_condition
|
357
|
+
@steps << Decouplio::Steps::UnlessConditionPass.new(
|
358
|
+
unless_condition
|
359
|
+
)
|
159
360
|
end
|
160
|
-
aide_options = options
|
161
361
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
362
|
+
wrap_block = block
|
363
|
+
|
364
|
+
if wrap_class && wrap_method
|
365
|
+
@steps << Decouplio::Steps::WrapWithClassMethod.new(
|
366
|
+
name,
|
367
|
+
wrap_block,
|
368
|
+
wrap_class,
|
369
|
+
wrap_method,
|
370
|
+
on_success,
|
371
|
+
on_failure,
|
372
|
+
on_error,
|
373
|
+
finish_him
|
374
|
+
)
|
375
|
+
elsif wrap_class
|
376
|
+
@steps << Decouplio::Steps::WrapWithClass.new(
|
377
|
+
name,
|
378
|
+
wrap_block,
|
379
|
+
wrap_class,
|
380
|
+
on_success,
|
381
|
+
on_failure,
|
382
|
+
on_error,
|
383
|
+
finish_him
|
384
|
+
)
|
385
|
+
elsif wrap_method
|
386
|
+
raise Decouplio::Errors::WrapKlassMethodError.new(
|
387
|
+
errored_option: { method: wrap_method }
|
388
|
+
)
|
389
|
+
else
|
390
|
+
@steps << Decouplio::Steps::Wrap.new(
|
391
|
+
name,
|
392
|
+
wrap_block,
|
393
|
+
on_success,
|
394
|
+
on_failure,
|
395
|
+
on_error,
|
396
|
+
finish_him
|
397
|
+
)
|
398
|
+
end
|
169
399
|
end
|
170
400
|
end
|
171
401
|
end
|