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
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Service
5
+ module Plugins
6
+ module CanHaveSteps
7
+ module Entities
8
+ class Step
9
+ module Plugins
10
+ module HasResult
11
+ class Middleware < MethodChainMiddleware
12
+ intended_for :result, entity: :step
13
+
14
+ ##
15
+ # @return [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result]
16
+ # @raise [ConvenientService::Service::Plugins::CanHaveSteps::Entities::Step::Exceptions::StepHasNoOrganizer]
17
+ #
18
+ # @internal
19
+ # NOTE: Convents a foreign result received from `service_result` to own result.
20
+ # TODO: `service.result`.
21
+ #
22
+ def next(...)
23
+ chain.next(...).copy(overrides: {kwargs: {step: entity, service: entity.organizer}})
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "has_result/concern"
4
+ require_relative "has_result/middleware"
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "plugins/has_result"
4
+
3
5
  require_relative "plugins/can_be_completed"
4
6
  require_relative "plugins/can_be_method_step"
5
- require_relative "plugins/can_be_result_step"
6
7
  require_relative "plugins/can_have_fallbacks"
7
8
  require_relative "plugins/can_have_parent_result"
8
9
  require_relative "plugins/has_inspect"
@@ -2,5 +2,4 @@
2
2
 
3
3
  require_relative "entities/service"
4
4
  require_relative "entities/method"
5
- require_relative "entities/step_collection"
6
5
  require_relative "entities/step"
@@ -2,5 +2,4 @@
2
2
 
3
3
  require_relative "can_have_steps/commands"
4
4
  require_relative "can_have_steps/concern"
5
- require_relative "can_have_steps/middleware"
6
5
  require_relative "can_have_steps/entities"
@@ -15,8 +15,8 @@ module ConvenientService
15
15
  ##
16
16
  # @return [Boolean]
17
17
  #
18
- def has_checked_status?
19
- Utils.to_bool(internals.cache[:has_checked_status])
18
+ def checked?
19
+ status.checked?
20
20
  end
21
21
  end
22
22
  end
@@ -1,4 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "can_have_checked_status/concern"
4
- require_relative "can_have_checked_status/middleware"
@@ -167,10 +167,143 @@ module ConvenientService
167
167
  end
168
168
 
169
169
  ##
170
- # @return [Boolean, nil]
170
+ # Returns a boolean representation of `result`.
171
+ # `success` may be considered as `true`.
172
+ # `failure` may be considered as `false`.
173
+ # `error` may be considered as `raise exception`.
174
+ #
175
+ # @api public
176
+ # @return [Boolean]
177
+ # @raise [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Status::Exceptions::ErrorHasNoOtherTypeRepresentation]
178
+ #
179
+ # @note This method is useful for learning purposes, to show similarities with Ruby's booleans. Please, do NOT depend on it in production.
180
+ #
181
+ # @internal
182
+ # NOTE: When `value` is NOT `:success`, `:failure` or `:error`, then something fatal has happened.
171
183
  #
172
184
  def to_bool
