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,159 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_interaction'
4
- require 'interactor'
5
- require 'mutations'
6
- require 'trailblazer'
7
- require 'decouplio'
8
- require 'benchmark/ips'
9
-
10
- class MutationTest < Mutations::Command
11
- optional do
12
- string :param1
13
- end
14
-
15
- def execute
16
- @context = {}
17
- @context[:step_one] = param1
18
- @context[:step_two] = @context[:step_one]
19
- @context[:step_three] = @context[:step_two]
20
- @context[:step_four] = @context[:step_three]
21
- @context[:step_five] = @context[:step_four]
22
- @context[:step_six] = @context[:step_five]
23
- @context[:step_seven] = @context[:step_six]
24
- @context[:step_eight] = @context[:step_seven]
25
- @context[:step_nine] = @context[:step_eight]
26
-
27
- @context
28
- end
29
- end
30
-
31
- class ActiveInteractionTest < ActiveInteraction::Base
32
- string :param1
33
-
34
- def execute
35
- @context = {}
36
- @context[:step_one] = param1
37
- @context[:step_two] = @context[:step_one]
38
- @context[:step_three] = @context[:step_two]
39
- @context[:step_four] = @context[:step_three]
40
- @context[:step_five] = @context[:step_four]
41
- @context[:step_six] = @context[:step_five]
42
- @context[:step_seven] = @context[:step_six]
43
- @context[:step_eight] = @context[:step_seven]
44
- @context[:step_nine] = @context[:step_eight]
45
-
46
- @context
47
- end
48
- end
49
-
50
- class DecouplioTestOneStep < Decouplio::Action
51
- logic do
52
- step :step_one
53
- end
54
-
55
- def step_one(param1:, **)
56
- ctx[:step_one] = param1
57
- ctx[:step_two] = ctx[:step_one]
58
- ctx[:step_three] = ctx[:step_two]
59
- ctx[:step_four] = ctx[:step_three]
60
- ctx[:step_five] = ctx[:step_four]
61
- ctx[:step_six] = ctx[:step_five]
62
- ctx[:step_seven] = ctx[:step_six]
63
- ctx[:step_eight] = ctx[:step_seven]
64
- ctx[:step_nine] = ctx[:step_eight]
65
- end
66
- end
67
-
68
- class InteractorWithoutOrganizer
69
- include Interactor
70
-
71
- def call
72
- context.step_one = context.param1
73
- context.step_two = context.step_one
74
- context.step_three = context.step_two
75
- context.step_four = context.step_three
76
- context.step_five = context.step_four
77
- context.step_six = context.step_five
78
- context.step_seven = context.step_six
79
- context.step_eight = context.step_seven
80
- context.step_nine = context.step_eight
81
- end
82
- end
83
-
84
- class RegularServiceTest
85
- attr_accessor :ctx, :param1
86
-
87
- def self.call(param1:)
88
- new(param1: param1).call
89
- end
90
-
91
- def initialize(param1:)
92
- @param1 = param1
93
- @ctx = {}
94
- end
95
-
96
- def call
97
- ctx[:step_one] = param1
98
- ctx[:step_two] = ctx[:step_one]
99
- ctx[:step_three] = ctx[:step_two]
100
- ctx[:step_four] = ctx[:step_three]
101
- ctx[:step_five] = ctx[:step_four]
102
- ctx[:step_six] = ctx[:step_five]
103
- ctx[:step_seven] = ctx[:step_six]
104
- ctx[:step_eight] = ctx[:step_seven]
105
- ctx[:step_nine] = ctx[:step_eight]
106
- end
107
- end
108
-
109
- class TrailblazerTestOneStep < Trailblazer::Activity::Railway
110
- step :step_one
111
-
112
- def step_one(ctx, param1:, **)
113
- ctx[:step_one] = param1
114
- ctx[:step_two] = ctx[:step_one]
115
- ctx[:step_three] = ctx[:step_two]
116
- ctx[:step_four] = ctx[:step_three]
117
- ctx[:step_five] = ctx[:step_four]
118
- ctx[:step_six] = ctx[:step_five]
119
- ctx[:step_seven] = ctx[:step_six]
120
- ctx[:step_eight] = ctx[:step_seven]
121
- ctx[:step_nine] = ctx[:step_eight]
122
- end
123
- end
124
-
125
- class ServiceAsStep
126
- def self.call(ctx:, **)
127
- ctx[:step_one] = ctx[:param1]
128
- ctx[:step_two] = ctx[:step_one]
129
- ctx[:step_three] = ctx[:step_two]
130
- ctx[:step_four] = ctx[:step_three]
131
- ctx[:step_five] = ctx[:step_four]
132
- ctx[:step_six] = ctx[:step_five]
133
- ctx[:step_seven] = ctx[:step_six]
134
- ctx[:step_eight] = ctx[:step_seven]
135
- ctx[:step_nine] = ctx[:step_eight]
136
- end
137
- end
138
-
139
- class DecouplioTestOneStepAsService < Decouplio::Action
140
- logic do
141
- step ServiceAsStep
142
- end
143
- end
144
-
145
- iteration_count = 100_000
146
-
147
- Benchmark.ips do |x|
148
- x.report('Mutation') { iteration_count.times { MutationTest.run(param1: 'param1') } }
149
- x.report('ActiveInteraction') { iteration_count.times { ActiveInteractionTest.run(param1: 'param1') } }
150
- x.report('Trailblazer one step') { iteration_count.times { TrailblazerTestOneStep.call(param1: 'param1') } }
151
- x.report('Interactor one interactor') { iteration_count.times { InteractorWithoutOrganizer.call(param1: 'param1') } }
152
- x.report('RegularService') { iteration_count.times { RegularServiceTest.call(param1: 'param1') } }
153
- x.report('Decouplio one step') { iteration_count.times { DecouplioTestOneStep.call(param1: 'param1') } }
154
- x.report('Decouplio one step as service') do
155
- iteration_count.times { DecouplioTestOneStepAsService.call(param1: 'param1') }
156
- end
157
-
158
- x.compare!
159
- end
data/bin/console DELETED
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/setup'
5
- require 'decouplio'
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require 'pry'
12
- # Pry.start
13
-
14
- require 'irb'
15
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
data/docker-compose.yml DELETED
@@ -1,29 +0,0 @@
1
- version: "3.7"
2
-
3
- services:
4
- benchmark_single_step:
5
- build:
6
- dockerfile: benchmarks/Dockerfile
7
- context: .
8
- command: "ruby single_step_benchmark.rb"
9
- deploy:
10
- resources:
11
- limits:
12
- cpus: '1'
13
- memory: 400M
14
-
15
- benchmark_multi_step:
16
- build:
17
- dockerfile: benchmarks/Dockerfile
18
- context: .
19
- command: "ruby multi_step_benchmark.rb"
20
- deploy:
21
- resources:
22
- limits:
23
- cpus: '1'
24
- memory: 400M
25
- test:
26
- build:
27
- dockerfile: Dockerfile
28
- context: .
29
- command: "rspec"