convenient_service 0.17.0 → 0.18.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 (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
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "delegate_to/commands"
3
4
  require_relative "delegate_to/entities"
5
+ require_relative "delegate_to/exceptions"
4
6
 
5
7
  ##
6
8
  # @internal
7
9
  # IMPORTANT: This matcher has a dedicated end-user doc. Do NOT forget to update it when needed.
8
- # https://github.com/marian13/convenient_service_docs/blob/main/docs/api/tests/rspec/matchers/delegate_to.mdx
10
+ # - https://github.com/marian13/convenient_service_docs/blob/main/docs/api/tests/rspec/matchers/delegate_to.mdx
9
11
  #
10
12
  module ConvenientService
11
13
  module RSpec
@@ -13,122 +15,242 @@ module ConvenientService
13
15
  module Classes
14
16
  ##
15
17
  # @internal
16
- # NOTE: This is a Facade class.
17
- # https://refactoring.guru/design-patterns/facade
18
+ # NOTE: Consider the following concrete usage example to simplify understanding of variable namings used throughout this class:
19
+ # specify do
20
+ # expect { method_class.cast(other, **options) }
21
+ # .to delegate_to(ConvenientService::Service::Plugins::CanHaveSteps::Entities::Method::Commands::CastMethod, :call)
22
+ # .with_arguments(other: other, options: options)
23
+ # .and_return_its_value
24
+ # end
25
+ #
26
+ # Block `{ method_class.cast(other, **options) }` is named as `block_expectation`.
27
+ # Class `ConvenientService::Service::Plugins::CanHaveSteps::Entities::Method::Commands::CastMethod` is named as `object`.
28
+ # Symbol `:call` is named as `method`.
29
+ # Arguments `(other: other, options: options)` are named as `expected_arguments`.
30
+ # Additional submatcher added by `and_return_its_value` chaining is named as `sub_matchers.return_its_value`.
31
+ #
32
+ # NOTE: A similar (with different behaviour) matcher exists in `saharspec`.
33
+ # - https://github.com/zverok/saharspec#send_messageobject-method-matcher
18
34
  #
19
35
  class DelegateTo
20
- include Support::Delegate
36
+ ##
37
+ # @api private
38
+ #
39
+ # @!attribute [r] inputs
40
+ # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Entities::Inputs]
41
+ #
42
+ attr_reader :inputs
21
43
 
22
44
  ##
23
- # @return [Boolean]
45
+ # @api private
46
+ #
47
+ # @!attribute [r] outputs
48
+ # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Entities::Outputs]
24
49
  #
25
- delegate :matches?, to: :matcher
50
+ attr_reader :outputs
26
51
 
27
52
  ##
53
+ # @api private
54
+ #
55
+ # @param object [Object]
56
+ # @param method [String, Symbol]
57
+ # @param block_expectation [Proc]
58
+ # @return [void]
59
+ #
28
60
  # @internal
29
- # NOTE: Required by RSpec.
30
- # https://relishapp.com/rspec/rspec-expectations/v/3-8/docs/custom-matchers/define-a-matcher-supporting-block-expectations
61
+ # TODO: `raise unless object.respond_to?(method)`.
62
+ # TODO: `any_block`.
63
+ # TODO: `with_warmup`.
64
+ # TODO: `compare_by`.
31
65
  #
32
- delegate :supports_block_expectations?, to: :matcher
66
+ def initialize(object, method, block_expectation = proc { Support::UNDEFINED })
67
+ @inputs = Entities::Inputs.new(object: object, method: method, block_expectation: block_expectation)
68
+ @outputs = Entities::Outputs.new
69
+ end
33
70
 
34
71
  ##
35
- # @return [String]
72
+ # @api public
73
+ #
74
+ # @param block_expectation [Proc]
75
+ # @return [Boolean]
36
76
  #
37
- delegate :description, to: :matcher
77
+ def matches?(block_expectation)
78
+ inputs.block_expectation = block_expectation
79
+
80
+ sub_matchers.matches?(inputs.block_expectation)
81
+ end
38
82
 
39
83
  ##
40
- # @return [String]
84
+ # @api public
41
85
  #
42
- delegate :failure_message, to: :matcher
86
+ # @param block_expectation [Proc]
87
+ # @return [Boolean]
88
+ #
89
+ def does_not_match?(block_expectation)
90
+ inputs.block_expectation = block_expectation
91
+
92
+ !sub_matchers.matches?(inputs.block_expectation)
93
+ end
43
94
 
44
95
  ##
96
+ # @api public
97
+ #
98
+ # @internal
99
+ # NOTE: Required by RSpec.
100
+ # - https://relishapp.com/rspec/rspec-expectations/v/3-8/docs/custom-matchers/define-a-matcher-supporting-block-expectations
101
+ #
102
+ def supports_block_expectations?
103
+ true
104
+ end
105
+
106
+ ##
107
+ # @api public
108
+ #
45
109
  # @return [String]
46
110
  #
47
- delegate :failure_message_when_negated, to: :matcher
111
+ def description
112
+ "delegate to `#{inputs.printable_method}`"
113
+ end
48
114
 
49
115
  ##
50
- # @overload initialize(object, method)
51
- # @param object [Object]
52
- # @param method [String, Symbol]
53
- # @return [void]
116
+ # @api public
54
117
  #
55
- # @overload initialize(matcher)
56
- # @param matcher [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Entities::Matcher]
57
- # @return [void]
58
- # @api private
118
+ # @return [String]
59
119
  #
60
- # @internal
61
- # TODO: `overload do`?
120
+ def failure_message
121
+ sub_matchers.failure_message
122
+ end
123
+
124
+ ##
125
+ # @api public
62
126
  #
63
- def initialize(object = nil, method = nil, matcher: nil)
64
- @matcher = matcher || Entities::Matcher.new(object, method)
127
+ # @return [String]
128
+ #
129
+ def failure_message_when_negated
130
+ sub_matchers.failure_message_when_negated
65
131
  end
66
132
 
67
133
  ##
134
+ # @api public
135
+ #
68
136
  # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo]
69
137
  # @raise [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Exceptions::ArgumentsChainingIsAlreadySet]
70
138
  #
71
139
  def with_arguments(...)
72
- matcher.with_arguments(...)
140
+ ::ConvenientService.raise Exceptions::ArgumentsChainingIsAlreadySet.new if sub_matchers.has_arguments?
141
+
142
+ inputs.expected_arguments = Support::Arguments.new(...)
143
+
144
+ sub_matchers.arguments = Entities::SubMatchers::WithConcreteArguments.new(matcher: self)
73
145
 
74
146
  self
75
147
  end
76
148
 
77
149
  ##
150
+ # @api public
151
+ #
78
152
  # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo]
79
153
  # @raise [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Exceptions::ArgumentsChainingIsAlreadySet]
80
154
  #
81
155
  def with_any_arguments
82
- matcher.with_any_arguments
156
+ ::ConvenientService.raise Exceptions::ArgumentsChainingIsAlreadySet.new if sub_matchers.has_arguments?
157
+
158
+ sub_matchers.arguments = Entities::SubMatchers::WithAnyArguments.new(matcher: self)
83
159
 
84
160
  self
85
161
  end
86
162
 
87
163
  ##
164
+ # @api public
165
+ #
88
166
  # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo]
89
167
  # @raise [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Exceptions::ArgumentsChainingIsAlreadySet]
90
168
  #
91
169
  def without_arguments
92
- matcher.without_arguments
170
+ ::ConvenientService.raise Exceptions::ArgumentsChainingIsAlreadySet.new if sub_matchers.has_arguments?
171
+
172
+ sub_matchers.arguments = Entities::SubMatchers::WithoutArguments.new(matcher: self)
93
173
 
94
174
  self
95
175
  end
96
176
 
97
177
  ##
178
+ # @api public
179
+ #
98
180
  # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo]
99
- # @raise [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Exceptions::ReturnItsValueChainingIsAlreadySet]
181
+ # @raise [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Exceptions::ReturnValueChainingIsAlreadySet]
100
182
  #
101
183
  def and_return_its_value
102
- matcher.and_return_its_value
184
+ ::ConvenientService.raise Exceptions::ReturnValueChainingIsAlreadySet.new if sub_matchers.has_return_value?
185
+
186
+ sub_matchers.return_value = Entities::SubMatchers::ReturnDelegationValue.new(matcher: self)
103
187
 
104
188
  self
105
189
  end
106
190
 
107
191
  ##
108
- # TODO: `and_return`.
192
+ # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo]
193
+ # @raise [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Exceptions::ReturnValueChainingIsAlreadySet]
109
194
  #
110
- # def and_return(...)
111
- # matcher.and_return(...)
195
+ def and_return(...)
196
+ ::ConvenientService.raise Exceptions::ReturnValueChainingIsAlreadySet.new if sub_matchers.has_return_value?
197
+
198
+ inputs.update_expected_return_value_block(...)
199
+
200
+ sub_matchers.return_value = Entities::SubMatchers::ReturnCustomValue.new(matcher: self)
201
+
202
+ self
203
+ end
204
+
205
+ ##
206
+ # @api public
207
+ #
208
+ # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo]
112
209
  #
113
- # self
114
- # end
210
+ def with_calling_original
211
+ ::ConvenientService.raise Exceptions::CallOriginalChainingIsAlreadySet.new if inputs.has_call_original?
212
+
213
+ inputs.should_call_original = true
214
+
215
+ self
216
+ end
115
217
 
116
218
  ##
219
+ # @api public
220
+ #
117
221
  # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo]
118
222
  #
119
223
  def without_calling_original
120
- matcher.without_calling_original
224
+ ::ConvenientService.raise Exceptions::CallOriginalChainingIsAlreadySet.new if inputs.has_call_original?
225
+
226
+ inputs.should_call_original = false
121
227
 
122
228
  self
123
229
  end
124
230
 
125
- private
231
+ ##
232
+ # @api private
233
+ #
234
+ # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Entities::SubMatchers]
235
+ #
236
+ def sub_matchers
237
+ @sub_matchers ||= Entities::SubMatcherCollection.new(matcher: self)
238
+ end
126
239
 
127
240
  ##
128
- # @!attribute [r] matcher
129
- # @return [ConvenientService::RSpec::PrimitiveMatchers::Classes::DelegateTo::Entities::Matcher]
241
+ # @api private
130
242
  #
131
- attr_reader :matcher
243
+ # @param other [Object] Can be any type.
244
+ # @return [Boolean, nil]
245
+ #
246
+ def ==(other)
247
+ return unless other.instance_of?(self.class)
248
+
249
+ return false if inputs != other.inputs
250
+ return false if outputs != other.outputs
251
+
252
+ true
253
+ end
132
254
  end
133
255
  end
134
256
  end
@@ -56,9 +56,19 @@ module ConvenientService
56
56
 
57
57
  use ConvenientService::Plugins::Service::HasResult::Concern
58
58
  use ConvenientService::Plugins::Service::HasJSendResult::Concern
59
+
60
+ use ConvenientService::Plugins::Service::HasNegatedResult::Concern
61
+ use ConvenientService::Plugins::Service::HasNegatedJSendResult::Concern
62
+
59
63
  use ConvenientService::Plugins::Service::CanHaveSteps::Concern
64
+ use ConvenientService::Plugins::Service::CanHaveConnectedSteps::Concern
65
+
66
+ use ConvenientService::Plugins::Service::CanHaveFallbacks::Concern
60
67
  end
61
68
 
69
+ ##
70
+ # TODO: Move `NormalizesEnv` inside `Core`.
71
+ #
62
72
  middlewares :initialize do
63
73
  use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
64
74
  end
@@ -69,7 +79,7 @@ module ConvenientService
69
79
 
70
80
  use ConvenientService::Plugins::Service::RaisesOnNotResultReturnValue::Middleware
71
81
 
72
- use ConvenientService::Plugins::Service::CanHaveSteps::Middleware
82
+ use ConvenientService::Plugins::Service::CanHaveConnectedSteps::Middleware
73
83
  end
74
84
 
75
85
  middlewares :step do
@@ -98,6 +108,36 @@ module ConvenientService
98
108
  use ConvenientService::Plugins::Service::CanHaveMethodSteps::Middleware
99
109
  end
100
110
 
111
+ middlewares :not_step, scope: :class do
112
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
113
+
114
+ use ConvenientService::Plugins::Service::CanHaveMethodSteps::Middleware
115
+ end
116
+
117
+ middlewares :and_step, scope: :class do
118
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
119
+
120
+ use ConvenientService::Plugins::Service::CanHaveMethodSteps::Middleware
121
+ end
122
+
123
+ middlewares :and_not_step, scope: :class do
124
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
125
+
126
+ use ConvenientService::Plugins::Service::CanHaveMethodSteps::Middleware
127
+ end
128
+
129
+ middlewares :or_step, scope: :class do
130
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
131
+
132
+ use ConvenientService::Plugins::Service::CanHaveMethodSteps::Middleware
133
+ end
134
+
135
+ middlewares :or_not_step, scope: :class do
136
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
137
+
138
+ use ConvenientService::Plugins::Service::CanHaveMethodSteps::Middleware
139
+ end
140
+
101
141
  class self::Internals
102
142
  include Core
103
143
 
@@ -118,6 +158,8 @@ module ConvenientService
118
158
  use ConvenientService::Plugins::Common::HasConstructorWithoutInitialize::Concern
119
159
 
120
160
  use ConvenientService::Plugins::Result::HasJSendStatusAndAttributes::Concern
161
+
162
+ use ConvenientService::Plugins::Result::CanHaveStep::Concern
121
163
  end
122
164
 
123
165
  middlewares :initialize do
@@ -126,30 +168,6 @@ module ConvenientService
126
168
  use ConvenientService::Plugins::Result::HasJSendStatusAndAttributes::Middleware
127
169
  end
128
170
 
129
- middlewares :success? do
130
- use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
131
- end
132
-
133
- middlewares :failure? do
134
- use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
135
- end
136
-
137
- middlewares :error? do
138
- use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
139
- end
140
-
141
- middlewares :not_success? do
142
- use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
143
- end
144
-
145
- middlewares :not_failure? do
146
- use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
147
- end
148
-
149
- middlewares :not_error? do
150
- use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
151
- end
152
-
153
171
  middlewares :data do
154
172
  use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
155
173
  end
@@ -194,8 +212,42 @@ module ConvenientService
194
212
  include Core
195
213
 
196
214
  concerns do
215
+ use ConvenientService::Plugins::Common::HasInternals::Concern
216
+
197
217
  use ConvenientService::Plugins::Status::HasInspect::Concern
198
218
  end
219
+
220
+ middlewares :success? do
221
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
222
+ end
223
+
224
+ middlewares :failure? do
225
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
226
+ end
227
+
228
+ middlewares :error? do
229
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
230
+ end
231
+
232
+ middlewares :not_success? do
233
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
234
+ end
235
+
236
+ middlewares :not_failure? do
237
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
238
+ end
239
+
240
+ middlewares :not_error? do
241
+ use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
242
+ end
243
+
244
+ class self::Internals
245
+ include Core
246
+
247
+ concerns do
248
+ use ConvenientService::Plugins::Internals::HasCache::Concern
249
+ end
250
+ end
199
251
  end
200
252
 
201
253
  class self::Internals
@@ -213,29 +265,29 @@ module ConvenientService
213
265
  concerns do
214
266
  use ConvenientService::Plugins::Common::HasInternals::Concern
215
267
 
268
+ use ConvenientService::Plugins::Step::HasResult::Concern
269
+
216
270
  use ConvenientService::Plugins::Step::CanBeCompleted::Concern
217
271
 
218
272
  use ConvenientService::Plugins::Step::CanBeMethodStep::Concern
219
- use ConvenientService::Plugins::Step::CanBeResultStep::Concern
220
273
 
221
274
  use ConvenientService::Plugins::Step::HasInspect::Concern
222
275
  end
223
276
 
224
- middlewares :service_result do
277
+ ##
278
+ # TODO: Simple debug for middlewares. For one service only.
279
+ #
280
+ middlewares :result do
225
281
  use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
226
282
  use ConvenientService::Plugins::Common::CachesReturnValue::Middleware
227
283
 
284
+ use ConvenientService::Plugins::Step::HasResult::Middleware
285
+
228
286
  use ConvenientService::Plugins::Step::RaisesOnNotResultReturnValue::Middleware
229
287
 
230
- use ConvenientService::Plugins::Step::CanBeResultStep::CanBeExecuted::Middleware
231
288
  use ConvenientService::Plugins::Step::CanBeMethodStep::CanBeExecuted::Middleware
232
289
  end
233
290
 
234
- middlewares :result do
235
- use ConvenientService::Plugins::Common::NormalizesEnv::Middleware
236
- use ConvenientService::Plugins::Common::CachesReturnValue::Middleware
237
- end
238
-
239
291
  ##
240
292
  # TODO: Rename.
241
293
  #
@@ -33,6 +33,15 @@ module ConvenientService
33
33
  use ConvenientService::Plugins::Common::HasAroundCallbacks::Concern
34
34
 
35
35
  use ConvenientService::Plugins::Service::HasMermaidFlowchart::Concern
36
+
37
+ delete ConvenientService::Plugins::Service::HasNegatedResult::Concern
38
+ delete ConvenientService::Plugins::Service::HasNegatedJSendResult::Concern
39
+
40
+ replace \
41
+ ConvenientService::Plugins::Service::CanHaveConnectedSteps::Concern,
42
+ ConvenientService::Plugins::Service::CanHaveSequentialSteps::Concern
43
+
44
+ delete ConvenientService::Plugins::Service::CanHaveFallbacks::Concern
36
45
  end
37
46
 
38
47
  middlewares :initialize do
@@ -61,6 +70,10 @@ module ConvenientService
61
70
  insert_before \
62
71
  ConvenientService::Plugins::Service::RaisesOnNotResultReturnValue::Middleware,
63
72
  ConvenientService::Plugins::Service::SetsParentToForeignResult::Middleware
73
+
74
+ replace \
75
+ ConvenientService::Plugins::Service::CanHaveConnectedSteps::Middleware,
76
+ ConvenientService::Plugins::Service::CanHaveSequentialSteps::Middleware
64
77
  end
65
78
 
66
79
  middlewares :step do
@@ -85,46 +98,51 @@ module ConvenientService
85
98
  use ConvenientService::Plugins::Common::HasJSendResultDuckShortSyntax::Concern
86
99
  use ConvenientService::Plugins::Result::CanRecalculateResult::Concern
87
100
 
88
- use ConvenientService::Plugins::Result::CanHaveStep::Concern
89
101
  use ConvenientService::Plugins::Result::CanBeOwnResult::Concern
90
102
  use ConvenientService::Plugins::Result::CanHaveParentResult::Concern
91
103
  use ConvenientService::Plugins::Result::CanHaveCheckedStatus::Concern
92
104
  end
93
105
 
94
- middlewares :success? do
95
- use ConvenientService::Plugins::Result::CanHaveCheckedStatus::Middleware
106
+ middlewares :data do
107
+ use ConvenientService::Plugins::Result::RaisesOnNotCheckedResultStatus::Middleware
96
108
  end
97
109
 
98
- middlewares :failure? do
99
- use ConvenientService::Plugins::Result::CanHaveCheckedStatus::Middleware
110
+ middlewares :message do
111
+ use ConvenientService::Plugins::Result::RaisesOnNotCheckedResultStatus::Middleware
100
112
  end
101
113
 
102
- middlewares :error? do
103
- use ConvenientService::Plugins::Result::CanHaveCheckedStatus::Middleware
114
+ middlewares :code do
115
+ use ConvenientService::Plugins::Result::RaisesOnNotCheckedResultStatus::Middleware
104
116
  end
105
117
 
106
- middlewares :not_success? do
107
- use ConvenientService::Plugins::Result::CanHaveCheckedStatus::Middleware
108
- end
118
+ class self::Status
119
+ concerns do
120
+ use ConvenientService::Plugins::Status::CanBeChecked::Concern
121
+ end
109
122
 
110
- middlewares :not_failure? do
111
- use ConvenientService::Plugins::Result::CanHaveCheckedStatus::Middleware
112
- end
123
+ middlewares :success? do
124
+ use ConvenientService::Plugins::Status::CanBeChecked::Middleware
125
+ end
113
126
 
114
- middlewares :not_error? do
115
- use ConvenientService::Plugins::Result::CanHaveCheckedStatus::Middleware
116
- end
127
+ middlewares :failure? do
128
+ use ConvenientService::Plugins::Status::CanBeChecked::Middleware
129
+ end
117
130
 
118
- middlewares :data do
119
- use ConvenientService::Plugins::Result::RaisesOnNotCheckedResultStatus::Middleware
120
- end
131
+ middlewares :error? do
132
+ use ConvenientService::Plugins::Status::CanBeChecked::Middleware
133
+ end
121
134
 
122
- middlewares :message do
123
- use ConvenientService::Plugins::Result::RaisesOnNotCheckedResultStatus::Middleware
124
- end
135
+ middlewares :not_success? do
136
+ use ConvenientService::Plugins::Status::CanBeChecked::Middleware
137
+ end
125
138
 
126
- middlewares :code do
127
- use ConvenientService::Plugins::Result::RaisesOnNotCheckedResultStatus::Middleware
139
+ middlewares :not_failure? do
140
+ use ConvenientService::Plugins::Status::CanBeChecked::Middleware
141
+ end
142
+
143
+ middlewares :not_error? do
144
+ use ConvenientService::Plugins::Status::CanBeChecked::Middleware
145
+ end
128
146
  end
129
147
  end
130
148