173
- status.to_bool
185
+ case status.value
186
+ when :success
187
+ true
188
+ when :failure
189
+ false
190
+ when :error
191
+ raise ::ConvenientService.raise Exceptions::ErrorHasNoOtherTypeRepresentation.new(type: :boolean)
192
+ else
193
+ raise ::ConvenientService.raise Support::NeverReachHere.new(extra_message: "Unknown result status `#{status.value}`.")
194
+ end
195
+ end
196
+
197
+ ##
198
+ # Returns a boolean representation of `result`.
199
+ # `success` may be considered as `object`.
200
+ # `failure` may be considered as `nil` (or null object).
201
+ # `error` may be considered as `raise exception`.
202
+ #
203
+ # @api public
204
+ # @return [ConvenientService::Support::Value]
205
+ # @raise [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Status::Exceptions::ErrorHasNoOtherTypeRepresentation]
206
+ #
207
+ # @note This method is useful for learning purposes, to show similarities with Ruby's objects. Please, do NOT depend on it in production.
208
+ #
209
+ # @internal
210
+ # NOTE: When `value` is NOT `:success`, `:failure` or `:error`, then something fatal has happened.
211
+ #
212
+ def to_object
213
+ case status.value
214
+ when :success
215
+ Support::Value.new("object")
216
+ when :failure
217
+ nil
218
+ when :error
219
+ raise ::ConvenientService.raise Exceptions::ErrorHasNoOtherTypeRepresentation.new(type: :object)
220
+ else
221
+ raise ::ConvenientService.raise Support::NeverReachHere.new(extra_message: "Unknown result status `#{status.value}`.")
222
+ end
223
+ end
224
+
225
+ ##
226
+ # Returns an array representation of `result`.
227
+ # `success` may be considered as array with items.
228
+ # `failure` may be considered as empty array.
229
+ # `error` may be considered as `raise exception`.
230
+ #
231
+ # @api public
232
+ # @return [Array<ConvenientService::Support::Value>]
233
+ # @raise [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Status::Exceptions::ErrorHasNoOtherTypeRepresentation]
234
+ #
235
+ # @note This method is useful for learning purposes, to show similarities with Ruby's objects. Please, do NOT depend on it in production.
236
+ #
237
+ # @internal
238
+ # NOTE: When `value` is NOT `:success`, `:failure` or `:error`, then something fatal has happened.
239
+ #
240
+ def to_a
241
+ case status.value
242
+ when :success
243
+ [Support::Value.new("item")]
244
+ when :failure
245
+ []
246
+ when :error
247
+ raise ::ConvenientService.raise Exceptions::ErrorHasNoOtherTypeRepresentation.new(type: :array)
248
+ else
249
+ raise ::ConvenientService.raise Support::NeverReachHere.new(extra_message: "Unknown result status `#{status.value}`.")
250
+ end
251
+ end
252
+
253
+ ##
254
+ # Returns a hash representation of `result`.
255
+ # `success` may be considered as hash with items.
256
+ # `failure` may be considered as empty hash.
257
+ # `error` may be considered as `raise exception`.
258
+ #
259
+ # @api public
260
+ # @return [Hash{ConvenientService::Support::Value => ConvenientService::Support::Value}]
261
+ # @raise [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Status::Exceptions::ErrorHasNoOtherTypeRepresentation]
262
+ #
263
+ # @note This method is useful for learning purposes, to show similarities with Ruby's objects. Please, do NOT depend on it in production.
264
+ #
265
+ # @internal
266
+ # NOTE: When `value` is NOT `:success`, `:failure` or `:error`, then something fatal has happened.
267
+ #
268
+ def to_h
269
+ case status.value
270
+ when :success
271
+ {Support::Value.new("key") => Support::Value.new("value")}
272
+ when :failure
273
+ {}
274
+ when :error
275
+ raise ::ConvenientService.raise Exceptions::ErrorHasNoOtherTypeRepresentation.new(type: :hash)
276
+ else
277
+ raise ::ConvenientService.raise Support::NeverReachHere.new(extra_message: "Unknown result status `#{status.value}`.")
278
+ end
279
+ end
280
+
281
+ ##
282
+ # Returns a string representation of `result`.
283
+ # `success` may be considered as string with content.
284
+ # `failure` may be considered as empty string.
285
+ # `error` may be considered as `raise exception`.
286
+ #
287
+ # @api public
288
+ # @return [String]
289
+ # @raise [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result::Plugins::HasJSendStatusAndAttributes::Entities::Status::Exceptions::ErrorHasNoOtherTypeRepresentation]
290
+ #
291
+ # @note This method is useful for learning purposes, to show similarities with Ruby's objects. Please, do NOT depend on it in production.
292
+ #
293
+ # @internal
294
+ # NOTE: When `value` is NOT `:success`, `:failure` or `:error`, then something fatal has happened.
295
+ #
296
+ def to_s
297
+ case status.value
298
+ when :success
299
+ "string"
300
+ when :failure
301
+ ""
302
+ when :error
303
+ raise ::ConvenientService.raise Exceptions::ErrorHasNoOtherTypeRepresentation.new(type: :string)
304
+ else
305
+ raise ::ConvenientService.raise Support::NeverReachHere.new(extra_message: "Unknown result status `#{status.value}`.")
306
+ end
174
307
  end
175
308
  end
176
309
  end
@@ -70,25 +70,67 @@ module ConvenientService
70
70
  value == :error
71
71
  end
72
72
 
73
+ ##
74
+ # @return [Boolean]
75
+ #
76
+ def unsafe_success?
77
+ value == :success
78
+ end
79
+
80
+ ##
81
+ # @return [Boolean]
82
+ #
83
+ def unsafe_failure?
84
+ value == :failure
85
+ end
86
+
87
+ ##
88
+ # @return [Boolean]
89
+ #
90
+ def unsafe_error?
91
+ value == :error
92
+ end
93
+
73
94
  ##
74
95
  # @return [Boolean]
75
96
  #
76
97
  def not_success?
77
- !success?
98
+ value != :success
78
99
  end
79
100
 
80
101
  ##
81
102
  # @return [Boolean]
82
103
  #
83
104
  def not_failure?
84
- !failure?
105
+ value != :failure
85
106
  end
86
107
 
87
108
  ##
88
109
  # @return [Boolean]
89
110
  #
90
111
  def not_error?
