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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +313 -15
  3. data/decouplio.gemspec +8 -2
  4. data/lib/decouplio/action.rb +34 -74
  5. data/lib/decouplio/action_state_printer.rb +34 -0
  6. data/lib/decouplio/const/flows.rb +59 -0
  7. data/lib/decouplio/const/reserved_methods.rb +6 -13
  8. data/lib/decouplio/const/types.rb +1 -165
  9. data/lib/decouplio/const/validations/common.rb +10 -0
  10. data/lib/decouplio/const/validations/octo.rb +16 -0
  11. data/lib/decouplio/const/validations/resq.rb +12 -1
  12. data/lib/decouplio/ctx.rb +13 -0
  13. data/lib/decouplio/default_meta_store.rb +37 -0
  14. data/lib/decouplio/errors/action_class_error.rb +0 -3
  15. data/lib/decouplio/errors/base_error.rb +0 -3
  16. data/lib/decouplio/errors/execution_error.rb +0 -2
  17. data/lib/decouplio/errors/extra_key_for_pass_error.rb +0 -3
  18. data/lib/decouplio/errors/fail_can_not_be_first_step_error.rb +0 -3
  19. data/lib/decouplio/errors/fail_controversial_keys_error.rb +0 -3
  20. data/lib/decouplio/errors/fail_finish_him_error.rb +0 -3
  21. data/lib/decouplio/errors/invalid_error_class_error.rb +0 -3
  22. data/lib/decouplio/errors/invalid_options_for_resq_step.rb +18 -0
  23. data/lib/decouplio/errors/invalid_wrap_name_error.rb +0 -3
  24. data/lib/decouplio/errors/logic_is_not_defined_error.rb +0 -3
  25. data/lib/decouplio/errors/logic_redefinition_error.rb +0 -3
  26. data/lib/decouplio/errors/octo_block_is_not_defined_error.rb +0 -3
  27. data/lib/decouplio/errors/octo_case_is_not_defined_error.rb +19 -0
  28. data/lib/decouplio/errors/octo_controversial_keys_error.rb +0 -3
  29. data/lib/decouplio/errors/{error_store_error.rb → octo_finish_him_is_not_allowed_error.rb} +2 -4
  30. data/lib/decouplio/errors/options_validation_error.rb +13 -1
  31. data/lib/decouplio/errors/palp_block_is_not_defined_error.rb +0 -3
  32. data/lib/decouplio/errors/palp_validation_error.rb +0 -3
  33. data/lib/decouplio/errors/pass_controversial_keys_error.rb +0 -3
  34. data/lib/decouplio/errors/pass_finish_him_error.rb +0 -3
  35. data/lib/decouplio/errors/required_options_is_missing_for_octo_error.rb +0 -3
  36. data/lib/decouplio/errors/resq_definition_error.rb +0 -3
  37. data/lib/decouplio/errors/resq_error_class_error.rb +0 -3
  38. data/lib/decouplio/errors/resq_handler_method_error.rb +0 -3
  39. data/lib/decouplio/errors/step_controversial_keys_error.rb +0 -3
  40. data/lib/decouplio/errors/step_definition_error.rb +17 -0
  41. data/lib/decouplio/errors/step_finish_him_error.rb +0 -3
  42. data/lib/decouplio/errors/step_is_not_defined_for_fail_error.rb +0 -3
  43. data/lib/decouplio/errors/step_is_not_defined_for_pass_error.rb +0 -4
  44. data/lib/decouplio/errors/step_is_not_defined_for_step_error.rb +0 -4
  45. data/lib/decouplio/errors/step_is_not_defined_for_wrap_error.rb +0 -3
  46. data/lib/decouplio/errors/step_name_error.rb +0 -3
  47. data/lib/decouplio/errors/wrap_block_is_not_defined_error.rb +0 -3
  48. data/lib/decouplio/errors/wrap_controversial_keys_error.rb +0 -3
  49. data/lib/decouplio/errors/wrap_finish_him_error.rb +0 -3
  50. data/lib/decouplio/errors/wrap_klass_method_error.rb +0 -3
  51. data/lib/decouplio/graph.rb +9 -0
  52. data/lib/decouplio/logic_dsl.rb +337 -107
  53. data/lib/decouplio/new_flow.rb +283 -0
  54. data/lib/decouplio/octo_hash_case.rb +20 -5
  55. data/lib/decouplio/octo_options_validator.rb +10 -64
  56. data/lib/decouplio/step_validator.rb +200 -0
  57. data/lib/decouplio/steps/base_condition.rb +21 -0
  58. data/lib/decouplio/steps/base_if_condition.rb +11 -0
  59. data/lib/decouplio/steps/base_inner_action.rb +42 -0
  60. data/lib/decouplio/steps/base_octo.rb +26 -0
  61. data/lib/decouplio/steps/base_resq.rb +25 -28
  62. data/lib/decouplio/steps/base_resq_with_mapping.rb +34 -0
  63. data/lib/decouplio/steps/base_service_step.rb +39 -0
  64. data/lib/decouplio/steps/base_step.rb +33 -6
  65. data/lib/decouplio/steps/base_unless_condition.rb +11 -0
  66. data/lib/decouplio/steps/base_wrap.rb +27 -0
  67. data/lib/decouplio/steps/fail.rb +1 -28
  68. data/lib/decouplio/steps/if_condition_fail.rb +1 -21
  69. data/lib/decouplio/steps/if_condition_pass.rb +1 -19
  70. data/lib/decouplio/steps/inner_action_fail.rb +1 -33
  71. data/lib/decouplio/steps/inner_action_pass.rb +12 -30
  72. data/lib/decouplio/steps/inner_action_step.rb +1 -33
  73. data/lib/decouplio/steps/octo_by_key.rb +31 -0
  74. data/lib/decouplio/steps/octo_by_method.rb +31 -0
  75. data/lib/decouplio/steps/pass.rb +5 -26
  76. data/lib/decouplio/steps/resq_fail.rb +0 -2
  77. data/lib/decouplio/steps/resq_pass.rb +1 -3
  78. data/lib/decouplio/steps/resq_with_mapping_fail.rb +8 -0
  79. data/lib/decouplio/steps/resq_with_mapping_pass.rb +8 -0
  80. data/lib/decouplio/steps/service_as_fail.rb +8 -0
  81. data/lib/decouplio/steps/service_as_pass.rb +16 -0
  82. data/lib/decouplio/steps/service_as_step.rb +8 -0
  83. data/lib/decouplio/steps/step.rb +0 -24
  84. data/lib/decouplio/steps/unless_condition_fail.rb +1 -21
  85. data/lib/decouplio/steps/unless_condition_pass.rb +1 -19
  86. data/lib/decouplio/steps/wrap.rb +25 -37
  87. data/lib/decouplio/steps/wrap_with_class.rb +43 -0
  88. data/lib/decouplio/steps/wrap_with_class_method.rb +45 -0
  89. data/lib/decouplio/utils/prepare_resq_mappings.rb +17 -0
  90. data/lib/decouplio/version.rb +1 -1
  91. data/lib/decouplio.rb +93 -0
  92. metadata +32 -55
  93. data/.circleci/config.yml +0 -63
  94. data/.dockerignore +0 -12
  95. data/.gitignore +0 -13
  96. data/.rspec +0 -3
  97. data/.rubocop.yml +0 -116
  98. data/.rubocop_todo.yml +0 -147
  99. data/.ruby-version +0 -1
  100. data/.vscode/settings.json +0 -3
  101. data/Dockerfile +0 -12
  102. data/Gemfile +0 -8
  103. data/benchmarks/.ruby-version +0 -1
  104. data/benchmarks/Dockerfile +0 -12
  105. data/benchmarks/Gemfile +0 -12
  106. data/benchmarks/multi_step_benchmark.rb +0 -336
  107. data/benchmarks/single_step_benchmark.rb +0 -159
  108. data/bin/console +0 -15
  109. data/bin/setup +0 -8
  110. data/docker-compose.yml +0 -29
  111. data/lib/decouplio/composer.rb +0 -691
  112. data/lib/decouplio/const/colors.rb +0 -25
  113. data/lib/decouplio/const/doby_aide_options.rb +0 -16
  114. data/lib/decouplio/const/results.rb +0 -15
  115. data/lib/decouplio/const/step_options.rb +0 -16
  116. data/lib/decouplio/const/validations/aide.rb +0 -38
  117. data/lib/decouplio/const/validations/doby.rb +0 -36
  118. data/lib/decouplio/default_error_handler.rb +0 -39
  119. data/lib/decouplio/errors/aide_can_not_be_first_step_error.rb +0 -18
  120. data/lib/decouplio/errors/aide_controversial_keys_error.rb +0 -26
  121. data/lib/decouplio/errors/aide_finish_him_error.rb +0 -26
  122. data/lib/decouplio/errors/doby_controversial_keys_error.rb +0 -26
  123. data/lib/decouplio/errors/doby_finish_him_error.rb +0 -26
  124. data/lib/decouplio/errors/extra_key_for_fail_error.rb +0 -26
  125. data/lib/decouplio/errors/extra_key_for_octo_error.rb +0 -26
  126. data/lib/decouplio/errors/extra_key_for_resq_error.rb +0 -29
  127. data/lib/decouplio/errors/extra_key_for_step_error.rb +0 -23
  128. data/lib/decouplio/errors/extra_key_for_wrap_error.rb +0 -23
  129. data/lib/decouplio/errors/palp_is_not_defined_error.rb +0 -26
  130. data/lib/decouplio/errors/step_is_not_defined_for_aide_error.rb +0 -26
  131. data/lib/decouplio/errors/step_is_not_defined_for_doby_error.rb +0 -27
  132. data/lib/decouplio/flow.rb +0 -17
  133. data/lib/decouplio/options_validator.rb +0 -716
  134. data/lib/decouplio/processor.rb +0 -20
  135. data/lib/decouplio/steps/aide.rb +0 -37
  136. data/lib/decouplio/steps/doby.rb +0 -37
  137. data/lib/decouplio/steps/octo.rb +0 -27
  138. data/lib/decouplio/steps/service_fail.rb +0 -41
  139. data/lib/decouplio/steps/service_pass.rb +0 -41
  140. data/lib/decouplio/steps/service_step.rb +0 -41
  141. data/lib/decouplio/steps/shared/fail_resolver.rb +0 -40
  142. data/lib/decouplio/steps/shared/step_resolver.rb +0 -43
  143. data/lib/decouplio/validators/condition.rb +0 -59
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class BaseOcto
6
+ attr_reader :name,
7
+ :hash_case,
8
+ :on_success,
9
+ :on_failure,
10
+ :on_error,
11
+ :finish_him,
12
+ :on_success_resolver,
13
+ :on_failure_resolver,
14
+ :on_error_resolver,
15
+ :resq
16
+
17
+ def _add_octo_next_steps(hash_case)
18
+ @hash_case = hash_case
19
+ end
20
+
21
+ def _add_resq(resq_step)
22
+ @resq = resq_step
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,41 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_step'
4
-
5
3
  module Decouplio
