decouplio 1.0.0alpha8 → 1.0.0rc

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) 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 +24 -40
  5. data/lib/decouplio/action_state_printer.rb +2 -5
  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 +0 -144
  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 +2 -4
  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 +340 -79
  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 -35
  71. data/lib/decouplio/steps/inner_action_pass.rb +9 -29
  72. data/lib/decouplio/steps/inner_action_step.rb +1 -35
  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 +30 -42
  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 -108
  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 -615
  112. data/lib/decouplio/const/colors.rb +0 -25
  113. data/lib/decouplio/const/results.rb +0 -15
  114. data/lib/decouplio/const/step_options.rb +0 -16
  115. data/lib/decouplio/errors/extra_key_for_fail_error.rb +0 -26
  116. data/lib/decouplio/errors/extra_key_for_octo_error.rb +0 -26
  117. data/lib/decouplio/errors/extra_key_for_resq_error.rb +0 -29
  118. data/lib/decouplio/errors/extra_key_for_step_error.rb +0 -23
  119. data/lib/decouplio/errors/extra_key_for_wrap_error.rb +0 -23
  120. data/lib/decouplio/errors/palp_is_not_defined_error.rb +0 -26
  121. data/lib/decouplio/flow.rb +0 -17
  122. data/lib/decouplio/options_validator.rb +0 -606
  123. data/lib/decouplio/processor.rb +0 -20
  124. data/lib/decouplio/steps/octo.rb +0 -27
  125. data/lib/decouplio/steps/service_fail.rb +0 -41
  126. data/lib/decouplio/steps/service_pass.rb +0 -41
  127. data/lib/decouplio/steps/service_step.rb +0 -41
  128. data/lib/decouplio/steps/shared/fail_resolver.rb +0 -40
  129. data/lib/decouplio/steps/shared/step_resolver.rb +0 -43
  130. data/lib/decouplio/validators/condition.rb +0 -49
@@ -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"