91
- !error?
112
+ value != :error
113
+ end
114
+
115
+ ##
116
+ # @return [Boolean]
117
+ #
118
+ def unsafe_not_success?
119
+ value != :success
120
+ end
121
+
122
+ ##
123
+ # @return [Boolean]
124
+ #
125
+ def unsafe_not_failure?
126
+ value != :failure
127
+ end
128
+
129
+ ##
130
+ # @return [Boolean]
131
+ #
132
+ def unsafe_not_error?
133
+ value != :error
92
134
  end
93
135
 
94
136
  ##
@@ -126,20 +168,6 @@ module ConvenientService
126
168
  def to_sym
127
169
  @to_sym ||= value.to_sym
128
170
  end
129
-
130
- ##
131
- # @return [Boolean, nil]
132
- #
133
- def to_bool
134
- return @to_bool if defined? @to_bool
135
-
136
- @to_bool =
137
- case value
138
- when :success then true
139
- when :failure then false
140
- when :error then nil
141
- end
142
- end
143
171
  end
144
172
  end
145
173
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Service
5
+ module Plugins
6
+ module HasJSendResult
7
+ module Entities
8
+ class Result
9
+ module Plugins
10
+ module HasJSendStatusAndAttributes
11
+ module Entities
12
+ class Status
13
+ module Plugins
14
+ module CanBeChecked
15
+ module Concern
16
+ include Support::Concern
17
+
18
+ instance_methods do
19
+ ##
20
+ # @return [Boolean]
21
+ #
22
+ def checked?
23
+ Utils.to_bool(internals.cache[:checked])
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Service
5
+ module Plugins
6
+ module HasJSendResult
7
+ module Entities
8
+ class Result
9
+ module Plugins
10
+ module HasJSendStatusAndAttributes
11
+ module Entities
12
+ class Status
13
+ module Plugins
14
+ module CanBeChecked
15
+ class Middleware < MethodChainMiddleware
16
+ intended_for [
17
+ :success?,
18
+ :failure?,
19
+ :error?,
20
+ :not_success?,
21
+ :not_failure?,
22
+ :not_error?
23
+ ],
24
+ entity: :result
25
+
26
+ ##
27
+ # @param args [Array<Object>]
28
+ # @param kwargs [Hash{Symbol => Object}]
29
+ # @param block [Proc, nil]
30
+ # @return [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result]
31
+ #
32
+ def next(*args, **kwargs, &block)
33
+ mark_as_checked = kwargs.fetch(:mark_as_checked) { true }
34
+
35
+ entity.internals.cache[:checked] = true if mark_as_checked
36
+
37
+ chain.next(*args, **Utils::Hash.except(kwargs, [:mark_as_checked]), &block)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "can_be_checked/concern"
4
+ require_relative "can_be_checked/middleware"
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "plugins/can_be_checked"
3
4
  require_relative "plugins/has_inspect"
4
5
 
5
6
  require_relative "plugins/aliases"
@@ -22,6 +22,21 @@ module ConvenientService
22
22
  initialize(message)
23
23
  end
24
24
  end
25
+
26
+ class ErrorHasNoOtherTypeRepresentation < ::ConvenientService::Exception
27
+ ##
28
+ # @return [void]
29
+ #
30
+ def initialize_with_kwargs(type:)
31
+ message = <<~TEXT
32
+ Error results have no `#{type}` representation.
33
+
34
+ They are semantically similar to exceptions.
35
+ TEXT
36
+
37
+ initialize(message)
38
+ end
39
+ end
25
40
  end
26
41
  end
27
42
  end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Service
5
+ module Plugins
6
+ module HasJSendResult
7
+ module Entities
8
+ class Result
9
+ module Plugins
10
+ module HasNegatedResult
11
+ module Concern
12
+ include Support::Concern
13
+
14
+ instance_methods do
15
+ ##
16
+ # @return [Boolean]
17
+ #
18
+ def negated?
19
+ Utils.to_bool(extra_kwargs[:negated])
20
+ end
21
+
22
+ ##
23
+ # @return [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result]
24
+ #
25
+ # @internal
26
+ # NOTE: `original_result = result` is used to cache `result` independently, without relying on `CachesReturnValue` plugin.
27
+ #
28
+ # TODO: `Utils::String.concat_if`? How?
29
+ # - https://stackoverflow.com/a/28648594/12201472
30
+ #
31
+ # IMPORTNANT: `copy` is used instead of `service.success`, or `service.failure` in order to reuse the original result extra kwargs, like `step`, `parent`, etc.
32
+ #
33
+ # TODO: A simple way to get constant without referencing other plugin.
34
+ #
35
+ def negated_result
36
+ case status.to_sym
37
+ when :success
38
+ copy(
39
+ overrides: {
40
+ kwargs: {
41
+ status: :failure,
42
+ data: unsafe_data,
43
+ message: "Original `result` is `success`#{" with `message` - #{unsafe_message}" unless unsafe_message.empty?}",
44
+ code: "negated_#{unsafe_code}"
45
+ }
46
+ }
47
+ )
48
+ when :failure
49
+ copy(
50
+ overrides: {
51
+ kwargs: {
52
+ status: :success,
53
+ data: unsafe_data,
54
+ message: "Original `result` is `failure`#{" with `message` - #{unsafe_message}" unless unsafe_message.empty?}",
55
+ code: "negated_#{unsafe_code}"
56
+ }
57
+ }
58
+ )
59
+ when :error
60
+ copy
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "has_negated_result/concern"
@@ -32,7 +32,7 @@ module ConvenientService
32
32
  # @raise [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result::Plugins::RaisesOnNotCheckedResultStatus::Exceptions::StatusIsNotChecked]