6
4
  module Steps
7
- class BaseResq < BaseStep
8
- def initialize(handler_hash:, step_to_resq:, on_error_type:)
9
- super()
10
- @handler_hash = handler_hash
11
- @step_to_resq = step_to_resq
12
- @on_error_type = on_error_type
13
- end
14
-
15
- def process(instance:)
16
- result = @step_to_resq.process(instance: instance)
17
- rescue *@handler_hash.keys => e
18
- handler_method = @handler_hash[e.class]
5
+ class BaseResq
6
+ attr_reader :name, :step_to_resq, :mappings, :handler_method
19
7
 
20
- raise e unless handler_method
8
+ def initialize(name, handler_method)
9
+ @name = name
10
+ @handler_method = handler_method
11
+ end
21
12
 
22
- instance.append_railway_flow(handler_method)
23
- instance.public_send(handler_method, e, **instance.ctx)
13
+ def process(instance)
14
+ result = @step_to_resq.process(instance)
15
+ rescue StandardError => error
16
+ instance.railway_flow << @handler_method
17
+ instance.send(@handler_method, error)
24
18
 
25
- case @on_error_type
26
- when Decouplio::Const::Results::PASS, Decouplio::Const::Results::STEP_PASS
27
- instance.pass_action
28
- Decouplio::Const::Results::ERROR
29
- when Decouplio::Const::Results::FINISH_HIM
30
- instance.fail_action
31
- Decouplio::Const::Results::FINISH_HIM
32
- else
33
- instance.fail_action
34
- Decouplio::Const::Results::ERROR
35
- end
19
+ instance.success = @step_to_resq.on_error_resolver
20
+ @step_to_resq.on_error
36
21
  else
