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
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decouplio
4
- class Processor
5
- class << self
6
- def call(first_step:, steps_pool:, steps_flow:, instance:)
7
- process(first_step, instance, steps_pool, steps_flow)
8
- end
9
-
10
- private
11
-
12
- def process(next_step_name, instance, steps_pool, steps_flow)
13
- while next_step_name
14
- result = steps_pool[next_step_name].process(instance: instance)
15
- next_step_name = steps_flow[next_step_name][result]
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base_step'
4
-
5
- module Decouplio
6
- module Steps
7
- class Aide < Decouplio::Steps::BaseStep
8
- def initialize(name:, aide_class:, aide_options:, on_success_type:, on_failure_type:)
9
- super()
10
- @name = name
11
- @aide_class = aide_class
12
- @aide_options = aide_options
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
- result = @aide_class.call(
20
- ctx: instance.ctx,
21
- error_store: instance.error_store,
22
- **@aide_options
23
- )
24
- resolve(instance: instance, result: result)
25
- end
26
-
27
- def resolve(instance:, result:)
28
- Decouplio::Steps::Shared::FailResolver.call(
29
- instance: instance,
30
- result: result,
31
- on_success_type: @on_success_type,
32
- on_failure_type: @on_failure_type
33
- )
34
- end
35
- end
36
- end
37
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base_step'
4
-
5
- module Decouplio
6
- module Steps
7
- class Doby < Decouplio::Steps::BaseStep
8
- def initialize(name:, doby_class:, doby_options:, on_success_type:, on_failure_type:)
9
- super()
10
- @name = name
11
- @doby_class = doby_class
12
- @doby_options = doby_options
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
- result = @doby_class.call(
20
- ctx: instance.ctx,
21
- error_store: instance.error_store,
22
- **@doby_options
23
- )
24
- resolve(result: result, instance: instance)
25
- end
26
-
27
- def resolve(result:, instance:)
28
- Decouplio::Steps::Shared::StepResolver.call(
29
- instance: instance,
30
- result: result,
31
- on_success_type: @on_success_type,
32
- on_failure_type: @on_failure_type
33
- )
34
- end
35
- end
36
- end
37
- end
@@ -1,27 +0,0 @@
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:, method:)
11
- super()
12
- @name = name
13
- @ctx_key = ctx_key
14
- @method = method
15
- end
16
-
17
- def process(instance:)
18
- instance.append_railway_flow(@name)
19
- if @method
20
- instance.send(@method, **instance.ctx)
21
- else
22
- instance[@ctx_key]
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base_step'
4
- require_relative 'shared/fail_resolver'
5
-
6
- module Decouplio
7
- module Steps
8
- class ServiceFail < Decouplio::Steps::BaseStep
9
- def initialize(name:, service:, args:, on_success_type:, on_failure_type:)
10
- super()
11
- @name = name
12
- @service = service
13
- @args = args
14
- @on_success_type = on_success_type
15
- @on_failure_type = on_failure_type
16
- end
17
-
18
- def process(instance:)
19
- instance.append_railway_flow(@name)
20
- result = @service.call(
21
- ctx: instance.ctx,
22
- error_store: instance.error_store,
23
- **@args
24
- )
25
-
26
- resolve(result: result, instance: instance)
27
- end
28
-
29
- private
30
-
31
- def resolve(result:, instance:)
32
- Decouplio::Steps::Shared::FailResolver.call(
33
- instance: instance,
34
- result: result,
35
- on_success_type: @on_success_type,
36
- on_failure_type: @on_failure_type
37
- )
38
- end
39
- end
40
- end
41
- end
@@ -1,41 +0,0 @@
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:, args:, on_success_type:, on_failure_type:)
9
- super()
10
- @name = name
11
- @service = service
12
- @args = args
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
- @service.call(
20
- ctx: instance.ctx,
21
- error_store: instance.error_store,
22
- **@args
23
- )
24
-
25
- resolve(instance: instance)
26
- end
27
-
28
- private
29
-
30
- def resolve(instance:)
31
- instance.pass_action
32
-
33
- if @on_success_type == Decouplio::Const::Results::FINISH_HIM
34
- Decouplio::Const::Results::FINISH_HIM
35
- else
36
- Decouplio::Const::Results::PASS
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base_step'
4
- require_relative 'shared/step_resolver'
5
-
6
- module Decouplio
7
- module Steps
8
- class ServiceStep < Decouplio::Steps::BaseStep
9
- def initialize(name:, service:, args:, on_success_type:, on_failure_type:)
10
- super()
11
- @name = name
12
- @service = service
13
- @args = args
14
- @on_success_type = on_success_type
15
- @on_failure_type = on_failure_type
16
- end
17
-
18
- def process(instance:)
19
- instance.append_railway_flow(@name)
20
- result = @service.call(
21
- ctx: instance.ctx,
22
- error_store: instance.error_store,
23
- **@args
24
- )
25
-
26
- resolve(result: result, instance: instance)
27
- end
28
-
29
- private
30
-
31
- def resolve(result:, instance:)
32
- Decouplio::Steps::Shared::StepResolver.call(
33
- instance: instance,
34
- result: result,
35
- on_success_type: @on_success_type,
36
- on_failure_type: @on_failure_type
37
- )
38
- end
39
- end
40
- end
41
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decouplio
4
- module Steps
5
- module Shared
6
- class FailResolver
7
- def self.call(instance:, result:, on_success_type:, on_failure_type:)
8
- if result
9
- case on_success_type
10
- when Decouplio::Const::Results::STEP_PASS, Decouplio::Const::Results::PASS
11
- instance.pass_action
12
- Decouplio::Const::Results::PASS
13
- when Decouplio::Const::Results::STEP_FAIL, Decouplio::Const::Results::FAIL
14
- instance.fail_action
15
- Decouplio::Const::Results::PASS
16
- when Decouplio::Const::Results::FINISH_HIM
17
- instance.fail_action
18
- Decouplio::Const::Results::FINISH_HIM
19
- end
20
- elsif [
21
- Decouplio::Const::Results::STEP_PASS,
22
- Decouplio::Const::Results::PASS
23
- ].include?(on_failure_type)
24
- instance.pass_action
25
- Decouplio::Const::Results::FAIL
26
- elsif [
27
- Decouplio::Const::Results::STEP_FAIL,
28
- Decouplio::Const::Results::FAIL
29
- ].include?(on_failure_type)
30
- instance.fail_action
31
- Decouplio::Const::Results::FAIL
32
- elsif on_failure_type == Decouplio::Const::Results::FINISH_HIM
33
- instance.fail_action
34
- Decouplio::Const::Results::FINISH_HIM
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decouplio
4
- module Steps
5
- module Shared
6
- class StepResolver
7
- def self.call(instance:, result:, on_success_type:, on_failure_type:)
8
- if result
9
- if [
10
- Decouplio::Const::Results::PASS,
11
- Decouplio::Const::Results::FAIL,
12
- Decouplio::Const::Results::STEP_PASS
13
- ].include?(on_success_type)
14
- instance.pass_action
15
- Decouplio::Const::Results::PASS
16
- elsif Decouplio::Const::Results::STEP_FAIL == on_success_type
17
- instance.fail_action
18
- Decouplio::Const::Results::PASS
19
- elsif on_success_type == Decouplio::Const::Results::FINISH_HIM
20
- instance.pass_action
21
- Decouplio::Const::Results::FINISH_HIM
22
- end
23
- elsif Decouplio::Const::Results::STEP_PASS == on_failure_type
24
- instance.pass_action
25
- Decouplio::Const::Results::PASS
26
- elsif Decouplio::Const::Results::STEP_FAIL == on_failure_type
27
- instance.fail_action
28
- Decouplio::Const::Results::PASS
29
- elsif on_failure_type == Decouplio::Const::Results::PASS
30
- instance.pass_action
31
- Decouplio::Const::Results::FAIL
32
- elsif on_failure_type == Decouplio::Const::Results::FAIL
33
- instance.fail_action
34
- Decouplio::Const::Results::FAIL
35
- elsif on_failure_type == Decouplio::Const::Results::FINISH_HIM
36
- instance.fail_action
37
- Decouplio::Const::Results::FINISH_HIM
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,59 +0,0 @@
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
- when Decouplio::Const::Types::DOBY_TYPE
46
- raise Decouplio::Errors::DobyControversialKeysError.new(
47
- errored_option: condition_options.to_s,
48
- details: %i[if unless]
49
- )
50
- when Decouplio::Const::Types::AIDE_TYPE
51
- raise Decouplio::Errors::AideControversialKeysError.new(
52
- errored_option: condition_options.to_s,
53
- details: %i[if unless]
54
- )
55
- end
56
- end
57
- end
58
- end
59
- end