convenient_service 0.17.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (406) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/lib/convenient_service/common/plugins/ensures_negated_j_send_result/middleware.rb +22 -0
  4. data/lib/convenient_service/common/plugins/ensures_negated_j_send_result.rb +3 -0
  5. data/lib/convenient_service/common/plugins/has_around_callbacks/concern.rb +8 -1
  6. data/lib/convenient_service/common/plugins/has_around_callbacks/middleware.rb +28 -7
  7. data/lib/convenient_service/common/plugins/has_callbacks/concern.rb +19 -9
  8. data/lib/convenient_service/common/plugins/has_callbacks/entities/callback_collection.rb +49 -1
  9. data/lib/convenient_service/common/plugins/has_callbacks/middleware.rb +21 -3
  10. data/lib/convenient_service/common/plugins/has_callbacks.rb +0 -1
  11. data/lib/convenient_service/common/plugins/has_instance_proxy/entities/instance_proxy.rb +1 -1
  12. data/lib/convenient_service/common/plugins/has_internals/entities/internals/plugins/has_cache/concern.rb +12 -0
  13. data/lib/convenient_service/common/plugins.rb +1 -0
  14. data/lib/convenient_service/core/entities/config/exceptions.rb +2 -0
  15. data/lib/convenient_service/core/entities/config.rb +3 -0
  16. data/lib/convenient_service/dependencies.rb +11 -3
  17. data/lib/convenient_service/logger.rb +9 -1
  18. data/lib/convenient_service/rspec/matchers/classes/call_chain_next.rb +41 -0
  19. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/commands/generate_printable_method.rb +46 -0
  20. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/delegation.rb +89 -0
  21. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/inputs.rb +223 -0
  22. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/outputs.rb +38 -0
  23. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matcher_collection.rb +157 -0
  24. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/arguments/commands/apply_stub_to_track_delegations.rb +77 -0
  25. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/arguments/commands/generate_printable_arguments.rb +94 -0
  26. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/arguments.rb +89 -0
  27. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/base.rb +99 -0
  28. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/return_custom_value.rb +91 -0
  29. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/return_delegation_value.rb +129 -0
  30. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/with_any_arguments.rb +31 -0
  31. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/with_concrete_arguments.rb +31 -0
  32. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers/without_arguments.rb +31 -0
  33. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/sub_matchers.rb +11 -0
  34. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities.rb +5 -1
  35. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/exceptions.rb +65 -0
  36. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to.rb +163 -41
  37. data/lib/convenient_service/service/configs/minimal.rb +85 -33
  38. data/lib/convenient_service/service/configs/standard/v1.rb +42 -24
  39. data/lib/convenient_service/service/configs/standard.rb +60 -46
  40. data/lib/convenient_service/service/plugins/can_have_connected_steps/concern.rb +503 -0
  41. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/and.rb +133 -0
  42. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/base.rb +126 -0
  43. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/empty.rb +104 -0
  44. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/group.rb +118 -0
  45. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/not.rb +118 -0
  46. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/or.rb +145 -0
  47. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions/scalar.rb +133 -0
  48. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/expressions.rb +10 -0
  49. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities/step_collection.rb +217 -0
  50. data/lib/convenient_service/service/plugins/can_have_connected_steps/entities.rb +4 -0
  51. data/lib/convenient_service/service/plugins/can_have_connected_steps/exceptions.rb +95 -0
  52. data/lib/convenient_service/service/plugins/can_have_connected_steps/middleware.rb +30 -0
  53. data/lib/convenient_service/service/plugins/can_have_connected_steps.rb +6 -0
  54. data/lib/convenient_service/service/plugins/can_have_sequential_steps/concern.rb +76 -0
  55. data/lib/convenient_service/service/plugins/{can_have_steps → can_have_sequential_steps}/entities/step_collection.rb +54 -10
  56. data/lib/convenient_service/service/plugins/can_have_sequential_steps/entities.rb +3 -0
  57. data/lib/convenient_service/service/plugins/{can_have_steps → can_have_sequential_steps}/middleware.rb +7 -3
  58. data/lib/convenient_service/service/plugins/can_have_sequential_steps.rb +5 -0
  59. data/lib/convenient_service/service/plugins/can_have_steps/concern.rb +4 -57
  60. data/lib/convenient_service/service/plugins/can_have_steps/entities/method/commands/define_method_in_container.rb +45 -26
  61. data/lib/convenient_service/service/plugins/can_have_steps/entities/method/entities/callers/reassignment.rb +0 -2
  62. data/lib/convenient_service/service/plugins/can_have_steps/entities/method/exceptions.rb +4 -24
  63. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/concern/instance_methods.rb +155 -80
  64. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/exceptions.rb +19 -0
  65. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/{can_be_result_step → can_be_method_step}/can_be_executed/exceptions.rb +1 -1
  66. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_be_method_step/can_be_executed/middleware.rb +64 -4
  67. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_be_method_step/can_be_executed.rb +1 -0
  68. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_be_method_step/concern.rb +7 -0
  69. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_have_alternative_steps.rb +3 -0
  70. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_have_fallbacks/concern.rb +0 -46
  71. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_have_fallbacks/middleware.rb +26 -2
  72. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_have_parent_result/middleware.rb +13 -1
  73. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/{can_be_result_step → has_result}/concern.rb +8 -4
  74. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/has_result/middleware.rb +33 -0
  75. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/has_result.rb +4 -0
  76. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins.rb +2 -1
  77. data/lib/convenient_service/service/plugins/can_have_steps/entities.rb +0 -1
  78. data/lib/convenient_service/service/plugins/can_have_steps.rb +0 -1
  79. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/can_have_checked_status/concern.rb +2 -2
  80. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/can_have_checked_status.rb +0 -1
  81. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_j_send_status_and_attributes/concern/instance_methods.rb +135 -2
  82. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_j_send_status_and_attributes/entities/status/concern/instance_methods.rb +45 -17
  83. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_j_send_status_and_attributes/entities/status/plugins/can_be_checked/concern.rb +38 -0
  84. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_j_send_status_and_attributes/entities/status/plugins/can_be_checked/middleware.rb +51 -0
  85. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_j_send_status_and_attributes/entities/status/plugins/can_be_checked.rb +4 -0
  86. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_j_send_status_and_attributes/entities/status/plugins.rb +1 -0
  87. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_j_send_status_and_attributes/exceptions.rb +15 -0
  88. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_negated_result/concern.rb +72 -0
  89. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_negated_result.rb +3 -0
  90. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/raises_on_not_checked_result_status/middleware.rb +1 -1
  91. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins.rb +1 -0
  92. data/lib/convenient_service/service/plugins/has_j_send_result.rb +0 -1
  93. data/lib/convenient_service/service/plugins/has_j_send_result_params_validations/using_dry_validation/middleware.rb +4 -0
  94. data/lib/convenient_service/service/plugins/has_negated_j_send_result/concern.rb +23 -0
  95. data/lib/convenient_service/service/plugins/has_negated_j_send_result.rb +3 -0
  96. data/lib/convenient_service/service/plugins/has_negated_result/concern.rb +33 -0
  97. data/lib/convenient_service/service/plugins/{has_j_send_result → has_negated_result}/exceptions.rb +3 -3
  98. data/lib/convenient_service/service/plugins/has_negated_result.rb +4 -0
  99. data/lib/convenient_service/service/plugins/{wraps_result_in_db_transaction → wraps_result_in_d_b_transaction}/middleware.rb +1 -1
  100. data/lib/convenient_service/service/plugins.rb +7 -2
  101. data/lib/convenient_service/specification.rb +28 -0
  102. data/lib/convenient_service/support/backtrace_cleaner.rb +6 -1
  103. data/lib/convenient_service/support/cache/entities/caches/base.rb +3 -0
  104. data/lib/convenient_service/support/method_parameters.rb +121 -0
  105. data/lib/convenient_service/support/never_reach_here.rb +21 -0
  106. data/lib/convenient_service/support/unique_value.rb +3 -0
  107. data/lib/convenient_service/support/value.rb +78 -0
  108. data/lib/convenient_service/support.rb +3 -0
  109. data/lib/convenient_service/utils/array/find_last.rb +8 -3
  110. data/lib/convenient_service/utils/object/instance_variable_delete.rb +1 -1
  111. data/lib/convenient_service/version.rb +1 -1
  112. data/lib/convenient_service.rb +23 -0
  113. metadata +109 -308
  114. data/.dev/.tmuxinator.yml +0 -22
  115. data/.dockerignore +0 -1
  116. data/.gem_release.yml +0 -11
  117. data/.github/contributing.md +0 -15
  118. data/.github/issue_template.md +0 -35
  119. data/.github/pull_request_template.md +0 -31
  120. data/.github/workflows/cd.yml +0 -68
  121. data/.github/workflows/ci.yml +0 -212
  122. data/.gitignore +0 -66
  123. data/.inch.yml +0 -7
  124. data/.rspec +0 -3
  125. data/.rubocop.yml +0 -45
  126. data/.rubocop_rspec.yml +0 -58
  127. data/.ruby-version +0 -1
  128. data/.tool-versions +0 -1
  129. data/.vscode/CacheItsValue.code-snippets +0 -15
  130. data/.vscode/DelegateTo.code-snippets +0 -15
  131. data/.vscode/cache_its_value.code-snippets +0 -17
  132. data/.vscode/comparison.code-snippets +0 -41
  133. data/.vscode/delegate_to.code-snippets +0 -20
  134. data/.yardopts +0 -16
  135. data/Appraisals +0 -146
  136. data/CHANGELOG.md +0 -504
  137. data/Gemfile +0 -17
  138. data/ROADMAP.md +0 -92
  139. data/Rakefile +0 -54
  140. data/Taskfile.yml +0 -679
  141. data/benchmark/commit_config/ips.rb +0 -18
  142. data/benchmark/commit_config/profile.rb +0 -30
  143. data/benchmark/empty_service/ips.rb +0 -123
  144. data/benchmark/has_committed_config/ips.rb +0 -78
  145. data/benchmark/has_committed_config/profile.rb +0 -30
  146. data/convenient_service.gemspec +0 -233
  147. data/coverage/.gitkeep +0 -0
  148. data/docker/2.7/Dockerfile +0 -73
  149. data/docker/3.0/Dockerfile +0 -73
  150. data/docker/3.1/Dockerfile +0 -73
  151. data/docker/3.2/Dockerfile +0 -73
  152. data/docker/jruby-9.4/Dockerfile +0 -88
  153. data/docker/truffleruby-22.3/Dockerfile +0 -91
  154. data/docs/.gitkeep +0 -0
  155. data/docs/api/.gitkeep +0 -0
  156. data/env.rb +0 -23
  157. data/gemfiles/.gitkeep +0 -0
  158. data/lib/convenient_service/common/plugins/has_callbacks/container.rb +0 -17
  159. data/lib/convenient_service/examples/dry/gemfile/dry_service/config.rb +0 -45
  160. data/lib/convenient_service/examples/dry/gemfile/dry_service.rb +0 -3
  161. data/lib/convenient_service/examples/dry/gemfile/services/assert_file_exists.rb +0 -29
  162. data/lib/convenient_service/examples/dry/gemfile/services/assert_file_not_empty.rb +0 -29
  163. data/lib/convenient_service/examples/dry/gemfile/services/assert_node_available.rb +0 -26
  164. data/lib/convenient_service/examples/dry/gemfile/services/assert_npm_package_available.rb +0 -39
  165. data/lib/convenient_service/examples/dry/gemfile/services/assert_valid_ruby_syntax.rb +0 -41
  166. data/lib/convenient_service/examples/dry/gemfile/services/format.rb +0 -37
  167. data/lib/convenient_service/examples/dry/gemfile/services/format_body.rb +0 -93
  168. data/lib/convenient_service/examples/dry/gemfile/services/format_gems_with_envs.rb +0 -96
  169. data/lib/convenient_service/examples/dry/gemfile/services/format_gems_without_envs.rb +0 -84
  170. data/lib/convenient_service/examples/dry/gemfile/services/format_header.rb +0 -74
  171. data/lib/convenient_service/examples/dry/gemfile/services/parse_content.rb +0 -93
  172. data/lib/convenient_service/examples/dry/gemfile/services/print_shell_command.rb +0 -44
  173. data/lib/convenient_service/examples/dry/gemfile/services/read_file_content.rb +0 -31
  174. data/lib/convenient_service/examples/dry/gemfile/services/run_shell_command.rb +0 -45
  175. data/lib/convenient_service/examples/dry/gemfile/services/strip_comments.rb +0 -109
  176. data/lib/convenient_service/examples/dry/gemfile/services.rb +0 -18
  177. data/lib/convenient_service/examples/dry/gemfile.rb +0 -27
  178. data/lib/convenient_service/examples/dry/v1/gemfile/dry_service/config.rb +0 -47
  179. data/lib/convenient_service/examples/dry/v1/gemfile/dry_service.rb +0 -3
  180. data/lib/convenient_service/examples/dry/v1/gemfile/services/assert_file_exists.rb +0 -31
  181. data/lib/convenient_service/examples/dry/v1/gemfile/services/assert_file_not_empty.rb +0 -31
  182. data/lib/convenient_service/examples/dry/v1/gemfile/services/assert_node_available.rb +0 -28
  183. data/lib/convenient_service/examples/dry/v1/gemfile/services/assert_npm_package_available.rb +0 -41
  184. data/lib/convenient_service/examples/dry/v1/gemfile/services/assert_valid_ruby_syntax.rb +0 -43
  185. data/lib/convenient_service/examples/dry/v1/gemfile/services/format.rb +0 -39
  186. data/lib/convenient_service/examples/dry/v1/gemfile/services/format_body.rb +0 -95
  187. data/lib/convenient_service/examples/dry/v1/gemfile/services/format_gems_with_envs.rb +0 -98
  188. data/lib/convenient_service/examples/dry/v1/gemfile/services/format_gems_without_envs.rb +0 -86
  189. data/lib/convenient_service/examples/dry/v1/gemfile/services/format_header.rb +0 -76
  190. data/lib/convenient_service/examples/dry/v1/gemfile/services/parse_content.rb +0 -95
  191. data/lib/convenient_service/examples/dry/v1/gemfile/services/read_file_content.rb +0 -33
  192. data/lib/convenient_service/examples/dry/v1/gemfile/services/run_shell_command.rb +0 -43
  193. data/lib/convenient_service/examples/dry/v1/gemfile/services/strip_comments.rb +0 -111
  194. data/lib/convenient_service/examples/dry/v1/gemfile/services.rb +0 -17
  195. data/lib/convenient_service/examples/dry/v1/gemfile.rb +0 -29
  196. data/lib/convenient_service/examples/rails/gemfile/rails_service/config.rb +0 -56
  197. data/lib/convenient_service/examples/rails/gemfile/rails_service.rb +0 -3
  198. data/lib/convenient_service/examples/rails/gemfile/services/assert_file_exists.rb +0 -25
  199. data/lib/convenient_service/examples/rails/gemfile/services/assert_file_not_empty.rb +0 -25
  200. data/lib/convenient_service/examples/rails/gemfile/services/assert_node_available.rb +0 -26
  201. data/lib/convenient_service/examples/rails/gemfile/services/assert_npm_package_available.rb +0 -35
  202. data/lib/convenient_service/examples/rails/gemfile/services/assert_valid_ruby_syntax.rb +0 -35
  203. data/lib/convenient_service/examples/rails/gemfile/services/format.rb +0 -66
  204. data/lib/convenient_service/examples/rails/gemfile/services/format_body.rb +0 -79
  205. data/lib/convenient_service/examples/rails/gemfile/services/format_gems_with_envs.rb +0 -82
  206. data/lib/convenient_service/examples/rails/gemfile/services/format_gems_without_envs.rb +0 -70
  207. data/lib/convenient_service/examples/rails/gemfile/services/format_header.rb +0 -68
  208. data/lib/convenient_service/examples/rails/gemfile/services/merge_sections.rb +0 -25
  209. data/lib/convenient_service/examples/rails/gemfile/services/parse_content.rb +0 -89
  210. data/lib/convenient_service/examples/rails/gemfile/services/print_shell_command.rb +0 -40
  211. data/lib/convenient_service/examples/rails/gemfile/services/read_file_content.rb +0 -27
  212. data/lib/convenient_service/examples/rails/gemfile/services/replace_file_content.rb +0 -37
  213. data/lib/convenient_service/examples/rails/gemfile/services/run_shell_command.rb +0 -40
  214. data/lib/convenient_service/examples/rails/gemfile/services/strip_comments.rb +0 -107
  215. data/lib/convenient_service/examples/rails/gemfile/services.rb +0 -21
  216. data/lib/convenient_service/examples/rails/gemfile.rb +0 -27
  217. data/lib/convenient_service/examples/rails/v1/gemfile/rails_service/config.rb +0 -58
  218. data/lib/convenient_service/examples/rails/v1/gemfile/rails_service.rb +0 -3
  219. data/lib/convenient_service/examples/rails/v1/gemfile/services/assert_file_exists.rb +0 -27
  220. data/lib/convenient_service/examples/rails/v1/gemfile/services/assert_file_not_empty.rb +0 -27
  221. data/lib/convenient_service/examples/rails/v1/gemfile/services/assert_node_available.rb +0 -28
  222. data/lib/convenient_service/examples/rails/v1/gemfile/services/assert_npm_package_available.rb +0 -37
  223. data/lib/convenient_service/examples/rails/v1/gemfile/services/assert_valid_ruby_syntax.rb +0 -37
  224. data/lib/convenient_service/examples/rails/v1/gemfile/services/format.rb +0 -68
  225. data/lib/convenient_service/examples/rails/v1/gemfile/services/format_body.rb +0 -81
  226. data/lib/convenient_service/examples/rails/v1/gemfile/services/format_gems_with_envs.rb +0 -84
  227. data/lib/convenient_service/examples/rails/v1/gemfile/services/format_gems_without_envs.rb +0 -72
  228. data/lib/convenient_service/examples/rails/v1/gemfile/services/format_header.rb +0 -70
  229. data/lib/convenient_service/examples/rails/v1/gemfile/services/merge_sections.rb +0 -27
  230. data/lib/convenient_service/examples/rails/v1/gemfile/services/parse_content.rb +0 -91
  231. data/lib/convenient_service/examples/rails/v1/gemfile/services/read_file_content.rb +0 -29
  232. data/lib/convenient_service/examples/rails/v1/gemfile/services/replace_file_content.rb +0 -39
  233. data/lib/convenient_service/examples/rails/v1/gemfile/services/run_shell_command.rb +0 -38
  234. data/lib/convenient_service/examples/rails/v1/gemfile/services/strip_comments.rb +0 -109
  235. data/lib/convenient_service/examples/rails/v1/gemfile/services.rb +0 -20
  236. data/lib/convenient_service/examples/rails/v1/gemfile.rb +0 -29
  237. data/lib/convenient_service/examples/standard/cowsay/services/build_cloud.rb +0 -42
  238. data/lib/convenient_service/examples/standard/cowsay/services/build_cow.rb +0 -38
  239. data/lib/convenient_service/examples/standard/cowsay/services/print.rb +0 -32
  240. data/lib/convenient_service/examples/standard/cowsay/services.rb +0 -5
  241. data/lib/convenient_service/examples/standard/cowsay.rb +0 -26
  242. data/lib/convenient_service/examples/standard/date_time/services/safe_parse.rb +0 -31
  243. data/lib/convenient_service/examples/standard/date_time/services.rb +0 -3
  244. data/lib/convenient_service/examples/standard/date_time.rb +0 -25
  245. data/lib/convenient_service/examples/standard/factorial/services/calculate.rb +0 -55
  246. data/lib/convenient_service/examples/standard/factorial/services.rb +0 -3
  247. data/lib/convenient_service/examples/standard/factorial/utils/timeout/with_timeout.rb +0 -50
  248. data/lib/convenient_service/examples/standard/factorial/utils/timeout.rb +0 -21
  249. data/lib/convenient_service/examples/standard/factorial/utils.rb +0 -3
  250. data/lib/convenient_service/examples/standard/factorial.rb +0 -26
  251. data/lib/convenient_service/examples/standard/gemfile/services/assert_file_exists.rb +0 -30
  252. data/lib/convenient_service/examples/standard/gemfile/services/assert_file_not_empty.rb +0 -30
  253. data/lib/convenient_service/examples/standard/gemfile/services/assert_node_available.rb +0 -26
  254. data/lib/convenient_service/examples/standard/gemfile/services/assert_npm_package_available.rb +0 -48
  255. data/lib/convenient_service/examples/standard/gemfile/services/assert_valid_ruby_syntax.rb +0 -39
  256. data/lib/convenient_service/examples/standard/gemfile/services/format.rb +0 -80
  257. data/lib/convenient_service/examples/standard/gemfile/services/format_body.rb +0 -83
  258. data/lib/convenient_service/examples/standard/gemfile/services/format_gems_with_envs.rb +0 -86
  259. data/lib/convenient_service/examples/standard/gemfile/services/format_gems_without_envs.rb +0 -74
  260. data/lib/convenient_service/examples/standard/gemfile/services/format_header.rb +0 -66
  261. data/lib/convenient_service/examples/standard/gemfile/services/merge_sections.rb +0 -52
  262. data/lib/convenient_service/examples/standard/gemfile/services/parse_content.rb +0 -101
  263. data/lib/convenient_service/examples/standard/gemfile/services/print_shell_command.rb +0 -45
  264. data/lib/convenient_service/examples/standard/gemfile/services/read_file_content.rb +0 -39
  265. data/lib/convenient_service/examples/standard/gemfile/services/replace_file_content.rb +0 -48
  266. data/lib/convenient_service/examples/standard/gemfile/services/run_shell_command.rb +0 -54
  267. data/lib/convenient_service/examples/standard/gemfile/services/strip_comments.rb +0 -111
  268. data/lib/convenient_service/examples/standard/gemfile/services.rb +0 -21
  269. data/lib/convenient_service/examples/standard/gemfile.rb +0 -26
  270. data/lib/convenient_service/examples/standard/request_params/constants.rb +0 -15
  271. data/lib/convenient_service/examples/standard/request_params/entities/description.rb +0 -40
  272. data/lib/convenient_service/examples/standard/request_params/entities/format.rb +0 -40
  273. data/lib/convenient_service/examples/standard/request_params/entities/id.rb +0 -47
  274. data/lib/convenient_service/examples/standard/request_params/entities/logger.rb +0 -21
  275. data/lib/convenient_service/examples/standard/request_params/entities/request.rb +0 -23
  276. data/lib/convenient_service/examples/standard/request_params/entities/source.rb +0 -40
  277. data/lib/convenient_service/examples/standard/request_params/entities/tag.rb +0 -40
  278. data/lib/convenient_service/examples/standard/request_params/entities/title.rb +0 -40
  279. data/lib/convenient_service/examples/standard/request_params/entities.rb +0 -11
  280. data/lib/convenient_service/examples/standard/request_params/services/apply_default_param_values.rb +0 -26
  281. data/lib/convenient_service/examples/standard/request_params/services/cast_params.rb +0 -38
  282. data/lib/convenient_service/examples/standard/request_params/services/extract_params_from_body.rb +0 -70
  283. data/lib/convenient_service/examples/standard/request_params/services/extract_params_from_path.rb +0 -62
  284. data/lib/convenient_service/examples/standard/request_params/services/filter_out_unpermitted_params.rb +0 -26
  285. data/lib/convenient_service/examples/standard/request_params/services/log_request_params.rb +0 -54
  286. data/lib/convenient_service/examples/standard/request_params/services/merge_params.rb +0 -26
  287. data/lib/convenient_service/examples/standard/request_params/services/prepare.rb +0 -65
  288. data/lib/convenient_service/examples/standard/request_params/services/validate_casted_params.rb +0 -94
  289. data/lib/convenient_service/examples/standard/request_params/services/validate_uncasted_params.rb +0 -72
  290. data/lib/convenient_service/examples/standard/request_params/services.rb +0 -13
  291. data/lib/convenient_service/examples/standard/request_params/utils/array/wrap.rb +0 -46
  292. data/lib/convenient_service/examples/standard/request_params/utils/array.rb +0 -21
  293. data/lib/convenient_service/examples/standard/request_params/utils/http/request/parse_body.rb +0 -42
  294. data/lib/convenient_service/examples/standard/request_params/utils/http/request/parse_path.rb +0 -40
  295. data/lib/convenient_service/examples/standard/request_params/utils/http/request.rb +0 -28
  296. data/lib/convenient_service/examples/standard/request_params/utils/http.rb +0 -3
  297. data/lib/convenient_service/examples/standard/request_params/utils/integer/safe_parse.rb +0 -31
  298. data/lib/convenient_service/examples/standard/request_params/utils/integer.rb +0 -25
  299. data/lib/convenient_service/examples/standard/request_params/utils/json/safe_parse.rb +0 -40
  300. data/lib/convenient_service/examples/standard/request_params/utils/json.rb +0 -21
  301. data/lib/convenient_service/examples/standard/request_params/utils/object/blank.rb +0 -34
  302. data/lib/convenient_service/examples/standard/request_params/utils/object/present.rb +0 -31
  303. data/lib/convenient_service/examples/standard/request_params/utils/object.rb +0 -26
  304. data/lib/convenient_service/examples/standard/request_params/utils/url/valid.rb +0 -47
  305. data/lib/convenient_service/examples/standard/request_params/utils/url.rb +0 -21
  306. data/lib/convenient_service/examples/standard/request_params/utils.rb +0 -8
  307. data/lib/convenient_service/examples/standard/request_params.rb +0 -49
  308. data/lib/convenient_service/examples/standard/v1/cowsay/services/build_cloud.rb +0 -44
  309. data/lib/convenient_service/examples/standard/v1/cowsay/services/build_cow.rb +0 -40
  310. data/lib/convenient_service/examples/standard/v1/cowsay/services/print.rb +0 -34
  311. data/lib/convenient_service/examples/standard/v1/cowsay/services.rb +0 -5
  312. data/lib/convenient_service/examples/standard/v1/cowsay.rb +0 -26
  313. data/lib/convenient_service/examples/standard/v1/date_time/services/safe_parse.rb +0 -33
  314. data/lib/convenient_service/examples/standard/v1/date_time/services.rb +0 -3
  315. data/lib/convenient_service/examples/standard/v1/date_time.rb +0 -25
  316. data/lib/convenient_service/examples/standard/v1/factorial/services/calculate.rb +0 -51
  317. data/lib/convenient_service/examples/standard/v1/factorial/services.rb +0 -3
  318. data/lib/convenient_service/examples/standard/v1/factorial/utils/timeout/with_timeout.rb +0 -52
  319. data/lib/convenient_service/examples/standard/v1/factorial/utils/timeout.rb +0 -23
  320. data/lib/convenient_service/examples/standard/v1/factorial/utils.rb +0 -3
  321. data/lib/convenient_service/examples/standard/v1/factorial.rb +0 -26
  322. data/lib/convenient_service/examples/standard/v1/gemfile/services/assert_file_exists.rb +0 -32
  323. data/lib/convenient_service/examples/standard/v1/gemfile/services/assert_file_not_empty.rb +0 -32
  324. data/lib/convenient_service/examples/standard/v1/gemfile/services/assert_node_available.rb +0 -28
  325. data/lib/convenient_service/examples/standard/v1/gemfile/services/assert_npm_package_available.rb +0 -50
  326. data/lib/convenient_service/examples/standard/v1/gemfile/services/assert_valid_ruby_syntax.rb +0 -41
  327. data/lib/convenient_service/examples/standard/v1/gemfile/services/format.rb +0 -82
  328. data/lib/convenient_service/examples/standard/v1/gemfile/services/format_body.rb +0 -85
  329. data/lib/convenient_service/examples/standard/v1/gemfile/services/format_gems_with_envs.rb +0 -88
  330. data/lib/convenient_service/examples/standard/v1/gemfile/services/format_gems_without_envs.rb +0 -76
  331. data/lib/convenient_service/examples/standard/v1/gemfile/services/format_header.rb +0 -68
  332. data/lib/convenient_service/examples/standard/v1/gemfile/services/merge_sections.rb +0 -54
  333. data/lib/convenient_service/examples/standard/v1/gemfile/services/parse_content.rb +0 -103
  334. data/lib/convenient_service/examples/standard/v1/gemfile/services/read_file_content.rb +0 -41
  335. data/lib/convenient_service/examples/standard/v1/gemfile/services/replace_file_content.rb +0 -50
  336. data/lib/convenient_service/examples/standard/v1/gemfile/services/run_shell_command.rb +0 -52
  337. data/lib/convenient_service/examples/standard/v1/gemfile/services/strip_comments.rb +0 -113
  338. data/lib/convenient_service/examples/standard/v1/gemfile/services.rb +0 -20
  339. data/lib/convenient_service/examples/standard/v1/gemfile.rb +0 -26
  340. data/lib/convenient_service/examples/standard/v1/request_params/constants.rb +0 -17
  341. data/lib/convenient_service/examples/standard/v1/request_params/entities/description.rb +0 -42
  342. data/lib/convenient_service/examples/standard/v1/request_params/entities/format.rb +0 -42
  343. data/lib/convenient_service/examples/standard/v1/request_params/entities/id.rb +0 -49
  344. data/lib/convenient_service/examples/standard/v1/request_params/entities/logger.rb +0 -23
  345. data/lib/convenient_service/examples/standard/v1/request_params/entities/request.rb +0 -25
  346. data/lib/convenient_service/examples/standard/v1/request_params/entities/source.rb +0 -42
  347. data/lib/convenient_service/examples/standard/v1/request_params/entities/tag.rb +0 -42
  348. data/lib/convenient_service/examples/standard/v1/request_params/entities/title.rb +0 -42
  349. data/lib/convenient_service/examples/standard/v1/request_params/entities.rb +0 -11
  350. data/lib/convenient_service/examples/standard/v1/request_params/services/apply_default_param_values.rb +0 -28
  351. data/lib/convenient_service/examples/standard/v1/request_params/services/cast_params.rb +0 -40
  352. data/lib/convenient_service/examples/standard/v1/request_params/services/extract_params_from_body.rb +0 -72
  353. data/lib/convenient_service/examples/standard/v1/request_params/services/extract_params_from_path.rb +0 -64
  354. data/lib/convenient_service/examples/standard/v1/request_params/services/filter_out_unpermitted_params.rb +0 -28
  355. data/lib/convenient_service/examples/standard/v1/request_params/services/log_request_params.rb +0 -56
  356. data/lib/convenient_service/examples/standard/v1/request_params/services/merge_params.rb +0 -28
  357. data/lib/convenient_service/examples/standard/v1/request_params/services/prepare.rb +0 -67
  358. data/lib/convenient_service/examples/standard/v1/request_params/services/validate_casted_params.rb +0 -96
  359. data/lib/convenient_service/examples/standard/v1/request_params/services/validate_uncasted_params.rb +0 -74
  360. data/lib/convenient_service/examples/standard/v1/request_params/services.rb +0 -13
  361. data/lib/convenient_service/examples/standard/v1/request_params/utils/array/wrap.rb +0 -48
  362. data/lib/convenient_service/examples/standard/v1/request_params/utils/array.rb +0 -23
  363. data/lib/convenient_service/examples/standard/v1/request_params/utils/http/request/parse_body.rb +0 -44
  364. data/lib/convenient_service/examples/standard/v1/request_params/utils/http/request/parse_path.rb +0 -42
  365. data/lib/convenient_service/examples/standard/v1/request_params/utils/http/request.rb +0 -30
  366. data/lib/convenient_service/examples/standard/v1/request_params/utils/http.rb +0 -3
  367. data/lib/convenient_service/examples/standard/v1/request_params/utils/integer/safe_parse.rb +0 -33
  368. data/lib/convenient_service/examples/standard/v1/request_params/utils/integer.rb +0 -27
  369. data/lib/convenient_service/examples/standard/v1/request_params/utils/json/safe_parse.rb +0 -42
  370. data/lib/convenient_service/examples/standard/v1/request_params/utils/json.rb +0 -23
  371. data/lib/convenient_service/examples/standard/v1/request_params/utils/object/blank.rb +0 -36
  372. data/lib/convenient_service/examples/standard/v1/request_params/utils/object/present.rb +0 -33
  373. data/lib/convenient_service/examples/standard/v1/request_params/utils/object.rb +0 -28
  374. data/lib/convenient_service/examples/standard/v1/request_params/utils/url/valid.rb +0 -49
  375. data/lib/convenient_service/examples/standard/v1/request_params/utils/url.rb +0 -23
  376. data/lib/convenient_service/examples/standard/v1/request_params/utils.rb +0 -8
  377. data/lib/convenient_service/examples/standard/v1/request_params.rb +0 -49
  378. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/commands/generate_printable_method.rb +0 -50
  379. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/sub_matchers/arguments/commands/apply_stub_to_track_delegations.rb +0 -82
  380. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/sub_matchers/arguments/commands/generate_printable_arguments.rb +0 -100
  381. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/sub_matchers/arguments.rb +0 -95
  382. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/sub_matchers/base.rb +0 -87
  383. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/sub_matchers/return_its_value.rb +0 -132
  384. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/sub_matchers/with_any_arguments.rb +0 -37
  385. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/sub_matchers/with_concrete_arguments.rb +0 -37
  386. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/sub_matchers/without_arguments.rb +0 -37
  387. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/values/base.rb +0 -41
  388. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/values/with_calling_original.rb +0 -30
  389. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings/values/without_calling_original.rb +0 -30
  390. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings.rb +0 -12
  391. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings_collection/exceptions.rb +0 -57
  392. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/chainings_collection.rb +0 -171
  393. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities/delegation.rb +0 -79
  394. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher/entities.rb +0 -5
  395. data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/matcher.rb +0 -276
  396. data/lib/convenient_service/service/plugins/can_have_steps/entities/method/entities/callers/reassignment/commands/define_method_in_container.rb +0 -74
  397. data/lib/convenient_service/service/plugins/can_have_steps/entities/method/entities/callers/reassignment/commands.rb +0 -3
  398. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_be_result_step/can_be_executed/middleware.rb +0 -72
  399. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_be_result_step/can_be_executed.rb +0 -4
  400. data/lib/convenient_service/service/plugins/can_have_steps/entities/step/plugins/can_be_result_step.rb +0 -5
  401. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/can_have_checked_status/middleware.rb +0 -43
  402. data/logo.png +0 -0
  403. data/minitest.rb +0 -30
  404. data/yard/yard-convenient_service_concern.rb +0 -45
  405. /data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/{entities/matcher/commands.rb → commands.rb} +0 -0
  406. /data/lib/convenient_service/rspec/primitive_matchers/classes/delegate_to/entities/{matcher/entities/chainings/sub_matchers → sub_matchers}/arguments/commands.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f24d02cddcb69e9108cf7d810c85f4ccf338201b8a31bbc7da0be1ef92bd91a9