37
22
  result
38
23
  end
24
+
25
+ def _add_on_error(on_error)
26
+ @on_error = on_error
27
+ end
28
+
29
+ def _add_on_error_resolver(resolver)
30
+ @on_error_resolver = resolver
31
+ end
32
+
33
+ def _add_step_to_resq(stp)
34
+ @step_to_resq = stp
35
+ end
39
36
  end
40
37
  end
41
38
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class BaseResqWithMapping
6
+ attr_reader :name, :step_to_resq, :mappings
7
+
8
+ def initialize(name, mappings)
9
+ @name = name
10
+ @mappings = mappings
11
+ end
12
+
13
+ def process(instance)
14
+ result = @step_to_resq.process(instance)
15
+ rescue *@mappings.keys => error
16
+ handler_method = @mappings[error.class]
17
+
18
+ raise error unless handler_method
19
+
20
+ instance.railway_flow << handler_method
21
+ instance.send(handler_method, error)
22
+
23
+ instance.success = @step_to_resq.on_error_resolver
24
+ @step_to_resq.on_error
25
+ else
26
+ result
27
+ end
28
+
29
+ def _add_step_to_resq(stp)
30
+ @step_to_resq = stp
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class BaseServiceStep
6
+ attr_reader :name, :on_success, :on_failure, :on_error, :finish_him, :on_error_resolver
7
+
8
+ def initialize(name, service_class, on_success, on_failure, on_error, finish_him, args)
9
+ @name = name
10
+ @service_class = service_class
11
+ @on_success = on_success
12
+ @on_failure = on_failure
13
+ @on_error = on_error
14
+ @finish_him = finish_him
15
+ @args = args
16
+ end
17
+
18
+ def process(instance)
19
+ instance.railway_flow << @name
20
+
21
+ if @service_class.call(instance.ctx, instance.ms, **@args)
22
+ instance.success = @on_success_resolver
23
+ @on_success
24
+ else
25
+ instance.success = @on_failure_resolver
26
+ @on_failure
27
+ end
28
+ end
29
+
30
+ def _add_next_steps(steps)
31
+ @on_success, @on_failure, @on_error = steps
32
+ end
33
+
34
+ def _add_resolvers(resolvers)
35
+ @on_success_resolver, @on_failure_resolver = resolvers
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,15 +1,42 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../const/results'
4
-
5
3
  module Decouplio
