decouplio 1.0.0alpha
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 +7 -0
- data/.circleci/config.yml +53 -0
- data/.dockerignore +12 -0
- data/.gitignore +13 -0
- data/.rspec +3 -0
- data/.rubocop.yml +106 -0
- data/.rubocop_todo.yml +147 -0
- data/.ruby-version +1 -0
- data/.vscode/settings.json +3 -0
- data/Dockerfile +12 -0
- data/Gemfile +8 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +21 -0
- data/README.md +29 -0
- data/Rakefile +8 -0
- data/benchmarks/.ruby-version +1 -0
- data/benchmarks/Dockerfile +12 -0
- data/benchmarks/Gemfile +11 -0
- data/benchmarks/benchmarks.rb +527 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/decouplio.gemspec +40 -0
- data/docker-compose.yml +18 -0
- data/docs/_config.yml +1 -0
- data/docs/benchmarks.md +1 -0
- data/docs/context.md +74 -0
- data/docs/context.rb +62 -0
- data/docs/doby.md +80 -0
- data/docs/doby.rb +38 -0
- data/docs/error_store.md +347 -0
- data/docs/error_store.rb +202 -0
- data/docs/fail.md +1016 -0
- data/docs/fail.rb +762 -0
- data/docs/index.md +25 -0
- data/docs/inner_action.md +63 -0
- data/docs/inner_action.rb +43 -0
- data/docs/logic_block.md +25 -0
- data/docs/octo.md +269 -0
- data/docs/octo.rb +164 -0
- data/docs/pass.md +309 -0
- data/docs/pass.rb +213 -0
- data/docs/quick_start.md +71 -0
- data/docs/quick_start.rb +38 -0
- data/docs/resq.md +263 -0
- data/docs/resq.rb +176 -0
- data/docs/step.md +737 -0
- data/docs/step.rb +526 -0
- data/docs/step_as_a_service.md +109 -0
- data/docs/step_as_a_service.rb +77 -0
- data/docs/wrap.md +232 -0
- data/docs/wrap.rb +137 -0
- data/lib/decouplio/action.rb +111 -0
- data/lib/decouplio/composer.rb +599 -0
- data/lib/decouplio/const/colors.rb +25 -0
- data/lib/decouplio/const/reserved_methods.rb +18 -0
- data/lib/decouplio/const/results.rb +13 -0
- data/lib/decouplio/const/types.rb +173 -0
- data/lib/decouplio/const/validations/action_option_class.rb +17 -0
- data/lib/decouplio/const/validations/common.rb +14 -0
- data/lib/decouplio/const/validations/fail.rb +34 -0
- data/lib/decouplio/const/validations/logic.rb +15 -0
- data/lib/decouplio/const/validations/octo.rb +44 -0
- data/lib/decouplio/const/validations/palp.rb +20 -0
- data/lib/decouplio/const/validations/pass.rb +32 -0
- data/lib/decouplio/const/validations/resq.rb +67 -0
- data/lib/decouplio/const/validations/step.rb +35 -0
- data/lib/decouplio/const/validations/wrap.rb +41 -0
- data/lib/decouplio/default_error_handler.rb +24 -0
- data/lib/decouplio/errors/action_class_error.rb +26 -0
- data/lib/decouplio/errors/base_error.rb +30 -0
- data/lib/decouplio/errors/error_store_error.rb +17 -0
- data/lib/decouplio/errors/extra_key_for_fail_error.rb +26 -0
- data/lib/decouplio/errors/extra_key_for_octo_error.rb +26 -0
- data/lib/decouplio/errors/extra_key_for_pass_error.rb +26 -0
- data/lib/decouplio/errors/extra_key_for_resq_error.rb +29 -0
- data/lib/decouplio/errors/extra_key_for_step_error.rb +23 -0
- data/lib/decouplio/errors/extra_key_for_wrap_error.rb +23 -0
- data/lib/decouplio/errors/fail_controversial_keys_error.rb +26 -0
- data/lib/decouplio/errors/fail_finish_him_error.rb +26 -0
- data/lib/decouplio/errors/fail_is_first_step_error.rb +18 -0
- data/lib/decouplio/errors/invalid_error_class_error.rb +29 -0
- data/lib/decouplio/errors/invalid_wrap_name_error.rb +23 -0
- data/lib/decouplio/errors/logic_is_not_defined_error.rb +23 -0
- data/lib/decouplio/errors/logic_redefinition_error.rb +23 -0
- data/lib/decouplio/errors/octo_block_is_not_defined_error.rb +18 -0
- data/lib/decouplio/errors/octo_controversial_keys_error.rb +26 -0
- data/lib/decouplio/errors/options_validation_error.rb +7 -0
- data/lib/decouplio/errors/palp_block_is_not_defined_error.rb +18 -0
- data/lib/decouplio/errors/palp_is_not_defined_error.rb +26 -0
- data/lib/decouplio/errors/palp_validation_error.rb +21 -0
- data/lib/decouplio/errors/pass_controversial_keys_error.rb +26 -0
- data/lib/decouplio/errors/pass_finish_him_error.rb +26 -0
- data/lib/decouplio/errors/required_options_is_missing_for_octo_error.rb +25 -0
- data/lib/decouplio/errors/resq_definition_error.rb +21 -0
- data/lib/decouplio/errors/resq_error_class_error.rb +29 -0
- data/lib/decouplio/errors/resq_handler_method_error.rb +26 -0
- data/lib/decouplio/errors/step_controversial_keys_error.rb +26 -0
- data/lib/decouplio/errors/step_finish_him_error.rb +26 -0
- data/lib/decouplio/errors/step_is_not_defined_for_fail_error.rb +26 -0
- data/lib/decouplio/errors/step_is_not_defined_for_step_error.rb +27 -0
- data/lib/decouplio/errors/step_is_not_defined_for_wrap_error.rb +26 -0
- data/lib/decouplio/errors/step_name_error.rb +20 -0
- data/lib/decouplio/errors/wrap_block_is_not_defined_error.rb +18 -0
- data/lib/decouplio/errors/wrap_controversial_keys_error.rb +26 -0
- data/lib/decouplio/errors/wrap_finish_him_error.rb +26 -0
- data/lib/decouplio/errors/wrap_klass_method_error.rb +23 -0
- data/lib/decouplio/flow.rb +17 -0
- data/lib/decouplio/logic_dsl.rb +96 -0
- data/lib/decouplio/octo_hash_case.rb +31 -0
- data/lib/decouplio/octo_options_validator.rb +89 -0
- data/lib/decouplio/options_validator.rb +566 -0
- data/lib/decouplio/processor.rb +20 -0
- data/lib/decouplio/steps/base_resq.rb +31 -0
- data/lib/decouplio/steps/base_step.rb +16 -0
- data/lib/decouplio/steps/doby.rb +32 -0
- data/lib/decouplio/steps/fail.rb +50 -0
- data/lib/decouplio/steps/if_condition_fail.rb +28 -0
- data/lib/decouplio/steps/if_condition_pass.rb +26 -0
- data/lib/decouplio/steps/inner_action_fail.rb +55 -0
- data/lib/decouplio/steps/inner_action_pass.rb +38 -0
- data/lib/decouplio/steps/inner_action_step.rb +51 -0
- data/lib/decouplio/steps/octo.rb +22 -0
- data/lib/decouplio/steps/pass.rb +35 -0
- data/lib/decouplio/steps/resq_fail.rb +10 -0
- data/lib/decouplio/steps/resq_pass.rb +10 -0
- data/lib/decouplio/steps/service_fail.rb +51 -0
- data/lib/decouplio/steps/service_pass.rb +36 -0
- data/lib/decouplio/steps/service_step.rb +47 -0
- data/lib/decouplio/steps/step.rb +43 -0
- data/lib/decouplio/steps/unless_condition_fail.rb +28 -0
- data/lib/decouplio/steps/unless_condition_pass.rb +26 -0
- data/lib/decouplio/steps/wrap.rb +62 -0
- data/lib/decouplio/validators/condition.rb +49 -0
- data/lib/decouplio/version.rb +5 -0
- data/lib/decouplio.rb +7 -0
- metadata +266 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class Fail < BaseStep
|
8
|
+
def initialize(name:, on_success_type:, on_failure_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@on_success_type = on_success_type
|
12
|
+
@on_failure_type = on_failure_type
|
13
|
+
end
|
14
|
+
|
15
|
+
def process(instance:)
|
16
|
+
instance.append_railway_flow(@name)
|
17
|
+
result = instance.send(@name, **instance.ctx)
|
18
|
+
|
19
|
+
resolve(result: result, instance: instance)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def resolve(result:, instance:)
|
25
|
+
if result
|
26
|
+
case @on_success_type
|
27
|
+
when Decouplio::Const::Results::PASS
|
28
|
+
instance.pass_action
|
29
|
+
Decouplio::Const::Results::PASS
|
30
|
+
when Decouplio::Const::Results::FAIL
|
31
|
+
instance.fail_action
|
32
|
+
Decouplio::Const::Results::PASS
|
33
|
+
when Decouplio::Const::Results::FINISH_HIM
|
34
|
+
instance.fail_action
|
35
|
+
Decouplio::Const::Results::FINISH_HIM
|
36
|
+
end
|
37
|
+
elsif @on_failure_type == Decouplio::Const::Results::PASS
|
38
|
+
instance.pass_action
|
39
|
+
Decouplio::Const::Results::FAIL
|
40
|
+
elsif @on_failure_type == Decouplio::Const::Results::FAIL
|
41
|
+
instance.fail_action
|
42
|
+
Decouplio::Const::Results::FAIL
|
43
|
+
elsif @on_failure_type == Decouplio::Const::Results::FINISH_HIM
|
44
|
+
instance.fail_action
|
45
|
+
Decouplio::Const::Results::FINISH_HIM
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class IfConditionFail < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
end
|
12
|
+
|
13
|
+
def process(instance:)
|
14
|
+
result = instance.send(@name, **instance.ctx)
|
15
|
+
|
16
|
+
resolve(result: result, instance: instance)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def resolve(result:, instance:)
|
22
|
+
instance.fail_action
|
23
|
+
|
24
|
+
result ? Decouplio::Const::Results::PASS : Decouplio::Const::Results::FAIL
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class IfConditionPass < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
end
|
12
|
+
|
13
|
+
def process(instance:)
|
14
|
+
result = instance.send(@name, **instance.ctx)
|
15
|
+
|
16
|
+
resolve(result: result)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def resolve(result:)
|
22
|
+
result ? Decouplio::Const::Results::PASS : Decouplio::Const::Results::FAIL
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class InnerActionFail < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:, action:, on_success_type:, on_failure_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@action = action
|
12
|
+
@on_success_type = on_success_type
|
13
|
+
@on_failure_type = on_failure_type
|
14
|
+
end
|
15
|
+
|
16
|
+
def process(instance:)
|
17
|
+
instance.append_railway_flow(@name)
|
18
|
+
outcome = @action.call(parent_ctx: instance.ctx, parent_railway_flow: instance.railway_flow)
|
19
|
+
|
20
|
+
resolve(outcome: outcome, instance: instance)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def resolve(outcome:, instance:)
|
26
|
+
result = outcome.success?
|
27
|
+
|
28
|
+
instance.error_store.merge(outcome.error_store)
|
29
|
+
|
30
|
+
if result
|
31
|
+
case @on_success_type
|
32
|
+
when Decouplio::Const::Results::PASS
|
33
|
+
instance.pass_action
|
34
|
+
Decouplio::Const::Results::PASS
|
35
|
+
when Decouplio::Const::Results::FAIL
|
36
|
+
instance.fail_action
|
37
|
+
Decouplio::Const::Results::PASS
|
38
|
+
when Decouplio::Const::Results::FINISH_HIM
|
39
|
+
instance.fail_action
|
40
|
+
Decouplio::Const::Results::FINISH_HIM
|
41
|
+
end
|
42
|
+
elsif @on_failure_type == Decouplio::Const::Results::PASS
|
43
|
+
instance.pass_action
|
44
|
+
Decouplio::Const::Results::FAIL
|
45
|
+
elsif @on_failure_type == Decouplio::Const::Results::FAIL
|
46
|
+
instance.fail_action
|
47
|
+
Decouplio::Const::Results::FAIL
|
48
|
+
elsif @on_failure_type == Decouplio::Const::Results::FINISH_HIM
|
49
|
+
instance.fail_action
|
50
|
+
Decouplio::Const::Results::FINISH_HIM
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class InnerActionPass < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:, action:, on_success_type:, on_failure_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@action = action
|
12
|
+
@on_success_type = on_success_type
|
13
|
+
@on_failure_type = on_failure_type
|
14
|
+
end
|
15
|
+
|
16
|
+
def process(instance:)
|
17
|
+
instance.append_railway_flow(@name)
|
18
|
+
outcome = @action.call(parent_ctx: instance.ctx, parent_railway_flow: instance.railway_flow)
|
19
|
+
|
20
|
+
resolve(outcome: outcome, instance: instance)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def resolve(outcome:, instance:)
|
26
|
+
instance.error_store.merge(outcome.error_store)
|
27
|
+
|
28
|
+
instance.pass_action
|
29
|
+
|
30
|
+
if @on_success_type == Decouplio::Const::Results::FINISH_HIM
|
31
|
+
Decouplio::Const::Results::FINISH_HIM
|
32
|
+
else
|
33
|
+
Decouplio::Const::Results::PASS
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class InnerActionStep < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:, action:, on_success_type:, on_failure_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@action = action
|
12
|
+
@on_success_type = on_success_type
|
13
|
+
@on_failure_type = on_failure_type
|
14
|
+
end
|
15
|
+
|
16
|
+
def process(instance:)
|
17
|
+
instance.append_railway_flow(@name)
|
18
|
+
outcome = @action.call(parent_ctx: instance.ctx, parent_railway_flow: instance.railway_flow)
|
19
|
+
|
20
|
+
resolve(outcome: outcome, instance: instance)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def resolve(outcome:, instance:)
|
26
|
+
result = outcome.success?
|
27
|
+
|
28
|
+
instance.error_store.merge(outcome.error_store)
|
29
|
+
|
30
|
+
if result
|
31
|
+
if [Decouplio::Const::Results::PASS, Decouplio::Const::Results::FAIL].include?(@on_success_type)
|
32
|
+
instance.pass_action
|
33
|
+
Decouplio::Const::Results::PASS
|
34
|
+
elsif @on_success_type == Decouplio::Const::Results::FINISH_HIM
|
35
|
+
instance.pass_action
|
36
|
+
Decouplio::Const::Results::FINISH_HIM
|
37
|
+
end
|
38
|
+
elsif @on_failure_type == Decouplio::Const::Results::PASS
|
39
|
+
instance.pass_action
|
40
|
+
Decouplio::Const::Results::FAIL
|
41
|
+
elsif @on_failure_type == Decouplio::Const::Results::FAIL
|
42
|
+
instance.fail_action
|
43
|
+
Decouplio::Const::Results::FAIL
|
44
|
+
elsif @on_failure_type == Decouplio::Const::Results::FINISH_HIM
|
45
|
+
instance.fail_action
|
46
|
+
Decouplio::Const::Results::FINISH_HIM
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class Octo < BaseStep
|
8
|
+
attr_accessor :hash_case
|
9
|
+
|
10
|
+
def initialize(name:, ctx_key:)
|
11
|
+
super()
|
12
|
+
@name = name
|
13
|
+
@ctx_key = ctx_key
|
14
|
+
end
|
15
|
+
|
16
|
+
def process(instance:)
|
17
|
+
instance.append_railway_flow(@name)
|
18
|
+
instance[@ctx_key]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class Pass < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:, on_success_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@on_success_type = on_success_type
|
12
|
+
end
|
13
|
+
|
14
|
+
def process(instance:)
|
15
|
+
instance.append_railway_flow(@name)
|
16
|
+
instance.send(@name, **instance.ctx)
|
17
|
+
|
18
|
+
resolve(instance: instance)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def resolve(instance:)
|
24
|
+
instance.pass_action
|
25
|
+
|
26
|
+
if @on_success_type == Decouplio::Const::Results::FINISH_HIM
|
27
|
+
Decouplio::Const::Results::FINISH_HIM
|
28
|
+
else
|
29
|
+
instance.pass_action
|
30
|
+
Decouplio::Const::Results::PASS
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class ServiceFail < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:, service:, on_success_type:, on_failure_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@service = service
|
12
|
+
@on_success_type = on_success_type
|
13
|
+
@on_failure_type = on_failure_type
|
14
|
+
end
|
15
|
+
|
16
|
+
def process(instance:)
|
17
|
+
instance.append_railway_flow(@name)
|
18
|
+
result = @service.call(ctx: instance.ctx)
|
19
|
+
|
20
|
+
resolve(result: result, instance: instance)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def resolve(result:, instance:)
|
26
|
+
if result
|
27
|
+
case @on_success_type
|
28
|
+
when Decouplio::Const::Results::PASS
|
29
|
+
instance.pass_action
|
30
|
+
Decouplio::Const::Results::PASS
|
31
|
+
when Decouplio::Const::Results::FAIL
|
32
|
+
instance.fail_action
|
33
|
+
Decouplio::Const::Results::PASS
|
34
|
+
when Decouplio::Const::Results::FINISH_HIM
|
35
|
+
instance.fail_action
|
36
|
+
Decouplio::Const::Results::FINISH_HIM
|
37
|
+
end
|
38
|
+
elsif @on_failure_type == Decouplio::Const::Results::PASS
|
39
|
+
instance.pass_action
|
40
|
+
Decouplio::Const::Results::FAIL
|
41
|
+
elsif @on_failure_type == Decouplio::Const::Results::FAIL
|
42
|
+
instance.fail_action
|
43
|
+
Decouplio::Const::Results::FAIL
|
44
|
+
elsif @on_failure_type == Decouplio::Const::Results::FINISH_HIM
|
45
|
+
instance.fail_action
|
46
|
+
Decouplio::Const::Results::FINISH_HIM
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class ServicePass < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:, service:, on_success_type:, on_failure_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@service = service
|
12
|
+
@on_success_type = on_success_type
|
13
|
+
@on_failure_type = on_failure_type
|
14
|
+
end
|
15
|
+
|
16
|
+
def process(instance:)
|
17
|
+
instance.append_railway_flow(@name)
|
18
|
+
@service.call(ctx: instance.ctx)
|
19
|
+
|
20
|
+
resolve(instance: instance)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def resolve(instance:)
|
26
|
+
instance.pass_action
|
27
|
+
|
28
|
+
if @on_success_type == Decouplio::Const::Results::FINISH_HIM
|
29
|
+
Decouplio::Const::Results::FINISH_HIM
|
30
|
+
else
|
31
|
+
Decouplio::Const::Results::PASS
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class ServiceStep < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:, service:, on_success_type:, on_failure_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@service = service
|
12
|
+
@on_success_type = on_success_type
|
13
|
+
@on_failure_type = on_failure_type
|
14
|
+
end
|
15
|
+
|
16
|
+
def process(instance:)
|
17
|
+
instance.append_railway_flow(@name)
|
18
|
+
result = @service.call(ctx: instance.ctx)
|
19
|
+
|
20
|
+
resolve(result: result, instance: instance)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def resolve(result:, instance:)
|
26
|
+
if result
|
27
|
+
if [Decouplio::Const::Results::PASS, Decouplio::Const::Results::FAIL].include?(@on_success_type)
|
28
|
+
instance.pass_action
|
29
|
+
Decouplio::Const::Results::PASS
|
30
|
+
elsif @on_success_type == Decouplio::Const::Results::FINISH_HIM
|
31
|
+
instance.pass_action
|
32
|
+
Decouplio::Const::Results::FINISH_HIM
|
33
|
+
end
|
34
|
+
elsif @on_failure_type == Decouplio::Const::Results::PASS
|
35
|
+
instance.pass_action
|
36
|
+
Decouplio::Const::Results::FAIL
|
37
|
+
elsif @on_failure_type == Decouplio::Const::Results::FAIL
|
38
|
+
instance.fail_action
|
39
|
+
Decouplio::Const::Results::FAIL
|
40
|
+
elsif @on_failure_type == Decouplio::Const::Results::FINISH_HIM
|
41
|
+
instance.fail_action
|
42
|
+
Decouplio::Const::Results::FINISH_HIM
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class Step < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:, on_success_type:, on_failure_type:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
@on_success_type = on_success_type
|
12
|
+
@on_failure_type = on_failure_type
|
13
|
+
end
|
14
|
+
|
15
|
+
def process(instance:)
|
16
|
+
instance.append_railway_flow(@name)
|
17
|
+
result = instance.send(@name, **instance.ctx)
|
18
|
+
resolve(result: result, instance: instance)
|
19
|
+
end
|
20
|
+
|
21
|
+
def resolve(result:, instance:)
|
22
|
+
if result
|
23
|
+
if [Decouplio::Const::Results::PASS, Decouplio::Const::Results::FAIL].include?(@on_success_type)
|
24
|
+
instance.pass_action
|
25
|
+
Decouplio::Const::Results::PASS
|
26
|
+
elsif @on_success_type == Decouplio::Const::Results::FINISH_HIM
|
27
|
+
instance.pass_action
|
28
|
+
Decouplio::Const::Results::FINISH_HIM
|
29
|
+
end
|
30
|
+
elsif @on_failure_type == Decouplio::Const::Results::PASS
|
31
|
+
instance.pass_action
|
32
|
+
Decouplio::Const::Results::FAIL
|
33
|
+
elsif @on_failure_type == Decouplio::Const::Results::FAIL
|
34
|
+
instance.fail_action
|
35
|
+
Decouplio::Const::Results::FAIL
|
36
|
+
elsif @on_failure_type == Decouplio::Const::Results::FINISH_HIM
|
37
|
+
instance.fail_action
|
38
|
+
Decouplio::Const::Results::FINISH_HIM
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class UnlessConditionFail < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
end
|
12
|
+
|
13
|
+
def process(instance:)
|
14
|
+
result = instance.send(@name, **instance.ctx)
|
15
|
+
|
16
|
+
resolve(result: result, instance: instance)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def resolve(result:, instance:)
|
22
|
+
instance.fail_action
|
23
|
+
|
24
|
+
result ? Decouplio::Const::Results::FAIL : Decouplio::Const::Results::PASS
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Steps
|
7
|
+
class UnlessConditionPass < Decouplio::Steps::BaseStep
|
8
|
+
def initialize(name:)
|
9
|
+
super()
|
10
|
+
@name = name
|
11
|
+
end
|
12
|
+
|
13
|
+
def process(instance:)
|
14
|
+
result = instance.send(@name, **instance.ctx)
|
15
|
+
|
16
|
+
resolve(result: result)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def resolve(result:)
|
22
|
+
result ? Decouplio::Const::Results::FAIL : Decouplio::Const::Results::PASS
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_step'
|
4
|
+
require_relative '../processor'
|
5
|
+
|
6
|
+
module Decouplio
|
7
|
+
module Steps
|
8
|
+
class Wrap < Decouplio::Steps::BaseStep
|
9
|
+
def initialize(name:, klass:, method:, wrap_flow:, on_success_type:, on_failure_type:)
|
10
|
+
super()
|
11
|
+
@name = name
|
12
|
+
@klass = klass
|
13
|
+
@method = method
|
14
|
+
@wrap_flow = wrap_flow
|
15
|
+
@on_success_type = on_success_type
|
16
|
+
@on_failure_type = on_failure_type
|
17
|
+
end
|
18
|
+
|
19
|
+
def process(instance:)
|
20
|
+
instance.append_railway_flow(@name)
|
21
|
+
if specific_wrap?
|
22
|
+
@klass.public_send(@method) do
|
23
|
+
Decouplio::Processor.call(instance: instance, **@wrap_flow)
|
24
|
+
end
|
25
|
+
else
|
26
|
+
Decouplio::Processor.call(instance: instance, **@wrap_flow)
|
27
|
+
end
|
28
|
+
|
29
|
+
resolve(instance: instance)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def specific_wrap?
|
35
|
+
@klass && @method
|
36
|
+
end
|
37
|
+
|
38
|
+
def resolve(instance:)
|
39
|
+
result = instance.success?
|
40
|
+
|
41
|
+
if result
|
42
|
+
if [Decouplio::Const::Results::PASS, Decouplio::Const::Results::FAIL].include?(@on_success_type)
|
43
|
+
instance.pass_action
|
44
|
+
Decouplio::Const::Results::PASS
|
45
|
+
elsif @on_success_type == Decouplio::Const::Results::FINISH_HIM
|
46
|
+
instance.pass_action
|
47
|
+
Decouplio::Const::Results::FINISH_HIM
|
48
|
+
end
|
49
|
+
elsif @on_failure_type == Decouplio::Const::Results::PASS
|
50
|
+
instance.pass_action
|
51
|
+
Decouplio::Const::Results::FAIL
|
52
|
+
elsif @on_failure_type == Decouplio::Const::Results::FAIL
|
53
|
+
instance.fail_action
|
54
|
+
Decouplio::Const::Results::FAIL
|
55
|
+
elsif @on_failure_type == Decouplio::Const::Results::FINISH_HIM
|
56
|
+
instance.fail_action
|
57
|
+
Decouplio::Const::Results::FINISH_HIM
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# require_relative 'base_step'
|
4
|
+
|
5
|
+
module Decouplio
|
6
|
+
module Validators
|
7
|
+
class Condition
|
8
|
+
ONE = 1 # lol
|
9
|
+
|
10
|
+
def self.validate(condition_options:, type:)
|
11
|
+
return if condition_options.size == ONE
|
12
|
+
|
13
|
+
case type
|
14
|
+
when Decouplio::Const::Types::STEP_TYPE,
|
15
|
+
Decouplio::Const::Types::RESQ_TYPE_STEP,
|
16
|
+
Decouplio::Const::Types::ACTION_TYPE_STEP
|
17
|
+
raise Decouplio::Errors::StepControversialKeysError.new(
|
18
|
+
errored_option: condition_options.to_s,
|
19
|
+
details: %i[if unless]
|
20
|
+
)
|
21
|
+
when Decouplio::Const::Types::FAIL_TYPE,
|
22
|
+
Decouplio::Const::Types::RESQ_TYPE_FAIL,
|
23
|
+
Decouplio::Const::Types::ACTION_TYPE_FAIL
|
24
|
+
raise Decouplio::Errors::FailControversialKeysError.new(
|
25
|
+
errored_option: condition_options.to_s,
|
26
|
+
details: %i[if unless]
|
27
|
+
)
|
28
|
+
when Decouplio::Const::Types::PASS_TYPE,
|
29
|
+
Decouplio::Const::Types::RESQ_TYPE_PASS,
|
30
|
+
Decouplio::Const::Types::ACTION_TYPE_PASS
|
31
|
+
raise Decouplio::Errors::PassControversialKeysError.new(
|
32
|
+
errored_option: condition_options.to_s,
|
33
|
+
details: %i[if unless]
|
34
|
+
)
|
35
|
+
when Decouplio::Const::Types::OCTO_TYPE
|
36
|
+
raise Decouplio::Errors::OctoControversialKeysError.new(
|
37
|
+
errored_option: condition_options.to_s,
|
38
|
+
details: %i[if unless]
|
39
|
+
)
|
40
|
+
when Decouplio::Const::Types::WRAP_TYPE
|
41
|
+
raise Decouplio::Errors::WrapControversialKeysError.new(
|
42
|
+
errored_option: condition_options.to_s,
|
43
|
+
details: %i[if unless]
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|