convenient_service 0.1.0

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 (410) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +1 -0
  3. data/.gem_release.yml +23 -0
  4. data/.github/workflows/cd.yml +54 -0
  5. data/.github/workflows/ci.yml +190 -0
  6. data/.gitignore +34 -0
  7. data/.inch.yml +7 -0
  8. data/.rspec +3 -0
  9. data/.rubocop.yml +45 -0
  10. data/.rubocop_rspec.yml +58 -0
  11. data/.ruby-version +1 -0
  12. data/.tool-versions +1 -0
  13. data/.yardopts +13 -0
  14. data/Appraisals +124 -0
  15. data/CHANGELOG.md +1 -0
  16. data/Gemfile +6 -0
  17. data/LICENSE.txt +21 -0
  18. data/README.md +55 -0
  19. data/ROADMAP.md +41 -0
  20. data/Rakefile +54 -0
  21. data/Taskfile.yml +316 -0
  22. data/convenient_service.gemspec +52 -0
  23. data/coverage/.gitkeep +0 -0
  24. data/docker/2.7/Dockerfile +73 -0
  25. data/docker/3.0/Dockerfile +73 -0
  26. data/docker/3.1/Dockerfile +73 -0
  27. data/env.rb +19 -0
  28. data/lib/convenient_service/common/plugins/aliases.rb +8 -0
  29. data/lib/convenient_service/common/plugins/assigns_attributes_in_constructor/using_active_model_attribute_assignment/concern.rb +21 -0
  30. data/lib/convenient_service/common/plugins/assigns_attributes_in_constructor/using_active_model_attribute_assignment/middleware.rb +29 -0
  31. data/lib/convenient_service/common/plugins/assigns_attributes_in_constructor/using_active_model_attribute_assignment.rb +4 -0
  32. data/lib/convenient_service/common/plugins/assigns_attributes_in_constructor/using_dry_initializer/concern.rb +21 -0
  33. data/lib/convenient_service/common/plugins/assigns_attributes_in_constructor/using_dry_initializer.rb +3 -0
  34. data/lib/convenient_service/common/plugins/caches_constructor_params/concern.rb +22 -0
  35. data/lib/convenient_service/common/plugins/caches_constructor_params/entities/constructor_params.rb +34 -0
  36. data/lib/convenient_service/common/plugins/caches_constructor_params/entities.rb +3 -0
  37. data/lib/convenient_service/common/plugins/caches_constructor_params/middleware.rb +17 -0
  38. data/lib/convenient_service/common/plugins/caches_constructor_params.rb +5 -0
  39. data/lib/convenient_service/common/plugins/caches_return_value/entities/key.rb +79 -0
  40. data/lib/convenient_service/common/plugins/caches_return_value/entities.rb +3 -0
  41. data/lib/convenient_service/common/plugins/caches_return_value/middleware.rb +17 -0
  42. data/lib/convenient_service/common/plugins/caches_return_value.rb +4 -0
  43. data/lib/convenient_service/common/plugins/can_be_copied/concern.rb +33 -0
  44. data/lib/convenient_service/common/plugins/can_be_copied.rb +3 -0
  45. data/lib/convenient_service/common/plugins/has_around_callbacks/concern.rb +19 -0
  46. data/lib/convenient_service/common/plugins/has_around_callbacks/errors.rb +29 -0
  47. data/lib/convenient_service/common/plugins/has_around_callbacks/middleware.rb +113 -0
  48. data/lib/convenient_service/common/plugins/has_around_callbacks.rb +5 -0
  49. data/lib/convenient_service/common/plugins/has_attributes/using_active_model_attributes/concern.rb +19 -0
  50. data/lib/convenient_service/common/plugins/has_attributes/using_active_model_attributes/patches/active_model_attributes.rb +45 -0
  51. data/lib/convenient_service/common/plugins/has_attributes/using_active_model_attributes/patches.rb +3 -0
  52. data/lib/convenient_service/common/plugins/has_attributes/using_active_model_attributes.rb +4 -0
  53. data/lib/convenient_service/common/plugins/has_callbacks/concern.rb +36 -0
  54. data/lib/convenient_service/common/plugins/has_callbacks/entities/callback.rb +59 -0
  55. data/lib/convenient_service/common/plugins/has_callbacks/entities/callback_collection.rb +35 -0
  56. data/lib/convenient_service/common/plugins/has_callbacks/entities/type/class_methods.rb +26 -0
  57. data/lib/convenient_service/common/plugins/has_callbacks/entities/type.rb +50 -0
  58. data/lib/convenient_service/common/plugins/has_callbacks/entities/type_collection.rb +33 -0
  59. data/lib/convenient_service/common/plugins/has_callbacks/entities.rb +6 -0
  60. data/lib/convenient_service/common/plugins/has_callbacks/middleware.rb +21 -0
  61. data/lib/convenient_service/common/plugins/has_callbacks.rb +5 -0
  62. data/lib/convenient_service/common/plugins/has_constructor/concern.rb +18 -0
  63. data/lib/convenient_service/common/plugins/has_constructor.rb +3 -0
  64. data/lib/convenient_service/common/plugins/has_internals/commands/create_internals_class.rb +56 -0
  65. data/lib/convenient_service/common/plugins/has_internals/commands.rb +3 -0
  66. data/lib/convenient_service/common/plugins/has_internals/concern.rb +28 -0
  67. data/lib/convenient_service/common/plugins/has_internals/entities/internals/concern.rb +25 -0
  68. data/lib/convenient_service/common/plugins/has_internals/entities/internals/plugins/has_cache/concern.rb +30 -0
  69. data/lib/convenient_service/common/plugins/has_internals/entities/internals/plugins/has_cache/entities/cache.rb +81 -0
  70. data/lib/convenient_service/common/plugins/has_internals/entities/internals/plugins/has_cache/entities.rb +3 -0
  71. data/lib/convenient_service/common/plugins/has_internals/entities/internals/plugins/has_cache.rb +4 -0
  72. data/lib/convenient_service/common/plugins/has_internals/entities/internals/plugins.rb +3 -0
  73. data/lib/convenient_service/common/plugins/has_internals/entities/internals.rb +18 -0
  74. data/lib/convenient_service/common/plugins/has_internals/entities.rb +3 -0
  75. data/lib/convenient_service/common/plugins/has_internals.rb +5 -0
  76. data/lib/convenient_service/common/plugins/normalizes_env/middleware.rb +29 -0
  77. data/lib/convenient_service/common/plugins/normalizes_env.rb +3 -0
  78. data/lib/convenient_service/common/plugins.rb +16 -0
  79. data/lib/convenient_service/common.rb +3 -0
  80. data/lib/convenient_service/configs/aliases.rb +7 -0
  81. data/lib/convenient_service/configs/standard.rb +193 -0
  82. data/lib/convenient_service/configs.rb +5 -0
  83. data/lib/convenient_service/core/aliases.rb +9 -0
  84. data/lib/convenient_service/core/class_methods.rb +81 -0
  85. data/lib/convenient_service/core/entities/classic_middleware.rb +32 -0
  86. data/lib/convenient_service/core/entities/config/entities/concerns/entities/default_concern.rb +18 -0
  87. data/lib/convenient_service/core/entities/config/entities/concerns/entities/middleware/commands/cast_middleware.rb +78 -0
  88. data/lib/convenient_service/core/entities/config/entities/concerns/entities/middleware/commands.rb +3 -0
  89. data/lib/convenient_service/core/entities/config/entities/concerns/entities/middleware.rb +103 -0
  90. data/lib/convenient_service/core/entities/config/entities/concerns/entities/stack.rb +206 -0
  91. data/lib/convenient_service/core/entities/config/entities/concerns/entities.rb +5 -0
  92. data/lib/convenient_service/core/entities/config/entities/concerns.rb +216 -0
  93. data/lib/convenient_service/core/entities/config/entities/method_middlewares/commands/generate_stack_name.rb +95 -0
  94. data/lib/convenient_service/core/entities/config/entities/method_middlewares/commands.rb +3 -0
  95. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/commands/cast_caller.rb +72 -0
  96. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/commands/define_method_middlewares_caller.rb +134 -0
  97. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/commands.rb +4 -0
  98. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/concern/class_methods.rb +29 -0
  99. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/concern/instance_methods.rb +66 -0
  100. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/concern.rb +32 -0
  101. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller.rb +25 -0
  102. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/chain.rb +71 -0
  103. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/commands/cast_container.rb +76 -0
  104. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/commands/resolve_methods_middlewares_callers.rb +72 -0
  105. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/commands.rb +4 -0
  106. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/concern/class_methods.rb +29 -0
  107. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/concern/instance_methods.rb +165 -0
  108. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/concern.rb +32 -0
  109. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container.rb +22 -0
  110. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware.rb +114 -0
  111. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/stack.rb +193 -0
  112. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities.rb +7 -0
  113. data/lib/convenient_service/core/entities/config/entities/method_middlewares.rb +182 -0
  114. data/lib/convenient_service/core/entities/config/entities.rb +4 -0
  115. data/lib/convenient_service/core/entities/config/errors.rb +27 -0
  116. data/lib/convenient_service/core/entities/config.rb +147 -0
  117. data/lib/convenient_service/core/entities.rb +4 -0
  118. data/lib/convenient_service/core/instance_methods.rb +54 -0
  119. data/lib/convenient_service/core.rb +19 -0
  120. data/lib/convenient_service/dependencies/built_in.rb +36 -0
  121. data/lib/convenient_service/dependencies/extractions/active_support_concern/concern.rb +258 -0
  122. data/lib/convenient_service/dependencies/extractions/active_support_concern.rb +16 -0
  123. data/lib/convenient_service/dependencies/extractions/b.rb +12 -0
  124. data/lib/convenient_service/dependencies/extractions/byebug_syntax_highlighting.rb +58 -0
  125. data/lib/convenient_service/dependencies/extractions/ruby_middleware/middleware/builder.rb +194 -0
  126. data/lib/convenient_service/dependencies/extractions/ruby_middleware/middleware/logger.rb +60 -0
  127. data/lib/convenient_service/dependencies/extractions/ruby_middleware/middleware/runner.rb +79 -0
  128. data/lib/convenient_service/dependencies/extractions/ruby_middleware/middleware.rb +8 -0
  129. data/lib/convenient_service/dependencies/extractions/ruby_middleware.rb +15 -0
  130. data/lib/convenient_service/dependencies/extractions.rb +10 -0
  131. data/lib/convenient_service/dependencies.rb +133 -0
  132. data/lib/convenient_service/error.rb +16 -0
  133. data/lib/convenient_service/examples/dry/gemfile/dry_service/config.rb +43 -0
  134. data/lib/convenient_service/examples/dry/gemfile/dry_service.rb +3 -0
  135. data/lib/convenient_service/examples/dry/gemfile/services/assert_file_exists.rb +29 -0
  136. data/lib/convenient_service/examples/dry/gemfile/services/assert_file_not_empty.rb +29 -0
  137. data/lib/convenient_service/examples/dry/gemfile/services/assert_node_available.rb +26 -0
  138. data/lib/convenient_service/examples/dry/gemfile/services/assert_npm_package_available.rb +39 -0
  139. data/lib/convenient_service/examples/dry/gemfile/services/assert_valid_ruby_syntax.rb +41 -0
  140. data/lib/convenient_service/examples/dry/gemfile/services/format.rb +37 -0
  141. data/lib/convenient_service/examples/dry/gemfile/services/format_body.rb +93 -0
  142. data/lib/convenient_service/examples/dry/gemfile/services/format_gems_with_envs.rb +96 -0
  143. data/lib/convenient_service/examples/dry/gemfile/services/format_gems_without_envs.rb +84 -0
  144. data/lib/convenient_service/examples/dry/gemfile/services/format_header.rb +74 -0
  145. data/lib/convenient_service/examples/dry/gemfile/services/parse_content.rb +93 -0
  146. data/lib/convenient_service/examples/dry/gemfile/services/print_shell_command.rb +37 -0
  147. data/lib/convenient_service/examples/dry/gemfile/services/read_file_content.rb +31 -0
  148. data/lib/convenient_service/examples/dry/gemfile/services/run_shell.rb +40 -0
  149. data/lib/convenient_service/examples/dry/gemfile/services/strip_comments.rb +109 -0
  150. data/lib/convenient_service/examples/dry/gemfile/services.rb +17 -0
  151. data/lib/convenient_service/examples/dry/gemfile.rb +24 -0
  152. data/lib/convenient_service/examples/rails/gemfile/rails_service/config.rb +54 -0
  153. data/lib/convenient_service/examples/rails/gemfile/rails_service.rb +3 -0
  154. data/lib/convenient_service/examples/rails/gemfile/services/assert_file_exists.rb +25 -0
  155. data/lib/convenient_service/examples/rails/gemfile/services/assert_file_not_empty.rb +25 -0
  156. data/lib/convenient_service/examples/rails/gemfile/services/assert_node_available.rb +26 -0
  157. data/lib/convenient_service/examples/rails/gemfile/services/assert_npm_package_available.rb +35 -0
  158. data/lib/convenient_service/examples/rails/gemfile/services/assert_valid_ruby_syntax.rb +35 -0
  159. data/lib/convenient_service/examples/rails/gemfile/services/format.rb +37 -0
  160. data/lib/convenient_service/examples/rails/gemfile/services/format_body.rb +79 -0
  161. data/lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb +82 -0
  162. data/lib/convenient_service/examples/rails/gemfile/services/format_gems_without_envs.rb +70 -0
  163. data/lib/convenient_service/examples/rails/gemfile/services/format_header.rb +69 -0
  164. data/lib/convenient_service/examples/rails/gemfile/services/parse_content.rb +89 -0
  165. data/lib/convenient_service/examples/rails/gemfile/services/print_shell_command.rb +33 -0
  166. data/lib/convenient_service/examples/rails/gemfile/services/read_file_content.rb +27 -0
  167. data/lib/convenient_service/examples/rails/gemfile/services/run_shell.rb +35 -0
  168. data/lib/convenient_service/examples/rails/gemfile/services/strip_comments.rb +107 -0
  169. data/lib/convenient_service/examples/rails/gemfile/services.rb +17 -0
  170. data/lib/convenient_service/examples/rails/gemfile.rb +24 -0
  171. data/lib/convenient_service/examples/standard/gemfile/services/assert_file_exists.rb +30 -0
  172. data/lib/convenient_service/examples/standard/gemfile/services/assert_file_not_empty.rb +30 -0
  173. data/lib/convenient_service/examples/standard/gemfile/services/assert_node_available.rb +35 -0
  174. data/lib/convenient_service/examples/standard/gemfile/services/assert_npm_package_available.rb +48 -0
  175. data/lib/convenient_service/examples/standard/gemfile/services/assert_valid_ruby_syntax.rb +39 -0
  176. data/lib/convenient_service/examples/standard/gemfile/services/format.rb +39 -0
  177. data/lib/convenient_service/examples/standard/gemfile/services/format_body.rb +83 -0
  178. data/lib/convenient_service/examples/standard/gemfile/services/format_gems_with_envs.rb +86 -0
  179. data/lib/convenient_service/examples/standard/gemfile/services/format_gems_without_envs.rb +74 -0
  180. data/lib/convenient_service/examples/standard/gemfile/services/format_header.rb +66 -0
  181. data/lib/convenient_service/examples/standard/gemfile/services/parse_content.rb +101 -0
  182. data/lib/convenient_service/examples/standard/gemfile/services/print_shell_command.rb +38 -0
  183. data/lib/convenient_service/examples/standard/gemfile/services/read_file_content.rb +39 -0
  184. data/lib/convenient_service/examples/standard/gemfile/services/run_shell.rb +37 -0
  185. data/lib/convenient_service/examples/standard/gemfile/services/strip_comments.rb +111 -0
  186. data/lib/convenient_service/examples/standard/gemfile/services.rb +17 -0
  187. data/lib/convenient_service/examples/standard/gemfile.rb +23 -0
  188. data/lib/convenient_service/logger.rb +70 -0
  189. data/lib/convenient_service/rspec/helpers/custom/ignoring_error.rb +29 -0
  190. data/lib/convenient_service/rspec/helpers/custom/stub_service/entities/result_spec.rb +119 -0
  191. data/lib/convenient_service/rspec/helpers/custom/stub_service/entities/stubbed_service.rb +99 -0
  192. data/lib/convenient_service/rspec/helpers/custom/stub_service/entities.rb +4 -0
  193. data/lib/convenient_service/rspec/helpers/custom/stub_service.rb +26 -0
  194. data/lib/convenient_service/rspec/helpers/custom/wrap_method/entities/wrapped_method.rb +80 -0
  195. data/lib/convenient_service/rspec/helpers/custom/wrap_method/entities.rb +3 -0
  196. data/lib/convenient_service/rspec/helpers/custom/wrap_method/errors.rb +25 -0
  197. data/lib/convenient_service/rspec/helpers/custom/wrap_method.rb +27 -0
  198. data/lib/convenient_service/rspec/helpers/custom.rb +5 -0
  199. data/lib/convenient_service/rspec/helpers/ignoring_error.rb +13 -0
  200. data/lib/convenient_service/rspec/helpers/stub_service.rb +29 -0
  201. data/lib/convenient_service/rspec/helpers/wrap_method.rb +13 -0
  202. data/lib/convenient_service/rspec/helpers.rb +21 -0
  203. data/lib/convenient_service/rspec/matchers/be_descendant_of.rb +13 -0
  204. data/lib/convenient_service/rspec/matchers/be_direct_descendant_of.rb +13 -0
  205. data/lib/convenient_service/rspec/matchers/cache_its_value.rb +13 -0
  206. data/lib/convenient_service/rspec/matchers/call_chain_next.rb +13 -0
  207. data/lib/convenient_service/rspec/matchers/custom/be_descendant_of.rb +55 -0
  208. data/lib/convenient_service/rspec/matchers/custom/be_direct_descendant_of.rb +55 -0
  209. data/lib/convenient_service/rspec/matchers/custom/cache_its_value.rb +55 -0
  210. data/lib/convenient_service/rspec/matchers/custom/call_chain_next.rb +150 -0
  211. data/lib/convenient_service/rspec/matchers/custom/delegate_to.rb +255 -0
  212. data/lib/convenient_service/rspec/matchers/custom/extend_module.rb +40 -0
  213. data/lib/convenient_service/rspec/matchers/custom/have_abstract_method.rb +45 -0
  214. data/lib/convenient_service/rspec/matchers/custom/have_alias_method.rb +45 -0
  215. data/lib/convenient_service/rspec/matchers/custom/have_attr_accessor.rb +43 -0
  216. data/lib/convenient_service/rspec/matchers/custom/have_attr_reader.rb +47 -0
  217. data/lib/convenient_service/rspec/matchers/custom/have_attr_writer.rb +47 -0
  218. data/lib/convenient_service/rspec/matchers/custom/include_module.rb +40 -0
  219. data/lib/convenient_service/rspec/matchers/custom/prepend_module.rb +40 -0
  220. data/lib/convenient_service/rspec/matchers/custom/results/be_error.rb +153 -0
  221. data/lib/convenient_service/rspec/matchers/custom/results/be_failure.rb +120 -0
  222. data/lib/convenient_service/rspec/matchers/custom/results/be_success.rb +120 -0
  223. data/lib/convenient_service/rspec/matchers/custom/results.rb +5 -0
  224. data/lib/convenient_service/rspec/matchers/custom.rb +16 -0
  225. data/lib/convenient_service/rspec/matchers/delegate_to.rb +13 -0
  226. data/lib/convenient_service/rspec/matchers/extend_module.rb +13 -0
  227. data/lib/convenient_service/rspec/matchers/have_abstract_method.rb +13 -0
  228. data/lib/convenient_service/rspec/matchers/have_alias_method.rb +13 -0
  229. data/lib/convenient_service/rspec/matchers/have_attr_accessor.rb +13 -0
  230. data/lib/convenient_service/rspec/matchers/have_attr_reader.rb +13 -0
  231. data/lib/convenient_service/rspec/matchers/have_attr_writer.rb +13 -0
  232. data/lib/convenient_service/rspec/matchers/include_module.rb +13 -0
  233. data/lib/convenient_service/rspec/matchers/prepend_module.rb +13 -0
  234. data/lib/convenient_service/rspec/matchers/results/be_error.rb +15 -0
  235. data/lib/convenient_service/rspec/matchers/results/be_failure.rb +15 -0
  236. data/lib/convenient_service/rspec/matchers/results/be_success.rb +15 -0
  237. data/lib/convenient_service/rspec/matchers/results.rb +21 -0
  238. data/lib/convenient_service/rspec/matchers.rb +43 -0
  239. data/lib/convenient_service/rspec.rb +4 -0
  240. data/lib/convenient_service/service/plugins/aliases.rb +8 -0
  241. data/lib/convenient_service/service/plugins/can_recalculate_result/concern.rb +26 -0
  242. data/lib/convenient_service/service/plugins/can_recalculate_result.rb +3 -0
  243. data/lib/convenient_service/service/plugins/has_result/commands/create_result_class.rb +56 -0
  244. data/lib/convenient_service/service/plugins/has_result/commands.rb +3 -0
  245. data/lib/convenient_service/service/plugins/has_result/concern/class_methods.rb +82 -0
  246. data/lib/convenient_service/service/plugins/has_result/concern/instance_methods.rb +32 -0
  247. data/lib/convenient_service/service/plugins/has_result/concern.rb +22 -0
  248. data/lib/convenient_service/service/plugins/has_result/constants.rb +33 -0
  249. data/lib/convenient_service/service/plugins/has_result/entities/result/commands/cast_result_params.rb +33 -0
  250. data/lib/convenient_service/service/plugins/has_result/entities/result/commands.rb +3 -0
  251. data/lib/convenient_service/service/plugins/has_result/entities/result/concern/instance_methods.rb +64 -0
  252. data/lib/convenient_service/service/plugins/has_result/entities/result/concern.rb +19 -0
  253. data/lib/convenient_service/service/plugins/has_result/entities/result/entities/code/class_methods.rb +30 -0
  254. data/lib/convenient_service/service/plugins/has_result/entities/result/entities/code.rb +45 -0
  255. data/lib/convenient_service/service/plugins/has_result/entities/result/entities/data/class_methods.rb +28 -0
  256. data/lib/convenient_service/service/plugins/has_result/entities/result/entities/data.rb +45 -0
  257. data/lib/convenient_service/service/plugins/has_result/entities/result/entities/message/class_methods.rb +30 -0
  258. data/lib/convenient_service/service/plugins/has_result/entities/result/entities/message.rb +41 -0
  259. data/lib/convenient_service/service/plugins/has_result/entities/result/entities/status/class_methods.rb +30 -0
  260. data/lib/convenient_service/service/plugins/has_result/entities/result/entities/status.rb +69 -0
  261. data/lib/convenient_service/service/plugins/has_result/entities/result/entities.rb +6 -0
  262. data/lib/convenient_service/service/plugins/has_result/entities/result/errors.rb +25 -0
  263. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/can_recalculate_result/concern.rb +27 -0
  264. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/can_recalculate_result.rb +3 -0
  265. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_result_short_syntax/concern/instance_methods.rb +28 -0
  266. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_result_short_syntax/concern.rb +30 -0
  267. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/has_result_short_syntax.rb +3 -0
  268. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/marks_result_status_as_checked/middleware.rb +25 -0
  269. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/marks_result_status_as_checked.rb +3 -0
  270. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/raises_on_not_checked_result_status/errors.rb +31 -0
  271. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/raises_on_not_checked_result_status/middleware.rb +33 -0
  272. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins/raises_on_not_checked_result_status.rb +4 -0
  273. data/lib/convenient_service/service/plugins/has_result/entities/result/plugins.rb +6 -0
  274. data/lib/convenient_service/service/plugins/has_result/entities/result/structs/result_params.rb +17 -0
  275. data/lib/convenient_service/service/plugins/has_result/entities/result/structs.rb +3 -0
  276. data/lib/convenient_service/service/plugins/has_result/entities/result.rb +22 -0
  277. data/lib/convenient_service/service/plugins/has_result/entities.rb +3 -0
  278. data/lib/convenient_service/service/plugins/has_result/errors.rb +34 -0
  279. data/lib/convenient_service/service/plugins/has_result/middleware.rb +19 -0
  280. data/lib/convenient_service/service/plugins/has_result.rb +8 -0
  281. data/lib/convenient_service/service/plugins/has_result_method_steps/errors.rb +23 -0
  282. data/lib/convenient_service/service/plugins/has_result_method_steps/middleware.rb +37 -0
  283. data/lib/convenient_service/service/plugins/has_result_method_steps/services/method_step_config.rb +29 -0
  284. data/lib/convenient_service/service/plugins/has_result_method_steps/services/run_method_in_organizer.rb +30 -0
  285. data/lib/convenient_service/service/plugins/has_result_method_steps/services/run_own_method_in_organizer.rb +52 -0
  286. data/lib/convenient_service/service/plugins/has_result_method_steps/services.rb +5 -0
  287. data/lib/convenient_service/service/plugins/has_result_method_steps.rb +5 -0
  288. data/lib/convenient_service/service/plugins/has_result_params_validations/using_active_model_validations/concern.rb +19 -0
  289. data/lib/convenient_service/service/plugins/has_result_params_validations/using_active_model_validations/middleware.rb +35 -0
  290. data/lib/convenient_service/service/plugins/has_result_params_validations/using_active_model_validations.rb +4 -0
  291. data/lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/concern.rb +22 -0
  292. data/lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb +39 -0
  293. data/lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation.rb +4 -0
  294. data/lib/convenient_service/service/plugins/has_result_short_syntax/concern.rb +30 -0
  295. data/lib/convenient_service/service/plugins/has_result_short_syntax/error/commands/assert_args_count_lower_than_three.rb +25 -0
  296. data/lib/convenient_service/service/plugins/has_result_short_syntax/error/commands/assert_either_args_or_kwargs_are_passed.rb +26 -0
  297. data/lib/convenient_service/service/plugins/has_result_short_syntax/error/commands.rb +4 -0
  298. data/lib/convenient_service/service/plugins/has_result_short_syntax/error/errors.rb +46 -0
  299. data/lib/convenient_service/service/plugins/has_result_short_syntax/error/middleware.rb +27 -0
  300. data/lib/convenient_service/service/plugins/has_result_short_syntax/error.rb +5 -0
  301. data/lib/convenient_service/service/plugins/has_result_short_syntax/failure/commands/refute_kwargs_contain_data_and_extra_keys.rb +29 -0
  302. data/lib/convenient_service/service/plugins/has_result_short_syntax/failure/commands.rb +3 -0
  303. data/lib/convenient_service/service/plugins/has_result_short_syntax/failure/errors.rb +28 -0
  304. data/lib/convenient_service/service/plugins/has_result_short_syntax/failure/middleware.rb +19 -0
  305. data/lib/convenient_service/service/plugins/has_result_short_syntax/failure.rb +5 -0
  306. data/lib/convenient_service/service/plugins/has_result_short_syntax/success/commands/refute_kwargs_contain_data_and_extra_keys.rb +29 -0
  307. data/lib/convenient_service/service/plugins/has_result_short_syntax/success/commands.rb +3 -0
  308. data/lib/convenient_service/service/plugins/has_result_short_syntax/success/errors.rb +28 -0
  309. data/lib/convenient_service/service/plugins/has_result_short_syntax/success/middleware.rb +19 -0
  310. data/lib/convenient_service/service/plugins/has_result_short_syntax/success.rb +5 -0
  311. data/lib/convenient_service/service/plugins/has_result_short_syntax.rb +6 -0
  312. data/lib/convenient_service/service/plugins/has_result_steps/commands/create_step_class.rb +60 -0
  313. data/lib/convenient_service/service/plugins/has_result_steps/commands.rb +3 -0
  314. data/lib/convenient_service/service/plugins/has_result_steps/concern.rb +53 -0
  315. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method.rb +54 -0
  316. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method_caller.rb +67 -0
  317. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method_direction.rb +65 -0
  318. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method_key.rb +71 -0
  319. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method_name.rb +74 -0
  320. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/define_method_in_container.rb +55 -0
  321. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands.rb +8 -0
  322. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/concern/class_methods.rb +21 -0
  323. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/concern/instance_methods.rb +96 -0
  324. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/concern.rb +29 -0
  325. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/alias.rb +39 -0
  326. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/base.rb +49 -0
  327. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/proc.rb +42 -0
  328. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/raw.rb +42 -0
  329. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/usual.rb +39 -0
  330. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers.rb +7 -0
  331. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/directions/base.rb +33 -0
  332. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/directions/input.rb +31 -0
  333. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/directions/output.rb +31 -0
  334. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/directions.rb +5 -0
  335. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/key.rb +40 -0
  336. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/name.rb +40 -0
  337. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/values/raw.rb +48 -0
  338. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/values.rb +3 -0
  339. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities.rb +7 -0
  340. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/errors.rb +127 -0
  341. data/lib/convenient_service/service/plugins/has_result_steps/entities/method.rb +20 -0
  342. data/lib/convenient_service/service/plugins/has_result_steps/entities/service/class_methods.rb +32 -0
  343. data/lib/convenient_service/service/plugins/has_result_steps/entities/service.rb +48 -0
  344. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/commands/cast_params.rb +61 -0
  345. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/commands/extract_params.rb +38 -0
  346. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/commands.rb +4 -0
  347. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/concern/instance_methods.rb +138 -0
  348. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/concern.rb +23 -0
  349. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/errors.rb +23 -0
  350. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/structs/params.rb +17 -0
  351. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/structs.rb +3 -0
  352. data/lib/convenient_service/service/plugins/has_result_steps/entities/step.rb +20 -0
  353. data/lib/convenient_service/service/plugins/has_result_steps/entities/step_collection.rb +61 -0
  354. data/lib/convenient_service/service/plugins/has_result_steps/entities.rb +6 -0
  355. data/lib/convenient_service/service/plugins/has_result_steps/middleware.rb +26 -0
  356. data/lib/convenient_service/service/plugins/has_result_steps.rb +6 -0
  357. data/lib/convenient_service/service/plugins/raises_on_double_result/errors.rb +34 -0
  358. data/lib/convenient_service/service/plugins/raises_on_double_result/middleware.rb +33 -0
  359. data/lib/convenient_service/service/plugins/raises_on_double_result.rb +4 -0
  360. data/lib/convenient_service/service/plugins/wraps_result_in_db_transaction/middleware.rb +15 -0
  361. data/lib/convenient_service/service/plugins/wraps_result_in_db_transaction.rb +3 -0
  362. data/lib/convenient_service/service/plugins.rb +14 -0
  363. data/lib/convenient_service/service.rb +3 -0
  364. data/lib/convenient_service/specification.rb +21 -0
  365. data/lib/convenient_service/support/abstract_method/errors.rb +22 -0
  366. data/lib/convenient_service/support/abstract_method.rb +21 -0
  367. data/lib/convenient_service/support/castable/errors.rb +29 -0
  368. data/lib/convenient_service/support/castable.rb +44 -0
  369. data/lib/convenient_service/support/command.rb +25 -0
  370. data/lib/convenient_service/support/concern.rb +11 -0
  371. data/lib/convenient_service/support/copyable.rb +56 -0
  372. data/lib/convenient_service/support/delegate.rb +42 -0
  373. data/lib/convenient_service/support/finite_loop.rb +49 -0
  374. data/lib/convenient_service/support/middleware/stack_builder.rb +78 -0
  375. data/lib/convenient_service/support/middleware.rb +3 -0
  376. data/lib/convenient_service/support.rb +11 -0
  377. data/lib/convenient_service/utils/array/contain_exactly.rb +56 -0
  378. data/lib/convenient_service/utils/array/drop_while.rb +50 -0
  379. data/lib/convenient_service/utils/array/errors.rb +19 -0
  380. data/lib/convenient_service/utils/array/find_last.rb +38 -0
  381. data/lib/convenient_service/utils/array/find_yield.rb +93 -0
  382. data/lib/convenient_service/utils/array/keep_after.rb +41 -0
  383. data/lib/convenient_service/utils/array/merge.rb +77 -0
  384. data/lib/convenient_service/utils/array/rjust.rb +50 -0
  385. data/lib/convenient_service/utils/array/wrap.rb +40 -0
  386. data/lib/convenient_service/utils/array.rb +52 -0
  387. data/lib/convenient_service/utils/bool/to_bool.rb +37 -0
  388. data/lib/convenient_service/utils/bool.rb +15 -0
  389. data/lib/convenient_service/utils/hash/except.rb +46 -0
  390. data/lib/convenient_service/utils/hash.rb +15 -0
  391. data/lib/convenient_service/utils/method/defined.rb +49 -0
  392. data/lib/convenient_service/utils/method.rb +15 -0
  393. data/lib/convenient_service/utils/module/class_method_defined.rb +46 -0
  394. data/lib/convenient_service/utils/module/get_own_const.rb +60 -0
  395. data/lib/convenient_service/utils/module/get_own_instance_method.rb +81 -0
  396. data/lib/convenient_service/utils/module/has_own_instance_method.rb +77 -0
  397. data/lib/convenient_service/utils/module/instance_method_defined.rb +46 -0
  398. data/lib/convenient_service/utils/module.rb +40 -0
  399. data/lib/convenient_service/utils/object/resolve_type.rb +47 -0
  400. data/lib/convenient_service/utils/object.rb +19 -0
  401. data/lib/convenient_service/utils/proc/conjunct.rb +48 -0
  402. data/lib/convenient_service/utils/proc/exec_config.rb +136 -0
  403. data/lib/convenient_service/utils/proc.rb +20 -0
  404. data/lib/convenient_service/utils/string/camelize.rb +56 -0
  405. data/lib/convenient_service/utils/string.rb +15 -0
  406. data/lib/convenient_service/utils.rb +10 -0
  407. data/lib/convenient_service/version.rb +5 -0
  408. data/lib/convenient_service.rb +31 -0
  409. data/logo.png +0 -0
  410. metadata +738 -0