6
4
  module Steps
7
5
  class BaseStep
8
- attr_reader :name
6
+ attr_reader :name,
7
+ :on_success,
8
+ :on_failure,
9
+ :on_error,
10
+ :finish_him,
11
+ :on_success_resolver,
12
+ :on_failure_resolver,
13
+ :on_error_resolver
14
+
15
+ def initialize(name, on_success, on_failure, on_error, finish_him)
16
+ @name = name
17
+ @on_success = on_success
18
+ @on_failure = on_failure
19
+ @on_error = on_error
20
+ @finish_him = finish_him
21
+ end
22
+
23
+ def process(instance)
24
+ instance.railway_flow << @name
25
+ if instance.send(@name)
26
+ instance.success = @on_success_resolver
27
+ @on_success
28
+ else
29
+ instance.success = @on_failure_resolver
30
+ @on_failure
31
+ end
32
+ end
33
+
34
+ def _add_next_steps(steps)
35
+ @on_success, @on_failure, @on_error = steps
36
+ end
9
37
 
10
- def process(*)
11
- raise NotImplementedError,
12
- 'Please implement process method'
38
+ def _add_resolvers(resolvers)
39
+ @on_success_resolver, @on_failure_resolver, @on_error_resolver = resolvers
13
40
  end
14
41
  end