33
33
  #
34
34
  def assert_has_checked_status!
35
- return if entity.internals.cache.exist?(:has_checked_status)
35
+ return if entity.checked?
36
36
 
37
37
  ::ConvenientService.raise Exceptions::StatusIsNotChecked.new(attribute: method)
38
38
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "plugins/can_recalculate_result"
4
+ require_relative "plugins/has_negated_result"
4
5
  require_relative "plugins/can_be_own_result"
5
6
  require_relative "plugins/can_be_stubbed_result"
6
7
  require_relative "plugins/can_have_fallbacks"
@@ -5,7 +5,6 @@ require_relative "has_j_send_result/constants"
5
5
  require_relative "has_j_send_result/container"
6
6
  require_relative "has_j_send_result/commands"
7
7
  require_relative "has_j_send_result/entities"
8
- require_relative "has_j_send_result/exceptions"
9
8
 
10
9
  module ConvenientService
11
10
  module Service
@@ -4,6 +4,10 @@ module ConvenientService
4
4
  module Service
5
5
  module Plugins
6
6
  module HasJSendResultParamsValidations
7
+ ##
8
+ # @internal
9
+ # TODO: Consider to add versioning, since `dry` gems often modify thier public API.
10
+ #
7
11
  module UsingDryValidation
8
12
  class Middleware < MethodChainMiddleware
9
13
  intended_for :result, entity: :service
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Service
5
+ module Plugins
6
+ module HasNegatedJSendResult
7
+ module Concern
8
+ include Support::Concern
9
+
10
+ instance_methods do
11
+ ##
12
+ # @return [ConvenientService::Service::Plugins::HasJSendResult::Entities::Result]
13
+ # @note Users may override this method to provide custom `negataed_result` behavior.
14
+ #
15
+ def negated_result
16
+ result.negated_result
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "has_negated_j_send_result/concern"
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Service
5
+ module Plugins
6
+ module HasNegatedResult
7
+ module Concern
8
+ include Support::Concern
9
+
10
+ class_methods do
11
+ ##
12
+ # @api public
13
+ # @raise [ConvenientService::Service::Plugins::HasNegatedResult::Exceptions::NegatedResultIsNotOverridden]
14
+ #
15
+ def negated_result(...)
16
+ new(...).negated_result
17
+ end
18
+ end
19
+
20
+ instance_methods do
21
+ ##
22
+ # @api public
23
+ # @raise [ConvenientService::Service::Plugins::HasNegatedResult::Exceptions::NegatedResultIsNotOverridden]
24
+ #
25
+ def negated_result
26
+ ::ConvenientService.raise Exceptions::NegatedResultIsNotOverridden.new(service: self)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -3,12 +3,12 @@
3
3
  module ConvenientService
4
4
  module Service
5
5
  module Plugins
6
- module HasJSendResult
6
+ module HasNegatedResult
7
7
  module Exceptions
8
- class ResultIsNotOverridden < ::ConvenientService::Exception
8
+ class NegatedResultIsNotOverridden < ::ConvenientService::Exception
9
9
  def initialize_with_kwargs(service:)
10
10
  message = <<~TEXT
11
- Result method (#result) of `#{service.class}` is NOT overridden.
11
+ Negated result method (#negated_result) of `#{service.class}` is NOT overridden.
12
12
  TEXT
13
13
 
14
14
  initialize(message)
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "has_negated_result/concern"
4
+ require_relative "has_negated_result/exceptions"
@@ -3,7 +3,7 @@
3
3
  module ConvenientService
4
4
  module Service
5
5
  module Plugins
6
- module WrapsResultInDbTransaction
6
+ module WrapsResultInDBTransaction
7
7
  class Middleware < MethodChainMiddleware
8
8
  intended_for :result, scope: :class, entity: :service
9
9