@@ -0,0 +1,165 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Core
5
+ module Entities
6
+ class Config
7
+ module Entities
8
+ class MethodMiddlewares
9
+ module Entities
10
+ class Container
11
+ module Concern
12
+ module InstanceMethods
13
+ include Support::Copyable
14
+ include Support::Delegate
15
+
16
+ ##
17
+ # @!attribute [r] klass
18
+ # @return [Class]
19
+ #
20
+ attr_reader :klass
21
+
22
+ ##
23
+ # @return [Array<Class, Module>]
24
+ #
25
+ delegate :ancestors, to: :klass
26
+
27
+ ##
28
+ # @param klass [Class]
29
+ # @return [void]
30
+ #
31
+ def initialize(klass:)
32
+ @klass = klass
33
+ end
34
+
35
+ ##
36
+ # @param method_name [Symbol, String]
37
+ # @return [UnboundMethod, nil]
38
+ #
39
+ def super_method_defined?(method_name)
40
+ Utils::Bool.to_bool(resolve_unbound_super_method(method_name))
41
+ end
42
+
43
+ ##
44
+ # Returns ancestors before the `methods_middlewares_callers` module. See the example below.
45
+ # When ancestors do NOT contain `methods_middlewares_callers`, returns an empty array.
46
+ #
47
+ # @return [Array<Class, Module>]
48
+ #
49
+ # @example The entity is an object.
50
+ # class Service
51
+ # include ConvenientService::Core
52
+ #
53
+ # middlewares :result do
54
+ # use ConvenientService::Plugins::Common::NormalizesEnv
55
+ # end
56
+ # end
57
+ #
58
+ # entity = Service.new
59
+ #
60
+ # entity.class.ancestors
61
+ # # [Service::InstanceMethodsMiddlewaresCallers, Service, ConvenientService::Core::InstanceMethods, ConvenientService::Core, ConvenientService::Support::Concern, Object, Kernel, BasicObject]
62
+ #
63
+ # ancestors_greater_than_methods_middlewares_callers # For the entity defined above.
64
+ # # [Service, ConvenientService::Core::InstanceMethods, ConvenientService::Core, ConvenientService::Support::Concern, Object, Kernel, BasicObject]
65
+ #
66
+ # @example The entity is class.
67
+ # class Service
68
+ # include ConvenientService::Core
69
+ #
70
+ # middlewares :result, scope: :class do
71
+ # use ConvenientService::Plugins::Common::NormalizesEnv
72
+ # end
73
+ # end
74
+ #
75
+ # entity = Service
76
+ #
77
+ # entity.singleton_class.ancestors
78
+ # # [Service::ClassMethodsMiddlewaresCallers, #<Class:Service>, ConvenientService::Core::ClassMethods, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]
79
+ #
80
+ # ancestors_greater_than_methods_middlewares_callers # For the entity defined above.
81
+ # # [#<Class:Service>, ConvenientService::Core::ClassMethods, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]# [Service::ClassMethodsMiddlewaresCallers, #<Class:Service>, ConvenientService::Core::ClassMethods, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]
82
+ #
83
+ # @note Returns empty array when `methods_middlewares_callers` are NOT prepended.
84
+ # @note If you expect to receive not empty array, make sure the config is committed.
85
+ #
86
+ # @internal
87
+ # NOTE: greater than -> futher in the inheritance chain than
88
+ # https://ruby-doc.org/core-2.7.0/Module.html#method-i-3E
89
+ #
90
+ # NOTE: lower than -> closer in the inheritance chain than
91
+ # https://ruby-doc.org/core-2.7.0/Module.html#method-i-ancestors
92
+ #
93
+ def ancestors_greater_than_methods_middlewares_callers
94
+ Utils::Array.keep_after(ancestors, methods_middlewares_callers)
95
+ end
96
+
97
+ ##
98
+ # @return [Module]
99
+ #
100
+ def methods_middlewares_callers
101
+ @methods_middlewares_callers ||= Commands::ResolveMethodsMiddlewaresCallers.call(container: self)
102
+ end
103
+
104
+ ##
105
+ # @return [void]
106
+ #
107
+ def prepend_methods_middlewares_callers_to_container
108
+ klass.prepend(methods_middlewares_callers)
109
+ end
110
+
111
+ ##
112
+ # @param method_name [Symbol, String]
113
+ # @return [UnboundMethod, nil]
114
+ #
115
+ # @note Returns `nil` when `methods_middlewares_callers` are NOT prepended.
116
+ # @note If you expect to receive not `nil`, make sure the config is committed.
117
+ #
118
+ def resolve_unbound_super_method(method_name)
119
+ Utils::Array.find_yield(ancestors_greater_than_methods_middlewares_callers) { |ancestor| Utils::Module.get_own_instance_method(ancestor, method_name, private: true) }
120
+ end
121
+
122
+ ##
123
+ # @param method_name [Symbol, String]
124
+ # @param entity [Class, Object]
125
+ # @return [Method, nil]
126
+ #
127
+ # @note Returns `nil` when `methods_middlewares_callers` are NOT prepended.
128
+ # @note If you expect to receive not `nil`, make sure the config is committed.
129
+ #
130
+ def resolve_super_method(method_name, entity)
131
+ unbound_super_method = resolve_unbound_super_method(method_name)
132
+
133
+ return unless unbound_super_method
134
+
135
+ unbound_super_method.bind(entity)
136
+ end
137
+
138
+ ##
139
+ # @param other [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Container, Object]
140
+ # @return [Boolean, nil]
141
+ #
142
+ def ==(other)
143
+ return unless other.instance_of?(self.class)
144
+
145
+ return false if klass != other.klass
146
+
147
+ true
148
+ end
149
+
150
+ ##
151
+ # @return [Hash]
152
+ #
153
+ def to_kwargs
154
+ {klass: klass}
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "concern/instance_methods"
4
+ require_relative "concern/class_methods"
5
+
6
+ module ConvenientService
7
+ module Core
8
+ module Entities
9
+ class Config
10
+ module Entities
11
+ class MethodMiddlewares
12
+ module Entities
13
+ class Container
14
+ module Concern
15
+ include Support::Concern
16
+
17
+ included do |container_klass|
18
+ container_klass.include Support::Castable
19
+
20
+ container_klass.include InstanceMethods
21
+
22
+ container_klass.extend ClassMethods
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "container/commands"
4
+ require_relative "container/concern"
5
+
6
+ module ConvenientService
7
+ module Core
8
+ module Entities
9
+ class Config
10
+ module Entities
11
+ class MethodMiddlewares
12
+ module Entities
13
+ class Container
14
+ include Concern
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Core
5
+ module Entities
6
+ class Config
7
+ module Entities
8
+ class MethodMiddlewares
9
+ module Entities
10
+ ##
11
+ # @abstract Subclass and override `#next`.
12
+ #
13
+ # @internal
14
+ # NOTE: Do NOT pollute the interface of this class until really needed.
15
+ # Avoid even pollution of private methods.
16
+ # This way there is a lower risk that a plugin developer accidentally overwrites an internal middleware behavior.
17
+ # https://github.com/Ibsciss/ruby-middleware#a-basic-example
18
+ #
19
+ class Middleware
20
+ include Support::AbstractMethod
21
+
22
+ ##
23
+ # @return [Object] Can be any type.
24
+ # @raise [ConvenientService::Support::AbstractMethod::Errors::AbstractMethodNotOverridden] if NOT overridden in descendant.
25
+ #
26
+ # @example Subclass should call `value = chain.next(*args, **kwargs, &block)` to trigger next middleware in a stack.
27
+ # def next(*args, **kwargs, &block)
28
+ # # pre processing...
29
+ #
30
+ # value = chain.next(*args, **kwargs, &block)
31
+ #
32
+ # # post processing...
33
+ #
34
+ # post_processed_value
35
+ # end
36
+ #
37
+ # @see https://refactoring.guru/design-patterns/decorator
38
+ #
39
+ # @note But it completely OK, to omit `chain.next(*args, **kwargs, &block)` completely.
40
+ # This way middleware stack is stopped in the "middle" and its "middle" value is returned.
41
+ # @see https://refactoring.guru/design-patterns/proxy
42
+ # @see https://refactoring.guru/design-patterns/chain-of-responsibility
43
+ #
44
+ abstract_method :next
45
+
46
+ ##
47
+ # @param stack [#call<Hash>]
48
+ # @return [void]
49
+ #
50
+ def initialize(stack, env: {})
51
+ @__stack__ = stack
52
+ @__env__ = env
53
+ end
54
+
55
+ ##
56
+ # @param env [Hash]
57
+ # @return [Object] Can be any type.
58
+ #
59
+ def call(env)
60
+ @__env__ = env
61
+
62
+ ##
63
+ # IMPORTANT: This is a library code. Do NOT do things like this in your application code.
64
+ #
65
+ chain.instance_variable_set(:@env, env)
66
+
67
+ ##
68
+ # NOTE: `__send__` is used since `next` is ruby keyword.
69
+ # https://ruby-doc.org/core-2.7.0/doc/keywords_rdoc.html
70
+ #
71
+ # TODO: Enforce to always pass args, kwargs, block.
72
+ #
73
+ __send__(:next, *env[:args], **env[:kwargs], &env[:block])
74
+ end
75
+
76
+ ##
77
+ # @return [Class, Object]
78
+ #
79
+ # @internal
80
+ # NOTE: `@__env__` is set inside `call`.
81
+ #
82
+ def entity
83
+ @__env__[:entity]
84
+ end
85
+
86
+ ##
87
+ # @return [Symbol]
88
+ #
89
+ # @note Try to avoid `if` conditions based on `method` value when possible, prefer to create separate middlewares instead.
90
+ #
91
+ # @internal
92
+ # NOTE: `@__env__` is set inside `call`.
93
+ #
94
+ def method
95
+ @__env__[:method]
96
+ end
97
+
98
+ ##
99
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Chain]
100
+ #
101
+ # @internal
102
+ # NOTE: `@__env__` is set inside `call`.
103
+ #
104
+ def chain
105
+ @__chain__ ||= Entities::Chain.new(stack: @__stack__)
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,193 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Core
5
+ module Entities
6
+ class Config
7
+ module Entities
8
+ class MethodMiddlewares
9
+ module Entities
10
+ class Stack
11
+ ##
12
+ # @overload initialize(name:)
13
+ # @param name [String]
14
+ # @return [void]
15
+ #
16
+ # @overload initialize(plain_stack:)
17
+ # @param name [ConvenientService::Support::Middleware::StackBuilder]
18
+ # @return [void]
19
+ #
20
+ def initialize(name: nil, plain_stack: nil)
21
+ @plain_stack = plain_stack || Support::Middleware::StackBuilder.new(name: name)
22
+ end
23
+
24
+ ##
25
+ # @return [String]
26
+ #
27
+ def name
28
+ plain_stack.name
29
+ end
30
+
31
+ ##
32
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Stack]
33
+ #
34
+ def dup
35
+ self.class.new(plain_stack: plain_stack.dup)
36
+ end
37
+
38
+ ##
39
+ # @param env [Hash]
40
+ # @return [Object] Can be any type.
41
+ #
42
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L132
43
+ #
44
+ def call(env)
45
+ plain_stack.call(env)
46
+ end
47
+
48
+ ##
49
+ # @param index_or_middleware [Integer, ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
50
+ # @param middleware [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
51
+ # @param args [Array]
52
+ # @param block [Proc]
53
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Stack]
54
+ #
55
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L88
56
+ #
57
+ def insert(index_or_middleware, middleware, *args, &block)
58
+ plain_stack.insert(index_or_middleware, middleware, *args, &block)
59
+
60
+ self
61
+ end
62
+
63
+ ##
64
+ # @see insert
65
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L94
66
+ #
67
+ alias_method :insert_before, :insert
68
+
69
+ ##
70
+ # @param index_or_middleware [Integer, ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
71
+ # @param middleware [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
72
+ # @param args [Array]
73
+ # @param block [Proc]
74
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Stack]
75
+ #
76
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L97
77
+ #
78
+ def insert_after(index_or_middleware, middleware, *args, &block)
79
+ plain_stack.insert_after(index_or_middleware, middleware, *args, &block)
80
+
81
+ self
82
+ end
83
+
84
+ ##
85
+ # @param middleware [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
86
+ # @param args [Array]
87
+ # @param block [Proc]
88
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Stack]
89
+ #
90
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L104
91
+ #
92
+ def insert_before_each(middleware, *args, &block)
93
+ plain_stack.insert_before_each(middleware, *args, &block)
94
+
95
+ self
96
+ end
97
+
98
+ ##
99
+ # @param middleware [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
100
+ # @param args [Array]
101
+ # @param block [Proc]
102
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Stack]
103
+ #
104
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L111
105
+ #
106
+ def insert_after_each(middleware, *args, &block)
107
+ plain_stack.insert_after_each(middleware, *args, &block)
108
+
109
+ self
110
+ end
111
+
112
+ ##
113
+ # @param index_or_middleware [Integer, ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
114
+ # @param middleware [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
115
+ # @param args [Array]
116
+ # @param block [Proc]
117
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Stack]
118
+ #
119
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L118
120
+ #
121
+ def replace(index_or_middleware, middleware, *args, &block)
122
+ plain_stack.replace(index_or_middleware, middleware, *args, &block)
123
+
124
+ self
125
+ end
126
+
127
+ ##
128
+ # @param index_or_middleware [Integer, ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
129
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Stack]
130
+ #
131
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L126
132
+ #
133
+ def delete(index_or_middleware)
134
+ plain_stack.delete(index_or_middleware)
135
+
136
+ self
137
+ end
138
+
139
+ ##
140
+ # @param middleware [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware]
141
+ # @param args [Array]
142
+ # @param block [Proc]
143
+ # @return [ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Stack]
144
+ #
145
+ # @see https://github.com/marian13/ruby-middleware/blob/v0.4.2/lib/middleware/builder.rb#L76
146
+ #
147
+ def use(middleware, *args, &block)
148
+ plain_stack.use(middleware, *args, &block)
149
+
150
+ self
151
+ end
152
+
153
+ ##
154
+ # @return [Boolean]
155
+ #
156
+ def empty?
157
+ to_a.empty?
158
+ end
159
+
160
+ ##
161
+ # @param other [ConvenientService::Core::Entities::Config::Entities::Concerns::Entities::Stack, Object]
162
+ # @return [Boolean, nil]
163
+ #
164
+ def ==(other)
165
+ return unless other.instance_of?(self.class)
166
+
167
+ return false if plain_stack != other.plain_stack
168
+
169
+ true
170
+ end
171
+
172
+ ##
173
+ # @return [Array<ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares::Entities::Middleware>]
174
+ #
175
+ def to_a
176
+ plain_stack.to_a
177
+ end
178
+
179
+ protected
180
+
181
+ ##
182
+ # @!attribute [r] plain_stack
183
+ # @return [ConvenientService::Support::Middleware::StackBuilder]
184
+ #
185
+ attr_reader :plain_stack
186
+ end
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "entities/caller"
4
+ require_relative "entities/chain"
5
+ require_relative "entities/container"
6
+ require_relative "entities/middleware"
7
+ require_relative "entities/stack"