15
42
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class BaseUnlessCondition < Decouplio::Steps::BaseCondition
6
+ def process(instance)
7
+ instance.send(@condition_method) ? @skip_condition_step : @perform_condition_step
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class BaseWrap
6
+ attr_reader :name,
7
+ :on_success,
8
+ :on_failure,
9
+ :on_error,
10
+ :finish_him,
11
+ :on_error_resolver,
12
+ :wrap_block
13
+
14
+ def _add_next_steps(steps)
15
+ @on_success, @on_failure, @on_error = steps
16
+ end
17
+
18
+ def _add_resolvers(resolvers)
19
+ @on_success_resolver, @on_failure_resolver, @on_error_resolver = resolvers
20
+ end
21
+
22
+ def _add_wrap_first_step(wrap_first_step)
23
+ @wrap_first_step = wrap_first_step
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,35 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_step'
4
- require_relative 'shared/fail_resolver'
5
-
6
3
  module Decouplio
7
4
  module Steps
8
- class Fail < BaseStep
9
- def initialize(name:, on_success_type:, on_failure_type:)
10
- super()
11
- @name = name
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 = instance.send(@name, **instance.ctx)
19
-
20
- resolve(result: result, instance: instance)
21
- end
22
-
23
- private
24
-
25
- def resolve(result:, instance:)
26
- Decouplio::Steps::Shared::FailResolver.call(
27
- instance: instance,
28
- result: result,
29
- on_success_type: @on_success_type,
30
- on_failure_type: @on_failure_type
31
- )
32
- end
5
+ class Fail < Decouplio::Steps::BaseStep
33
6
  end
34
7
  end
35
8
  end
@@ -1,28 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_step'
4
-
5
3
  module Decouplio
6
4
  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
5
+ class IfConditionFail < Decouplio::Steps::BaseIfCondition
26
6
  end
27
7
  end
28
8
  end
@@ -1,26 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_step'
4
-
5
3
  module Decouplio
6
4
  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
5
+ class IfConditionPass < Decouplio::Steps::BaseIfCondition
24
6
  end
25
7
  end
26
8
  end
@@ -1,40 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_step'
4
- require_relative 'shared/fail_resolver'
5
-
6
3
  module Decouplio
7
4
  module Steps
8
- class InnerActionFail < Decouplio::Steps::BaseStep
9
- def initialize(name:, action:, on_success_type:, on_failure_type:)
10
- super()
11
- @name = name
12
- @action = action
13
- @on_success_type = on_success_type
14
- @on_failure_type = on_failure_type
15
- end
16
-
17
- def process(instance:)
18
- instance.append_railway_flow(@name)
19
- outcome = @action.call(parent_ctx: instance.ctx, parent_railway_flow: instance.railway_flow)
20
-
21
- resolve(outcome: outcome, instance: instance)
22
- end
23
-
24
- private
25
-
26
- def resolve(outcome:, instance:)
27
- result = outcome.success?
28
-
29
- instance.error_store.merge(outcome.error_store)
30
-
31
- Decouplio::Steps::Shared::FailResolver.call(
32
- instance: instance,
33
- result: result,
34
- on_success_type: @on_success_type,
35
- on_failure_type: @on_failure_type
36
- )
37
- end
5
+ class InnerActionFail < Decouplio::Steps::BaseInnerAction
38
6
  end
39
7
  end
40
8
  end
@@ -1,37 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_step'
4
-
5
3
  module Decouplio
6
4
  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
5
+ class InnerActionPass < Decouplio::Steps::BaseInnerAction
6
+ def process(instance)
7
+ instance.railway_flow << @name
8
+
9
+ @action_class.call(
10
+ _parent_meta_store: instance.ms,
11
+ _parent_railway_flow: instance.railway_flow,
12
+ _parent_ctx: instance.ctx
13
+ )
14
+
15
+ instance.success = @on_success_resolver
16
+ @on_success
35
17
  end
36
18
  end
37
19
  end
@@ -1,40 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_step'
4
- require_relative 'shared/step_resolver'
5
-
6
3
  module Decouplio