4
- data.tar.gz: 89c019fa64f6fe8194c9b74a676d367e390cc5cb33efef361a4fcb448cd72d17
3
+ metadata.gz: a908de0164e680bc5926c42eeeea9df2afdcddd065dcad74dcaf403aacfe22f5
4
+ data.tar.gz: f10f0debfa96eeef7bf37ff35332606cd8a936833ab0f3ff98490bc0f8e6af37
5
5
  SHA512:
6
- metadata.gz: a53a4a7fee700e8128eeea830ac57cee73e6a6034d36e61dd224584e06f08ef4d944cdc513bfbac17187866b09969a4f63f31e316745546de032a24965bad6dd
7
- data.tar.gz: 47a180d8079468f98eadcfbddc2654323fabeae0d7f8b47febc7c13f80d43d30a30583d7104d60d486b02f6e024155487fe3ce5c20bd1eea39f214ee326dc9ff
6
+ metadata.gz: 4f172f536a57db46fd16a29ac859a59f32060c910db5ee568249be5a74328d001b152ad71cd81c35344085b41ea85f6e66f5dd8d9fdc414ed2fbe24433a3e002
7
+ data.tar.gz: a64c8dda2bce2f27f1462f485c3b62268d06c48367d464486fd7a51c2fba01b0ba96da27c5d66a4f467b053b556631d395a25735833c7c448ad733e474b28540
data/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  <!-- stand_with_ukraine:end -->
8
8
 
9
9
  <!-- header:start -->
10
- <!-- TODO: Remove html to display in YARD with commonmark -->
10
+ <!-- TODO: Remove html to display in YARD with common mark -->
11
11
  <h1 align="center">
12
12
  Convenient Service
13
13
  </h1>
@@ -27,7 +27,7 @@
27
27
  <!-- badges:end -->
28
28
 
29
29
  <!-- logo:start -->
30
- <!-- TODO: Remove html to display in YARD with commonmark -->
30
+ <!-- TODO: Remove html to display in YARD with common mark -->
31
31
  <p align="center">
32
32
  <img src="https://raw.githubusercontent.com/marian13/convenient_service/main/logo.png" width="300">
33
33
  </p>
@@ -51,7 +51,7 @@ This library is under heavy development. Public API may be subject to change. Th
51
51
 
52
52
  - Check out [Convenient Service Official User Docs](https://userdocs.convenientservice.org/) for installation, requirements, and usage guides.
53
53
 
54
- - Read [the API docs](https://marian13.github.io/convenient_service) to get familiar with the newest functionality that is not documented yet.
54
+ - Read [the API docs](https://apidocs.convenientservice.org/) to get familiar with the newest functionality that is not documented yet.
55
55
 
56
56
  - Create [an issue](https://github.com/marian13/convenient_service/issues) if you are going to report a bug.
57
57
 
@@ -70,5 +70,5 @@ This library is under heavy development. Public API may be subject to change. Th
70
70
  ---
71
71
 
72
72
  <!-- author:start -->
73
- Copyright (c) 2022-2023 [Marian Kostyk](http://mariankostyk.com).
73
+ Copyright (c) 2022-2024 Marian Kostyk.
74
74
  <!-- author:end -->
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Common
5
+ module Plugins
6
+ module EnsuresNegatedJSendResult
7
+ class Middleware < MethodChainMiddleware
8
+ intended_for :negated_result, entity: any_entity
9
+
10
+ ##
11
+ # @return [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result]
12
+ #
13
+ def next(...)
14
+ result = chain.next(...)
15
+
16
+ result.negated? ? result : result.copy(overrides: {kwargs: {negated: true}})
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "ensures_negated_j_send_result/middleware"
@@ -8,8 +8,15 @@ module ConvenientService
8
8
  include Support::Concern
9
9
 
10
10
  class_methods do
11
+ ##
12
+ # @api public
13
+ #
14
+ # @param type [Symbol]
15
+ # @param block [Proc]
16
+ # @return [ConvenientService::Common::Plugins::HasCallbacks::Entities::Callback]
17
+ #
11
18
  def around(type, &block)
12
- Plugins::HasCallbacks::Entities::Callback.new(types: [:around, type], block: block).tap { |callback| callbacks << callback }
19
+ callbacks.create(types: [:around, type], block: block)
13
20
  end
14
21
  end
15
22
  end
@@ -5,16 +5,28 @@ module ConvenientService
5
5
  module Plugins
6
6
  module HasAroundCallbacks
7
7
  class Middleware < MethodChainMiddleware
8
+ include Support::Delegate
9
+
8
10
  ##
9
11
  # @internal
10
- # TODO: Move to command.
12
+ # TODO: Support of callbacks for class methods.
11
13
  #
12
- include Support::DependencyContainer::Import
14
+ intended_for any_method, entity: any_entity
13
15
 
14
- import :"entities.Callback", from: Common::Plugins::HasCallbacks::Container
15
-
16
- intended_for any_method, scope: any_scope, entity: any_entity
16
+ ##
17
+ # @return [Class<ConvenientService::Common::Plugins::HasCallbacks::Entities::Callback>]
18
+ #
19
+ delegate :callback_class, to: :callbacks
17
20
 
21
+ ##
22
+ # @param args [Array<Object>]
23
+ # @param kwargs [Hash{Symbol => Object}]
24
+ # @param block [Proc, nil]
25
+ # @return [Object] Can be any type.
26
+ #
27
+ # @internal
28
+ # TODO: Move to command.
29
+ #
18
30
  def next(*args, **kwargs, &block)
19
31
  ##
20
32
  # A variable that stores return value of middleware `chain.next` aka `original_value`.
@@ -41,12 +53,12 @@ module ConvenientService
41
53
  # end
42
54
  # end
43
55
  #
44
- around_callbacks = entity.callbacks.for([:around, method])
56
+ around_callbacks = callbacks.for([:around, method])
45
57
 
46
58
  ##
47
59
  #
48
60
  #
49
- initial_around_callback = entities.Callback.new(
61
+ initial_around_callback = callback_class.new(
50
62
  types: [:around, method],
51
63
  block: proc { original_value = chain.next(*args, **kwargs, &block) }
52
64
  )
@@ -132,6 +144,15 @@ module ConvenientService
132
144
 
133
145
  original_value
134
146
  end
147
+
148
+ private
149
+
150
+ ##
151
+ # @return [ConvenientService::Common::Plugins::HasCallbacks::Entities::CallbackCollection]
152
+ #
153
+ def callbacks
154
+ entity.class.callbacks
155
+ end
135
156
  end
136
157
  end
137
158
  end
@@ -7,26 +7,36 @@ module ConvenientService
7
7
  module Concern
8
8
  include Support::Concern
9
9
 
10
- instance_methods do
11
- include Support::Delegate
12
-
13
- delegate :callbacks, to: :class
14
- end
15
-
16
10
  class_methods do
17
11
  ##
18
12
  # @api private
19
13
  #
14
+ # @return [ConvenientService::Common::Plugins::HasCallbacks::Entities::CallbackCollection]
15
+ #
20
16
  def callbacks
21
- @__callbacks__ ||= Entities::CallbackCollection.new
17
+ internals_class.cache.fetch(:callbacks) { Entities::CallbackCollection.new }
22
18
  end
23
19
 
20
+ ##
21
+ # @api public
22
+ #
23
+ # @param type [Symbol]
24
+ # @param block [Proc]
25
+ # @return [ConvenientService::Common::Plugins::HasCallbacks::Entities::Callback]
26
+ #
24
27
  def before(type, &block)
25
- Entities::Callback.new(types: [:before, type], block: block).tap { |callback| callbacks << callback }
28
+ callbacks.create(types: [:before, type], block: block)
26
29
  end
27
30
 
31
+ ##
32
+ # @api public
33
+ #
34
+ # @param type [Symbol]
35
+ # @param block [Proc]
36
+ # @return [ConvenientService::Common::Plugins::HasCallbacks::Entities::Callback]
37
+ #
28
38
  def after(type, &block)
29
- Entities::Callback.new(types: [:after, type], block: block).tap { |callback| callbacks << callback }
39
+ callbacks.create(types: [:after, type], block: block)
30
40
  end
31
41
  end
32
42
  end
@@ -6,20 +6,68 @@ module ConvenientService
6
6
  module HasCallbacks
7
7
  module Entities
8
8
  class CallbackCollection
9
+ include ::Enumerable
10
+
9
11
  include Support::Delegate
10
12
 
13
+ ##
14
+ # @api private
15
+ #
16
+ # @!attribute [r] types
17
+ # @return [ConvenientService::Common::Plugins::HasCallbacks::Entities::TypeCollection]
18
+ #
11
19
  attr_reader :callbacks
12
20
 
13
- delegate :each, :include?, :<<, to: :callbacks
21
+ ##
22
+ # @api private
23
+ #
24
+ # @return [Array<ConvenientService::Common::Plugins::HasCallbacks::Entities::Callback>]
25
+ #
26
+ delegate :each, to: :callbacks
14
27
 
28
+ ##
29
+ # @api private
30
+ #
31
+ # @return [void]
32
+ #
15
33
  def initialize
16
34
  @callbacks = []
17
35
  end
18
36
 
37
+ ##
38
+ # @return [Class<ConvenientService::Common::Plugins::HasCallbacks::Entities::Callback>]
39
+ #
40
+ def callback_class
41
+ Entities::Callback
42
+ end
43
+
44
+ ##
45
+ # @api private
46
+ #
47
+ # @param types [Array<Symbol>]
48
+ # @return [Array<ConvenientService::Common::Plugins::HasCallbacks::Entities::Callback>]
49
+ #
19
50
  def for(types)
20
51
  callbacks.select { |callback| callback.types.contain_exactly?(types) }
21
52
  end
22
53
 
54
+ ##
55
+ # @api private
56
+ #
57
+ # @param kwargs [Hash{Symbol => Object}]
58
+ # @return [ConvenientService::Common::Plugins::HasCallbacks::Entities::Callback]
59
+ #
60
+ def create(**kwargs)
61
+ Entities::Callback.new(**kwargs)
62
+ .tap { |callback| callbacks << callback }
63
+ end
64
+
65
+ ##
66
+ # @api private
67
+ #
68
+ # @param other [Object] Can be any type.
69
+ # @return [Boolean]
70
+ #
23
71
  def ==(other)
24
72
  return unless other.instance_of?(self.class)
25
73
 
@@ -5,9 +5,18 @@ module ConvenientService
5
5
  module Plugins
6
6
  module HasCallbacks
7
7
  class Middleware < MethodChainMiddleware
8
- intended_for any_method, scope: any_scope, entity: any_entity
8
+ ##
9
+ # @internal
10
+ # TODO: Support of callbacks for class methods.
11
+ #
12
+ intended_for any_method, entity: any_entity
9
13
 
10
14
  ##
15
+ # @param args [Array<Object>]
16
+ # @param kwargs [Hash{Symbol => Object}]
17
+ # @param block [Proc, nil]
18
+ # @return [Object] Can be any type.
19
+ #
11
20
  # @internal
12
21
  # TODO: Move to command.
13
22
  #
@@ -21,7 +30,7 @@ module ConvenientService
21
30
  # end
22
31
  # end
23
32
  #
24
- entity.callbacks.for([:before, method]).each { |callback| callback.call_in_context_with_arguments(entity, *args, **kwargs, &block) }
33
+ callbacks.for([:before, method]).each { |callback| callback.call_in_context_with_arguments(entity, *args, **kwargs, &block) }
25
34
 
26
35
  original_value = chain.next(*args, **kwargs, &block)
27
36
 
@@ -37,10 +46,19 @@ module ConvenientService
37
46
  # end
38
47
  # end
39
48
  #
40
- entity.callbacks.for([:after, method]).reverse_each { |callback| callback.call_in_context_with_value_and_arguments(entity, original_value, *args, **kwargs, &block) }
49
+ callbacks.for([:after, method]).reverse_each { |callback| callback.call_in_context_with_value_and_arguments(entity, original_value, *args, **kwargs, &block) }
41
50
 
42
51
  original_value
43
52
  end
53
+
54
+ private
55
+
56
+ ##
57
+ # @return [ConvenientService::Common::Plugins::HasCallbacks::Entities::CallbackCollection]
58
+ #
59
+ def callbacks
60
+ entity.class.callbacks
61
+ end
44
62
  end
45
63
  end
46
64
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "has_callbacks/concern"
4
- require_relative "has_callbacks/container"
5
4
  require_relative "has_callbacks/entities"
6
5
  require_relative "has_callbacks/middleware"
@@ -66,7 +66,7 @@ module ConvenientService
66
66
  # @return [Object] Can be any type.
67
67
  #
68
68
  def method_missing(...)
69
- instance_proxy_target.public_send(...)
69
+ ::ConvenientService.reraise { instance_proxy_target.public_send(...) }
70
70
  end
71
71
  end
72
72
  end
@@ -15,6 +15,18 @@ module ConvenientService
15
15
  module Concern
16
16
  include Support::Concern
17
17
 
18
+ class_methods do
19
+ ##
20
+ # @return [ConvenientService::Support::Cache]
21
+ #
22
+ # @internal
23
+ # TODO: `Support::Cache.create(backend: :thread_safe_hash)`.
24
+ #
25
+ def cache
26
+ @cache ||= Support::Cache.create(backend: :hash)
27
+ end
28
+ end
29
+
18
30
  instance_methods do
19
31
  ##
20
32
  # @return [ConvenientService::Support::Cache]
@@ -9,6 +9,7 @@ require_relative "plugins/caches_constructor_arguments"
9
9
  require_relative "plugins/caches_return_value"
10
10
  require_relative "plugins/can_be_copied"
11
11
  require_relative "plugins/can_have_user_provided_entity"
12
+ require_relative "plugins/ensures_negated_j_send_result"
12
13
  require_relative "plugins/has_callbacks"
13
14
  require_relative "plugins/has_around_callbacks"
14
15
  require_relative "plugins/has_constructor"
@@ -30,6 +30,8 @@ module ConvenientService
30
30
  # TODO: Create a troubleshooting page with possible reasons (preliminary RSpec mocks etc).
31
31
  # Append a link to it to the error message.
32
32
  #
33
+ # TODO: Add a note of the most common scenario when this issue appears - when the RSpec stub is used before auto config commitment. For example, with `delegate_to`.
34
+ #
33
35
  def initialize_with_kwargs(config:)
34
36
  message = <<~TEXT
35
37
  `#{config.klass}` config is committed too many times from `method_missing`.
@@ -142,6 +142,9 @@ module ConvenientService
142
142
  # @internal
143
143
  # IMPORTANT: `commit!` MUST be thread safe.
144
144
  #
145
+ # NOTE: Inspired by `Response#commit!` and others.
146
+ # - https://github.com/rails/rails/blob/36c1591bcb5e0ee3084759c7f42a706fe5bb7ca7/actionpack/lib/action_controller/metal/live.rb#L307
147
+ #
145
148
  def commit!(trigger: Constants::Triggers::USER)
146
149
  (committed? ? false : concerns.include!)
147
150
  .tap { Commands::TrackMethodMissingCommitTrigger.call(config: self, trigger: trigger) }
@@ -175,13 +175,20 @@ module ConvenientService
175
175
  end
176
176
 
177
177
  ##
178
- # @api public
178
+ # @api private
179
179
  #
180
180
  # @return [Boolean]
181
181
  # @note Expected to be called from app entry points like `initializers` in Rails.
182
182
  #
183
- def require_cleans_exception_backtrace
184
- require_relative "dependencies/extractions/active_support_backtrace_cleaner"
183
+ def require_wraps_result_in_db_transaction
184
+ ##
185
+ # - https://edgeguides.rubyonrails.org/active_record_basics.html
186
+ # - https://api.rubyonrails.org/classes/ActiveRecord.html
187
+ # - https://github.com/rails/rails/tree/main/activerecord
188
+ #
189
+ require "active_record"
190
+
191
+ require_relative "service/plugins/wraps_result_in_db_transaction"
185
192
  end
186
193
 
187
194
  ##
@@ -336,6 +343,7 @@ module ConvenientService
336
343
  require_relative ::File.join("examples", "standard", version, "factorial")
337
344
  require_relative ::File.join("examples", "standard", version, "gemfile")
338
345
  require_relative ::File.join("examples", "standard", version, "request_params")
346
+ require_relative ::File.join("examples", "standard", version, "comprehensive_suite") if version.empty?
339
347
  end
340
348
 
341
349
  ##
@@ -36,11 +36,19 @@ module ConvenientService
36
36
  # - https://github.com/ruby/logger/blob/v1.5.3/lib/logger.rb#L397
37
37
  #
38
38
  # TODO: Specs for `super(::STDOUT)`.
39
+ # TODO: Warning and fallback when `CONVENIENT_SERVICE_LOGGER_LEVEL` is NOT valid.
39
40
  #
40
41
  # rubocop:disable Style/GlobalStdStream
41
42
  def new
42
43
  super(::STDOUT).tap do |logger|
43
- logger.level = ::ENV["CONVENIENT_SERVICE_LOGGER_LEVEL"] || ::Logger::INFO
44
+ logger.level =
45
+ if ::ENV["CONVENIENT_SERVICE_DEBUG"] == "true"
46
+ ::Logger::DEBUG
47
+ elsif ::ENV["CONVENIENT_SERVICE_LOGGER_LEVEL"]
48
+ ::ENV["CONVENIENT_SERVICE_LOGGER_LEVEL"]
49
+ else
50
+ ::Logger::INFO
51
+ end
44
52
 
45
53
  logger.formatter = (::ENV["CONVENIENT_SERVICE_LOGGER_ENABLE_COLORS"] == "true") ? colored_formatter : original_formatter
46
54
  end
@@ -11,6 +11,13 @@ module ConvenientService
11
11
  # .with_arguments(*args, **kwargs, &block)
12
12
  # .and_return_its_value
13
13
  #
14
+ # @internal
15
+ # TODO:
16
+ # expect { method.call }
17
+ # .to call_chain_next.on(method)
18
+ # .with_arguments(*args, **kwargs, &block)
19
+ # .and_return { |chain_value| chain_value.copy(kwargs: {overrides: {foo: :bar}})}
20
+ #
14
21
  class CallChainNext
15
22
  include ::RSpec::Expectations
16
23
  include ::RSpec::Matchers
@@ -45,6 +52,10 @@ module ConvenientService
45
52
  expect(value).to eq(method.chain_value)
46
53
  end
47
54
 
55
+ if used_and_return?
56
+ expect(value).to eq(return_block.call(method.chain_value))
57
+ end
58
+
48
59
  true
49
60
  end
50
61
 
@@ -88,6 +99,10 @@ module ConvenientService
88
99
  expect(value).not_to eq(method.chain_value)
89
100
  end
90
101
 
102
+ if used_and_return?
103
+ expect(value).not_to eq(return_block.call(method.chain_value))
104
+ end
105
+
91
106
  true
92
107
  end
93
108
 
@@ -170,6 +185,18 @@ module ConvenientService
170
185
  self
171
186
  end
172
187
 
188
+ ##
189
+ # @param args [Array<Object>]
190
+ # @param block [Proc, nil]
191
+ #
192
+ # @return [ConvenientService::RSpec::Matchers::Classes::CallChainNext]
193
+ #
194
+ def and_return(*args, &block)
195
+ chain[:and_return] = args.any? ? proc { args.first } : block
196
+
197
+ self
198
+ end
199
+
173
200
  private
174
201
 
175
202
  ##
@@ -192,6 +219,13 @@ module ConvenientService
192
219
  chain.key?(:and_return_its_value)
193
220
  end
194
221
 
222
+ ##
223
+ # @return [Boolean]
224
+ #
225
+ def used_and_return?
226
+ chain.key?(:and_return)
227
+ end
228
+
195
229
  ##
196
230
  # @return [Hash{Symbol => Object}]
197
231
  #
@@ -242,6 +276,13 @@ module ConvenientService
242
276
  @block = chain.dig(:with_arguments, :block)
243
277
  end
244
278
 
279
+ ##
280
+ # @return [Proc]
281
+ #
282
+ def return_block
283
+ @return_block ||= chain[:and_return]
284
+ end
285
+
245
286
  ##
246
287
  # @return [Proc, nil]
247
288
  #
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module RSpec
5
+ module PrimitiveMatchers
6
+ module Classes
7
+ class DelegateTo
8
+ module Commands
9
+ class GeneratePrintableMethod < Support::Command
10
+ ##
11
+ # @!attribute [r] object
12
+ # @return [Object] Can be any type.
13
+ #
14
+ attr_reader :object
15
+
16
+ ##
17
+ # @!attribute [r] method
18
+ # @return [Symbol, String]
19
+ #
20
+ attr_reader :method
21
+
22
+ ##
23
+ # @param object [Object] Can by any type.
24
+ # @param method [Symbol, String]
25
+ # @return [void]
26
+ #
27
+ def initialize(object:, method:)
28
+ @object = object
29
+ @method = method
30
+ end
31
+
32
+ def call
33
+ case Utils::Object.resolve_type(object)
34
+ when "class", "module"
35
+ "#{object}.#{method}"
36
+ when "instance"
37
+ "#{object.class}##{method}"
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module RSpec
5
+ module PrimitiveMatchers
6
+ module Classes
7
+ class DelegateTo
8
+ module Entities
9
+ class Delegation
10
+ ##
11
+ # @api private
12
+ #
13
+ # @!attribute [r] arguments
14
+ # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Entities::Delegation]
15
+ #
16
+ attr_reader :arguments
17
+
18
+ ##
19
+ # @api private
20
+ #
21
+ # @!attribute [r] method
22
+ # @return [Symbol]
23
+ #
24
+ attr_reader :method
25
+
26
+ ##
27
+ # @api private
28
+ #
29
+ # @!attribute [r] object
30
+ # @return [Object] Can be any type.
31
+ #
32
+ attr_reader :object
33
+
34
+ ##
35
+ # @api private
36
+ #
37
+ # @param object [Object] Can be any type.
38
+ # @param method [Symbol]
39
+ # @param args [Array<Object>]
40
+ # @param kwargs [Hash{Symbol => Object}]
41
+ # @param block [Proc, nil]
42
+ # @return [void]
43
+ #
44
+ def initialize(object:, method:, args:, kwargs:, block:)
45
+ @object = object
46
+ @method = method
47
+ @arguments = Support::Arguments.new(*args, **kwargs, &block)
48
+ end
49
+
50
+ ##
51
+ # @api private
52
+ #
53
+ # @return [Booleam]
54
+ #
55
+ def with_arguments?
56
+ arguments.any?
57
+ end
58
+
59
+ ##
60
+ # @api private
61
+ #
62
+ # @return [Boolean]
63
+ #
64
+ def without_arguments?
65
+ !with_arguments?
66
+ end
67
+
68
+ ##
69
+ # @api private
70
+ #
71
+ # @param other [Object]
72
+ # @return [Boolean]
73
+ #
74
+ def ==(other)
75
+ return unless other.instance_of?(self.class)
76
+
77
+ return false if object != other.object
78
+ return false if method != other.method
79
+ return false if arguments != other.arguments
80
+
81
+ true
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end