7
4
  module Steps
8
- class InnerActionStep < Decouplio::Steps::BaseStep
9
- def initialize(name:, action:, on_success_type:, on_failure_type:)
10
- super()
11
- @name = name
12
- @action = action
13
- @on_success_type = on_success_type
14
- @on_failure_type = on_failure_type
15
- end
16
-
17
- def process(instance:)
18
- instance.append_railway_flow(@name)
19
- outcome = @action.call(parent_ctx: instance.ctx, parent_railway_flow: instance.railway_flow)
20
-
21
- resolve(outcome: outcome, instance: instance)
22
- end
23
-
24
- private
25
-
26
- def resolve(outcome:, instance:)
27
- result = outcome.success?
28
-
29
- instance.error_store.merge(outcome.error_store)
30
-
31
- Decouplio::Steps::Shared::StepResolver.call(
32
- instance: instance,
33
- result: result,
34
- on_success_type: @on_success_type,
35
- on_failure_type: @on_failure_type
36
- )
37
- end
5
+ class InnerActionStep < Decouplio::Steps::BaseInnerAction
38
6
  end
39
7
  end
40
8
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class OctoByKey < Decouplio::Steps::BaseOcto
6
+ def initialize(name, by_key, hash_case, on_success, on_failure, on_error, finish_him)
7
+ super()
8
+ @name = name
9
+ @by_key = by_key
10
+ @hash_case = hash_case
11
+ @on_success = on_success
12
+ @on_failure = on_failure
13
+ @on_error = on_error
14
+ @finish_him = finish_him
15
+ end
16
+
17
+ def process(instance)
18
+ instance.railway_flow << @name
19
+ @hash_case[instance.ctx[@by_key]]
20
+ end
21
+
22
+ def _add_next_steps(steps)
23
+ @on_success, @on_failure, @on_error = steps
24
+ end
25
+
26
+ def _add_resolvers(resolvers)
27
+ @on_success_resolver, @on_failure_resolver, @on_error_resolver = resolvers
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class OctoByMethod < Decouplio::Steps::BaseOcto
6
+ def initialize(name, by_method, hash_case, on_success, on_failure, on_error, finish_him)
7
+ super()
8
+ @name = name
9
+ @by_method = by_method
10
+ @hash_case = hash_case
11
+ @on_success = on_success
12
+ @on_failure = on_failure
13
+ @on_error = on_error
14
+ @finish_him = finish_him
15
+ end
16
+
17
+ def process(instance)
18
+ instance.railway_flow << @name
19
+ @hash_case[instance.send(@by_method)]
20
+ end
21
+
22
+ def _add_next_steps(steps)
23
+ @on_success, @on_failure, @on_error = steps
24
+ end
25
+
26
+ def _add_resolvers(resolvers)
27
+ @on_success_resolver, @on_failure_resolver, @on_error_resolver = resolvers
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,34 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_step'
4
-
5
3
  module Decouplio
6
4
  module Steps
7
5
  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
6
+ def process(instance)
7
+ instance.railway_flow << @name
8
+ instance.send(@name)
9
+ instance.success = @on_success_resolver
10
+ @on_success
32
11
  end
33
12
  end
34
13
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_resq'
4
-
5
3
  module Decouplio
6
4
  module Steps
7
5
  class ResqFail < BaseResq
@@ -1,10 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base_resq'
4
-
5
3
  module Decouplio
6
4
  module Steps
7
- class ResqPass < Decouplio::Steps::BaseResq
5
+ class ResqPass < BaseResq
8
6
  end
9
7
  end
10
8
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class ResqWithMappingFail < BaseResqWithMapping
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class ResqWithMappingPass < BaseResqWithMapping
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class ServiceAsFail < BaseServiceStep
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class ServiceAsPass < BaseServiceStep
6
+ def process(instance)
7
+ instance.railway_flow << @name
8
+
9
+ @service_class.call(instance.ctx, instance.ms, **@args)
10
+
11
+ instance.success = @on_success_resolver
12
+ @on_success
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decouplio
4
+ module Steps
5
+ class ServiceAsStep < BaseServiceStep
6
+ end
7
+ end
8
+ end