mocktail 1.2.3 → 3.0.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 (443) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +6 -5
  3. data/.gitignore +3 -0
  4. data/.standard.yml +8 -0
  5. data/CHANGELOG.md +19 -0
  6. data/Gemfile +8 -2
  7. data/Gemfile.lock +105 -38
  8. data/README.md +20 -922
  9. data/Rakefile +0 -1
  10. data/bin/console +1 -2
  11. data/bin/tapioca +29 -0
  12. data/docs/code_of_conduct.md +8 -0
  13. data/docs/configuring_minitest.md +20 -0
  14. data/docs/configuring_rspec.md +19 -0
  15. data/docs/example_test.md +594 -0
  16. data/docs/faq/existing_tests.md +47 -0
  17. data/docs/faq/mocking_http.md +151 -0
  18. data/docs/faq/mocking_the_subject.md +161 -0
  19. data/docs/faq/mocking_time.md +34 -0
  20. data/docs/faq/partial_mocks.md +34 -0
  21. data/docs/faq/verifying_real_interactions.md +52 -0
  22. data/docs/img/delegator_tree.png +0 -0
  23. data/docs/img/example_test.png +0 -0
  24. data/docs/img/extract_transform_load.png +0 -0
  25. data/docs/img/mocktail_sorbet.jpg +0 -0
  26. data/docs/img/mocktail_untyped.jpg +0 -0
  27. data/docs/img/spacer.png +0 -0
  28. data/docs/installation_sorbet.md +99 -0
  29. data/docs/installation_untyped.md +29 -0
  30. data/docs/other_uses.md +32 -0
  31. data/docs/stubbing_and_verifying.md +515 -0
  32. data/docs/support/api.md +819 -0
  33. data/docs/support/example_test.rb +94 -0
  34. data/docs/support/glossary.md +426 -0
  35. data/docs/tdd/class_methods.md +44 -0
  36. data/docs/tdd/poro/dependency_inception.md +136 -0
  37. data/docs/tdd/poro/dependency_injection.md +82 -0
  38. data/docs/tdd/poro.md +15 -0
  39. data/docs/tdd/third_party.md +220 -0
  40. data/docs/tdd.md +15 -0
  41. data/lib/mocktail/collects_calls.rb +2 -0
  42. data/lib/mocktail/debug.rb +16 -12
  43. data/lib/mocktail/dsl.rb +2 -0
  44. data/lib/mocktail/errors.rb +2 -0
  45. data/lib/mocktail/explains_nils.rb +2 -0
  46. data/lib/mocktail/explains_thing.rb +7 -4
  47. data/lib/mocktail/grabs_original_method_parameters.rb +30 -0
  48. data/lib/mocktail/handles_dry_call/fulfills_stubbing/describes_unsatisfied_stubbing.rb +3 -1
  49. data/lib/mocktail/handles_dry_call/fulfills_stubbing/finds_satisfaction.rb +5 -1
  50. data/lib/mocktail/handles_dry_call/fulfills_stubbing.rb +2 -0
  51. data/lib/mocktail/handles_dry_call/logs_call.rb +2 -0
  52. data/lib/mocktail/handles_dry_call/validates_arguments.rb +6 -4
  53. data/lib/mocktail/handles_dry_call.rb +2 -0
  54. data/lib/mocktail/handles_dry_new_call.rb +2 -0
  55. data/lib/mocktail/imitates_type/ensures_imitation_support.rb +2 -0
  56. data/lib/mocktail/imitates_type/makes_double/declares_dry_class/reconstructs_call.rb +4 -1
  57. data/lib/mocktail/imitates_type/makes_double/declares_dry_class.rb +32 -20
  58. data/lib/mocktail/imitates_type/makes_double/gathers_fakeable_instance_methods.rb +2 -0
  59. data/lib/mocktail/imitates_type/makes_double.rb +3 -0
  60. data/lib/mocktail/imitates_type.rb +3 -1
  61. data/lib/mocktail/initialize_based_on_type_system_mode_switching.rb +9 -0
  62. data/lib/mocktail/initializes_mocktail.rb +5 -0
  63. data/lib/mocktail/matcher_presentation.rb +4 -2
  64. data/lib/mocktail/matchers/any.rb +4 -3
  65. data/lib/mocktail/matchers/base.rb +10 -2
  66. data/lib/mocktail/matchers/captor.rb +9 -0
  67. data/lib/mocktail/matchers/includes.rb +2 -0
  68. data/lib/mocktail/matchers/includes_hash.rb +9 -0
  69. data/lib/mocktail/matchers/includes_key.rb +9 -0
  70. data/lib/mocktail/matchers/includes_string.rb +9 -0
  71. data/lib/mocktail/matchers/is_a.rb +2 -0
  72. data/lib/mocktail/matchers/matches.rb +2 -0
  73. data/lib/mocktail/matchers/not.rb +2 -0
  74. data/lib/mocktail/matchers/numeric.rb +5 -4
  75. data/lib/mocktail/matchers/that.rb +2 -0
  76. data/lib/mocktail/matchers.rb +3 -0
  77. data/lib/mocktail/raises_neato_no_method_error.rb +2 -0
  78. data/lib/mocktail/records_demonstration.rb +2 -0
  79. data/lib/mocktail/registers_matcher.rb +8 -3
  80. data/lib/mocktail/registers_stubbing.rb +2 -0
  81. data/lib/mocktail/replaces_next.rb +7 -1
  82. data/lib/mocktail/replaces_type/redefines_new.rb +3 -1
  83. data/lib/mocktail/replaces_type/redefines_singleton_methods.rb +14 -2
  84. data/lib/mocktail/replaces_type/runs_sorbet_sig_blocks_before_replacement.rb +37 -0
  85. data/lib/mocktail/replaces_type.rb +6 -0
  86. data/lib/mocktail/resets_state.rb +2 -0
  87. data/lib/mocktail/share/bind.rb +7 -5
  88. data/lib/mocktail/share/cleans_backtrace.rb +3 -5
  89. data/lib/mocktail/share/creates_identifier.rb +16 -9
  90. data/lib/mocktail/share/determines_matching_calls.rb +4 -2
  91. data/lib/mocktail/share/stringifies_call.rb +6 -3
  92. data/lib/mocktail/share/stringifies_method_name.rb +3 -1
  93. data/lib/mocktail/simulates_argument_error/reconciles_args_with_params.rb +2 -0
  94. data/lib/mocktail/simulates_argument_error/recreates_message.rb +2 -0
  95. data/lib/mocktail/simulates_argument_error/transforms_params.rb +16 -9
  96. data/lib/mocktail/simulates_argument_error.rb +2 -0
  97. data/lib/mocktail/sorbet/mocktail/collects_calls.rb +18 -0
  98. data/lib/mocktail/sorbet/mocktail/debug.rb +55 -0
  99. data/lib/mocktail/sorbet/mocktail/dsl.rb +46 -0
  100. data/lib/mocktail/sorbet/mocktail/errors.rb +19 -0
  101. data/lib/mocktail/sorbet/mocktail/explains_nils.rb +41 -0
  102. data/lib/mocktail/sorbet/mocktail/explains_thing.rb +137 -0
  103. data/lib/mocktail/sorbet/mocktail/grabs_original_method_parameters.rb +33 -0
  104. data/lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing/describes_unsatisfied_stubbing.rb +27 -0
  105. data/lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing/finds_satisfaction.rb +24 -0
  106. data/lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing.rb +45 -0
  107. data/lib/mocktail/sorbet/mocktail/handles_dry_call/logs_call.rb +12 -0
  108. data/lib/mocktail/sorbet/mocktail/handles_dry_call/validates_arguments.rb +45 -0
  109. data/lib/mocktail/sorbet/mocktail/handles_dry_call.rb +25 -0
  110. data/lib/mocktail/sorbet/mocktail/handles_dry_new_call.rb +42 -0
  111. data/lib/mocktail/sorbet/mocktail/imitates_type/ensures_imitation_support.rb +16 -0
  112. data/lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class/reconstructs_call.rb +73 -0
  113. data/lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb +136 -0
  114. data/lib/mocktail/sorbet/mocktail/imitates_type/makes_double/gathers_fakeable_instance_methods.rb +28 -0
  115. data/lib/mocktail/sorbet/mocktail/imitates_type/makes_double.rb +29 -0
  116. data/lib/mocktail/sorbet/mocktail/imitates_type.rb +29 -0
  117. data/lib/mocktail/sorbet/mocktail/initialize_based_on_type_system_mode_switching.rb +11 -0
  118. data/lib/mocktail/sorbet/mocktail/initializes_mocktail.rb +25 -0
  119. data/lib/mocktail/sorbet/mocktail/matcher_presentation.rb +21 -0
  120. data/lib/mocktail/sorbet/mocktail/matchers/any.rb +27 -0
  121. data/lib/mocktail/sorbet/mocktail/matchers/base.rb +39 -0
  122. data/lib/mocktail/sorbet/mocktail/matchers/captor.rb +76 -0
  123. data/lib/mocktail/sorbet/mocktail/matchers/includes.rb +32 -0
  124. data/lib/mocktail/sorbet/mocktail/matchers/includes_hash.rb +12 -0
  125. data/lib/mocktail/sorbet/mocktail/matchers/includes_key.rb +12 -0
  126. data/lib/mocktail/sorbet/mocktail/matchers/includes_string.rb +12 -0
  127. data/lib/mocktail/sorbet/mocktail/matchers/is_a.rb +17 -0
  128. data/lib/mocktail/sorbet/mocktail/matchers/matches.rb +19 -0
  129. data/lib/mocktail/sorbet/mocktail/matchers/not.rb +17 -0
  130. data/lib/mocktail/sorbet/mocktail/matchers/numeric.rb +27 -0
  131. data/lib/mocktail/sorbet/mocktail/matchers/that.rb +32 -0
  132. data/lib/mocktail/sorbet/mocktail/matchers.rb +19 -0
  133. data/lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb +93 -0
  134. data/lib/mocktail/sorbet/mocktail/records_demonstration.rb +43 -0
  135. data/lib/mocktail/sorbet/mocktail/registers_matcher.rb +65 -0
  136. data/lib/mocktail/sorbet/mocktail/registers_stubbing.rb +31 -0
  137. data/lib/mocktail/sorbet/mocktail/replaces_next.rb +55 -0
  138. data/lib/mocktail/sorbet/mocktail/replaces_type/redefines_new.rb +32 -0
  139. data/lib/mocktail/sorbet/mocktail/replaces_type/redefines_singleton_methods.rb +80 -0
  140. data/lib/mocktail/sorbet/mocktail/replaces_type/runs_sorbet_sig_blocks_before_replacement.rb +39 -0
  141. data/lib/mocktail/sorbet/mocktail/replaces_type.rb +36 -0
  142. data/lib/mocktail/sorbet/mocktail/resets_state.rb +14 -0
  143. data/lib/mocktail/sorbet/mocktail/share/bind.rb +18 -0
  144. data/lib/mocktail/sorbet/mocktail/share/cleans_backtrace.rb +22 -0
  145. data/lib/mocktail/sorbet/mocktail/share/creates_identifier.rb +39 -0
  146. data/lib/mocktail/sorbet/mocktail/share/determines_matching_calls.rb +72 -0
  147. data/lib/mocktail/sorbet/mocktail/share/stringifies_call.rb +84 -0
  148. data/lib/mocktail/sorbet/mocktail/share/stringifies_method_name.rb +16 -0
  149. data/lib/mocktail/sorbet/mocktail/simulates_argument_error/reconciles_args_with_params.rb +27 -0
  150. data/lib/mocktail/sorbet/mocktail/simulates_argument_error/recreates_message.rb +34 -0
  151. data/lib/mocktail/sorbet/mocktail/simulates_argument_error/transforms_params.rb +58 -0
  152. data/lib/mocktail/sorbet/mocktail/simulates_argument_error.rb +36 -0
  153. data/lib/mocktail/sorbet/mocktail/sorbet.rb +3 -0
  154. data/lib/mocktail/sorbet/mocktail/stringifies_method_signature.rb +53 -0
  155. data/lib/mocktail/sorbet/mocktail/typed.rb +5 -0
  156. data/lib/mocktail/sorbet/mocktail/value/cabinet.rb +91 -0
  157. data/lib/mocktail/sorbet/mocktail/value/call.rb +51 -0
  158. data/lib/mocktail/sorbet/mocktail/value/demo_config.rb +10 -0
  159. data/lib/mocktail/sorbet/mocktail/value/double.rb +10 -0
  160. data/lib/mocktail/sorbet/mocktail/value/double_data.rb +15 -0
  161. data/lib/mocktail/sorbet/mocktail/value/explanation.rb +68 -0
  162. data/lib/mocktail/sorbet/mocktail/value/explanation_data.rb +19 -0
  163. data/lib/mocktail/sorbet/mocktail/value/fake_method_data.rb +11 -0
  164. data/lib/mocktail/sorbet/mocktail/value/matcher_registry.rb +27 -0
  165. data/lib/mocktail/sorbet/mocktail/value/no_explanation_data.rb +20 -0
  166. data/lib/mocktail/sorbet/mocktail/value/signature.rb +35 -0
  167. data/lib/mocktail/sorbet/mocktail/value/stubbing.rb +26 -0
  168. data/lib/mocktail/sorbet/mocktail/value/top_shelf.rb +79 -0
  169. data/lib/mocktail/sorbet/mocktail/value/type_replacement.rb +11 -0
  170. data/lib/mocktail/sorbet/mocktail/value/type_replacement_data.rb +19 -0
  171. data/lib/mocktail/sorbet/mocktail/value/unsatisfying_call.rb +9 -0
  172. data/lib/mocktail/sorbet/mocktail/value/unsatisfying_call_explanation.rb +24 -0
  173. data/lib/mocktail/sorbet/mocktail/value.rb +19 -0
  174. data/lib/mocktail/sorbet/mocktail/verifies_call/finds_verifiable_calls.rb +21 -0
  175. data/lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error/gathers_calls_of_method.rb +15 -0
  176. data/lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error.rb +74 -0
  177. data/lib/mocktail/sorbet/mocktail/verifies_call.rb +37 -0
  178. data/lib/mocktail/sorbet/mocktail/version.rb +12 -0
  179. data/lib/mocktail/sorbet/mocktail.rb +154 -0
  180. data/lib/mocktail/sorbet.rb +1 -0
  181. data/lib/mocktail/stringifies_method_signature.rb +2 -0
  182. data/lib/mocktail/typed.rb +3 -0
  183. data/lib/mocktail/value/cabinet.rb +8 -1
  184. data/lib/mocktail/value/call.rb +44 -12
  185. data/lib/mocktail/value/demo_config.rb +6 -7
  186. data/lib/mocktail/value/double.rb +6 -7
  187. data/lib/mocktail/value/double_data.rb +11 -7
  188. data/lib/mocktail/value/explanation.rb +28 -3
  189. data/lib/mocktail/value/explanation_data.rb +14 -0
  190. data/lib/mocktail/value/fake_method_data.rb +7 -6
  191. data/lib/mocktail/value/matcher_registry.rb +2 -0
  192. data/lib/mocktail/value/no_explanation_data.rb +16 -0
  193. data/lib/mocktail/value/signature.rb +19 -27
  194. data/lib/mocktail/value/stubbing.rb +11 -12
  195. data/lib/mocktail/value/top_shelf.rb +5 -0
  196. data/lib/mocktail/value/type_replacement.rb +7 -8
  197. data/lib/mocktail/value/type_replacement_data.rb +10 -7
  198. data/lib/mocktail/value/unsatisfying_call.rb +5 -6
  199. data/lib/mocktail/value/unsatisfying_call_explanation.rb +18 -0
  200. data/lib/mocktail/value.rb +5 -2
  201. data/lib/mocktail/verifies_call/finds_verifiable_calls.rb +2 -0
  202. data/lib/mocktail/verifies_call/raises_verification_error/gathers_calls_of_method.rb +2 -0
  203. data/lib/mocktail/verifies_call/raises_verification_error.rb +2 -0
  204. data/lib/mocktail/verifies_call.rb +3 -0
  205. data/lib/mocktail/version.rb +8 -1
  206. data/lib/mocktail.rb +46 -5
  207. data/mocktail.gemspec +8 -4
  208. data/rbi/mocktail-pregenerated.rbi +1923 -0
  209. data/rbi/mocktail.rbi +77 -0
  210. data/rbi/sorbet-runtime.rbi +29 -0
  211. data/script/build +47 -0
  212. data/script/setup +17 -0
  213. data/script/spoom_me +7 -0
  214. data/script/strip_sigils +17 -0
  215. data/script/test +33 -0
  216. data/script/test_double_require_warnings +46 -0
  217. data/script/update +21 -0
  218. data/sorbet/config +12 -0
  219. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  220. data/sorbet/rbi/gems/ast@2.4.2.rbi +584 -0
  221. data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +1083 -0
  222. data/sorbet/rbi/gems/docile@1.4.0.rbi +376 -0
  223. data/sorbet/rbi/gems/json@2.6.3.rbi +1533 -0
  224. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14237 -0
  225. data/sorbet/rbi/gems/lint_roller@1.0.0.rbi +230 -0
  226. data/sorbet/rbi/gems/m@1.6.1.rbi +257 -0
  227. data/sorbet/rbi/gems/method_source@1.0.0.rbi +272 -0
  228. data/sorbet/rbi/gems/minitest@5.18.0.rbi +1491 -0
  229. data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
  230. data/sorbet/rbi/gems/parallel@1.23.0.rbi +273 -0
  231. data/sorbet/rbi/gems/parser@3.2.2.1.rbi +7253 -0
  232. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +402 -0
  233. data/sorbet/rbi/gems/rake@13.0.6.rbi +3024 -0
  234. data/sorbet/rbi/gems/rbi@0.0.16.rbi +3049 -0
  235. data/sorbet/rbi/gems/regexp_parser@2.8.0.rbi +3748 -0
  236. data/sorbet/rbi/gems/rexml@3.2.5.rbi +4717 -0
  237. data/sorbet/rbi/gems/rubocop-ast@1.29.0.rbi +7003 -0
  238. data/sorbet/rbi/gems/rubocop-performance@1.18.0.rbi +8 -0
  239. data/sorbet/rbi/gems/rubocop-sorbet@0.7.0.rbi +1043 -0
  240. data/sorbet/rbi/gems/rubocop@1.52.0.rbi +55500 -0
  241. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1317 -0
  242. data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +216 -0
  243. data/sorbet/rbi/gems/simplecov@0.22.0.rbi +2148 -0
  244. data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +8 -0
  245. data/sorbet/rbi/gems/spoom@1.2.1.rbi +2536 -0
  246. data/sorbet/rbi/gems/standard-custom@1.0.1.rbi +63 -0
  247. data/sorbet/rbi/gems/standard-performance@1.1.0.rbi +8 -0
  248. data/sorbet/rbi/gems/standard@1.29.0.rbi +850 -0
  249. data/sorbet/rbi/gems/tapioca@0.11.6.rbi +3301 -0
  250. data/sorbet/rbi/gems/thor@1.2.2.rbi +3965 -0
  251. data/sorbet/rbi/gems/unicode-display_width@2.4.2.rbi +65 -0
  252. data/sorbet/rbi/gems/unparser@0.6.7.rbi +4524 -0
  253. data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +428 -0
  254. data/sorbet/rbi/gems/yard@0.9.34.rbi +18219 -0
  255. data/sorbet/tapioca/config.yml +13 -0
  256. data/sorbet/tapioca/require.rb +4 -0
  257. data/spoom_data/05f0c49.json +1 -0
  258. data/spoom_data/1657012.json +1 -0
  259. data/spoom_data/167434b.json +1 -0
  260. data/spoom_data/1d0ba5b.json +1 -0
  261. data/spoom_data/1ffa724.json +1 -0
  262. data/spoom_data/2129b3d.json +1 -0
  263. data/spoom_data/24b1c92.json +1 -0
  264. data/spoom_data/2c46aee.json +1 -0
  265. data/spoom_data/305ec0b.json +1 -0
  266. data/spoom_data/30e9528.json +1 -0
  267. data/spoom_data/4638cd5.json +1 -0
  268. data/spoom_data/47c7dad.json +1 -0
  269. data/spoom_data/4b1edef.json +1 -0
  270. data/spoom_data/4de157f.json +1 -0
  271. data/spoom_data/526e7db.json +1 -0
  272. data/spoom_data/5d093b9.json +1 -0
  273. data/spoom_data/5db3b43.json +1 -0
  274. data/spoom_data/5fe2a65.json +1 -0
  275. data/spoom_data/6891312.json +1 -0
  276. data/spoom_data/6b0fef4.json +1 -0
  277. data/spoom_data/6b83d12.json +1 -0
  278. data/spoom_data/74c83c2.json +1 -0
  279. data/spoom_data/7644ff4.json +1 -0
  280. data/spoom_data/79054db.json +1 -0
  281. data/spoom_data/814e515.json +1 -0
  282. data/spoom_data/88c3b60.json +1 -0
  283. data/spoom_data/8bd4b6e.json +1 -0
  284. data/spoom_data/93f8153.json +1 -0
  285. data/spoom_data/95242fe.json +1 -0
  286. data/spoom_data/97f4c09.json +1 -0
  287. data/spoom_data/a13d150.json +1 -0
  288. data/spoom_data/a17f215.json +1 -0
  289. data/spoom_data/b705a9d.json +1 -0
  290. data/spoom_data/ba19195.json +1 -0
  291. data/spoom_data/bef51ca.json +1 -0
  292. data/spoom_data/dbb595a.json +1 -0
  293. data/spoom_data/e8fab92.json +1 -0
  294. data/spoom_data/f166c87.json +1 -0
  295. data/spoom_data/f57992d.json +1 -0
  296. data/spoom_data/f5a1e40.json +1 -0
  297. data/spoom_data/f6d6431.json +1 -0
  298. data/spoom_data/f72b67c.json +1 -0
  299. data/spoom_data/fc2f231.json +1 -0
  300. data/spoom_report.html +1248 -0
  301. data/src/mocktail/collects_calls.rb +18 -0
  302. data/src/mocktail/debug.rb +55 -0
  303. data/src/mocktail/dsl.rb +46 -0
  304. data/src/mocktail/errors.rb +19 -0
  305. data/src/mocktail/explains_nils.rb +41 -0
  306. data/src/mocktail/explains_thing.rb +137 -0
  307. data/src/mocktail/grabs_original_method_parameters.rb +33 -0
  308. data/src/mocktail/handles_dry_call/fulfills_stubbing/describes_unsatisfied_stubbing.rb +27 -0
  309. data/src/mocktail/handles_dry_call/fulfills_stubbing/finds_satisfaction.rb +24 -0
  310. data/src/mocktail/handles_dry_call/fulfills_stubbing.rb +45 -0
  311. data/src/mocktail/handles_dry_call/logs_call.rb +12 -0
  312. data/src/mocktail/handles_dry_call/validates_arguments.rb +45 -0
  313. data/src/mocktail/handles_dry_call.rb +25 -0
  314. data/src/mocktail/handles_dry_new_call.rb +42 -0
  315. data/src/mocktail/imitates_type/ensures_imitation_support.rb +16 -0
  316. data/src/mocktail/imitates_type/makes_double/declares_dry_class/reconstructs_call.rb +73 -0
  317. data/src/mocktail/imitates_type/makes_double/declares_dry_class.rb +136 -0
  318. data/src/mocktail/imitates_type/makes_double/gathers_fakeable_instance_methods.rb +28 -0
  319. data/src/mocktail/imitates_type/makes_double.rb +29 -0
  320. data/src/mocktail/imitates_type.rb +29 -0
  321. data/src/mocktail/initialize_based_on_type_system_mode_switching.rb +11 -0
  322. data/src/mocktail/initializes_mocktail.rb +25 -0
  323. data/src/mocktail/matcher_presentation.rb +21 -0
  324. data/src/mocktail/matchers/any.rb +27 -0
  325. data/src/mocktail/matchers/base.rb +39 -0
  326. data/src/mocktail/matchers/captor.rb +76 -0
  327. data/src/mocktail/matchers/includes.rb +32 -0
  328. data/src/mocktail/matchers/includes_hash.rb +12 -0
  329. data/src/mocktail/matchers/includes_key.rb +12 -0
  330. data/src/mocktail/matchers/includes_string.rb +12 -0
  331. data/src/mocktail/matchers/is_a.rb +17 -0
  332. data/src/mocktail/matchers/matches.rb +19 -0
  333. data/src/mocktail/matchers/not.rb +17 -0
  334. data/src/mocktail/matchers/numeric.rb +27 -0
  335. data/src/mocktail/matchers/that.rb +32 -0
  336. data/src/mocktail/matchers.rb +19 -0
  337. data/src/mocktail/raises_neato_no_method_error.rb +93 -0
  338. data/src/mocktail/records_demonstration.rb +43 -0
  339. data/src/mocktail/registers_matcher.rb +65 -0
  340. data/src/mocktail/registers_stubbing.rb +31 -0
  341. data/src/mocktail/replaces_next.rb +55 -0
  342. data/src/mocktail/replaces_type/redefines_new.rb +32 -0
  343. data/src/mocktail/replaces_type/redefines_singleton_methods.rb +80 -0
  344. data/src/mocktail/replaces_type/runs_sorbet_sig_blocks_before_replacement.rb +39 -0
  345. data/src/mocktail/replaces_type.rb +36 -0
  346. data/src/mocktail/resets_state.rb +14 -0
  347. data/src/mocktail/share/bind.rb +18 -0
  348. data/src/mocktail/share/cleans_backtrace.rb +22 -0
  349. data/src/mocktail/share/creates_identifier.rb +39 -0
  350. data/src/mocktail/share/determines_matching_calls.rb +72 -0
  351. data/src/mocktail/share/stringifies_call.rb +84 -0
  352. data/src/mocktail/share/stringifies_method_name.rb +16 -0
  353. data/src/mocktail/simulates_argument_error/reconciles_args_with_params.rb +27 -0
  354. data/src/mocktail/simulates_argument_error/recreates_message.rb +34 -0
  355. data/src/mocktail/simulates_argument_error/transforms_params.rb +58 -0
  356. data/src/mocktail/simulates_argument_error.rb +36 -0
  357. data/src/mocktail/sorbet.rb +3 -0
  358. data/src/mocktail/stringifies_method_signature.rb +53 -0
  359. data/src/mocktail/typed.rb +5 -0
  360. data/src/mocktail/value/cabinet.rb +91 -0
  361. data/src/mocktail/value/call.rb +51 -0
  362. data/src/mocktail/value/demo_config.rb +10 -0
  363. data/src/mocktail/value/double.rb +10 -0
  364. data/src/mocktail/value/double_data.rb +15 -0
  365. data/src/mocktail/value/explanation.rb +68 -0
  366. data/src/mocktail/value/explanation_data.rb +19 -0
  367. data/src/mocktail/value/fake_method_data.rb +11 -0
  368. data/src/mocktail/value/matcher_registry.rb +27 -0
  369. data/src/mocktail/value/no_explanation_data.rb +20 -0
  370. data/src/mocktail/value/signature.rb +35 -0
  371. data/src/mocktail/value/stubbing.rb +26 -0
  372. data/src/mocktail/value/top_shelf.rb +79 -0
  373. data/src/mocktail/value/type_replacement.rb +11 -0
  374. data/src/mocktail/value/type_replacement_data.rb +19 -0
  375. data/src/mocktail/value/unsatisfying_call.rb +9 -0
  376. data/src/mocktail/value/unsatisfying_call_explanation.rb +24 -0
  377. data/src/mocktail/value.rb +19 -0
  378. data/src/mocktail/verifies_call/finds_verifiable_calls.rb +21 -0
  379. data/src/mocktail/verifies_call/raises_verification_error/gathers_calls_of_method.rb +15 -0
  380. data/src/mocktail/verifies_call/raises_verification_error.rb +74 -0
  381. data/src/mocktail/verifies_call.rb +37 -0
  382. data/src/mocktail/version.rb +12 -0
  383. data/src/mocktail.rb +154 -0
  384. data/sub_projects/rbi_generator/Gemfile +4 -0
  385. data/sub_projects/rbi_generator/Gemfile.lock +63 -0
  386. data/sub_projects/rbi_generator/sorbet/rbi/gems/.gitattributes +1 -0
  387. data/sub_projects/sorbet_user/Gemfile +13 -0
  388. data/sub_projects/sorbet_user/Gemfile.lock +126 -0
  389. data/sub_projects/sorbet_user/Rakefile +10 -0
  390. data/sub_projects/sorbet_user/bin/tapioca +27 -0
  391. data/sub_projects/sorbet_user/rbi/mocktail.rbi +9 -0
  392. data/sub_projects/sorbet_user/script/test +13 -0
  393. data/sub_projects/sorbet_user/sorbet/config +4 -0
  394. data/sub_projects/sorbet_user/sorbet/rbi/gems/.gitattributes +1 -0
  395. data/sub_projects/sorbet_user/sorbet/rbi/gems/ast@2.4.3.rbi +585 -0
  396. data/sub_projects/sorbet_user/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
  397. data/sub_projects/sorbet_user/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
  398. data/sub_projects/sorbet_user/sorbet/rbi/gems/json@2.21.2.rbi +2140 -0
  399. data/sub_projects/sorbet_user/sorbet/rbi/gems/language_server-protocol@3.17.0.4.rbi +14244 -0
  400. data/sub_projects/sorbet_user/sorbet/rbi/gems/lint_roller@1.1.0.rbi +239 -0
  401. data/sub_projects/sorbet_user/sorbet/rbi/gems/logger@1.7.0.rbi +963 -0
  402. data/sub_projects/sorbet_user/sorbet/rbi/gems/m@1.6.2.rbi +258 -0
  403. data/sub_projects/sorbet_user/sorbet/rbi/gems/method_source@1.1.0.rbi +9 -0
  404. data/sub_projects/sorbet_user/sorbet/rbi/gems/minitest@5.27.0.rbi +1549 -0
  405. data/sub_projects/sorbet_user/sorbet/rbi/gems/mocktail@3.0.0.rbi +1923 -0
  406. data/sub_projects/sorbet_user/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
  407. data/sub_projects/sorbet_user/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
  408. data/sub_projects/sorbet_user/sorbet/rbi/gems/parser@3.3.7.4.rbi +5451 -0
  409. data/sub_projects/sorbet_user/sorbet/rbi/gems/prism@1.4.0.rbi +41732 -0
  410. data/sub_projects/sorbet_user/sorbet/rbi/gems/racc@1.8.1.rbi +164 -0
  411. data/sub_projects/sorbet_user/sorbet/rbi/gems/rainbow@3.1.1.rbi +402 -0
  412. data/sub_projects/sorbet_user/sorbet/rbi/gems/rake@13.2.1.rbi +3028 -0
  413. data/sub_projects/sorbet_user/sorbet/rbi/gems/rbi@0.3.1.rbi +6599 -0
  414. data/sub_projects/sorbet_user/sorbet/rbi/gems/rbs@3.9.2.rbi +6976 -0
  415. data/sub_projects/sorbet_user/sorbet/rbi/gems/regexp_parser@2.10.0.rbi +3795 -0
  416. data/sub_projects/sorbet_user/sorbet/rbi/gems/rubocop-ast@1.43.0.rbi +7717 -0
  417. data/sub_projects/sorbet_user/sorbet/rbi/gems/rubocop-performance@1.24.0.rbi +9 -0
  418. data/sub_projects/sorbet_user/sorbet/rbi/gems/rubocop-sorbet@0.9.0.rbi +9 -0
  419. data/sub_projects/sorbet_user/sorbet/rbi/gems/rubocop@1.73.2.rbi +61306 -0
  420. data/sub_projects/sorbet_user/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1317 -0
  421. data/sub_projects/sorbet_user/sorbet/rbi/gems/sorbet-eraser@0.3.1.rbi +8 -0
  422. data/sub_projects/sorbet_user/sorbet/rbi/gems/spoom@1.6.1.rbi +7274 -0
  423. data/sub_projects/sorbet_user/sorbet/rbi/gems/standard-custom@1.0.2.rbi +8 -0
  424. data/sub_projects/sorbet_user/sorbet/rbi/gems/standard-performance@1.7.0.rbi +9 -0
  425. data/sub_projects/sorbet_user/sorbet/rbi/gems/standard-sorbet@0.0.3.rbi +53 -0
  426. data/sub_projects/sorbet_user/sorbet/rbi/gems/standard@1.47.0.rbi +935 -0
  427. data/sub_projects/sorbet_user/sorbet/rbi/gems/tapioca@0.16.11.rbi +3628 -0
  428. data/sub_projects/sorbet_user/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
  429. data/sub_projects/sorbet_user/sorbet/rbi/gems/unicode-display_width@3.1.4.rbi +132 -0
  430. data/sub_projects/sorbet_user/sorbet/rbi/gems/unicode-emoji@4.2.0.rbi +254 -0
  431. data/sub_projects/sorbet_user/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  432. data/sub_projects/sorbet_user/sorbet/rbi/gems/yard@0.9.45.rbi +18916 -0
  433. data/sub_projects/sorbet_user/sorbet/tapioca/config.yml +13 -0
  434. data/sub_projects/sorbet_user/sorbet/tapioca/require.rb +4 -0
  435. data/sub_projects/sorbet_user/test/ensure_type_safety_test.rb +21 -0
  436. data/sub_projects/sorbet_user/test/paint_by_number_test.rb +113 -0
  437. data/sub_projects/sorbet_user/test/sorbet_test.rb +289 -0
  438. data/sub_projects/sorbet_user/test/test_helper.rb +35 -0
  439. data/sub_projects/untyped_user/Gemfile +4 -0
  440. data/sub_projects/untyped_user/Gemfile.lock +25 -0
  441. data/sub_projects/untyped_user/antitype_test.rb +54 -0
  442. data/sub_projects/untyped_user/script/test +5 -0
  443. metadata +392 -9
@@ -0,0 +1,1923 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `mocktail` gem.
5
+ # Please instead update this file by running `bin/tapioca gem mocktail`.
6
+
7
+
8
+ # typed: true
9
+
10
+ # DO NOT EDIT MANUALLY
11
+ # This is an autogenerated file for types exported from the `mocktail` gem.
12
+ # Please instead update this file by running `bin/tapioca gem mocktail`.
13
+
14
+ # The Cabinet stores all thread-local state, so anything that goes here
15
+ # is guaranteed by Mocktail to be local to the currently-running thread
16
+ #
17
+ # source://mocktail//lib/mocktail/sorbet/mocktail/typed.rb#3
18
+ # The Cabinet stores all thread-local state, so anything that goes here
19
+ module Mocktail
20
+ extend ::Mocktail::DSL
21
+
22
+ class << self
23
+ # Stores most transactional state about calls & stubbing configurations
24
+ # Anything returned by this is undocumented and could change at any time, so
25
+ # don't commit code that relies on it!
26
+ #
27
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#149
28
+ # Stores most transactional state about calls & stubbing configurations
29
+ # Anything returned by this is undocumented and could change at any time, so
30
+ sig { returns(::Mocktail::Cabinet) }
31
+ def cabinet; end
32
+
33
+ # An alias for Mocktail.explain(double).reference.calls
34
+ # Takes an optional second parameter of the method name to filter only
35
+ # calls to that method
36
+ #
37
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#141
38
+ # An alias for Mocktail.explain(double).reference.calls
39
+ # Takes an optional second parameter of the method name to filter only
40
+ sig do
41
+ params(
42
+ double: ::Object,
43
+ method_name: T.nilable(T.any(::String, ::Symbol))
44
+ ).returns(T::Array[::Mocktail::Call])
45
+ end
46
+ def calls(double, method_name = T.unsafe(nil)); end
47
+
48
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#99
49
+ sig { returns(::Mocktail::Matchers::Captor) }
50
+ def captor; end
51
+
52
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#125
53
+ sig { params(thing: ::Object).returns(::Mocktail::Explanation) }
54
+ def explain(thing); end
55
+
56
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#130
57
+ sig { returns(T::Array[::Mocktail::UnsatisfyingCallExplanation]) }
58
+ def explain_nils; end
59
+
60
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#94
61
+ sig { returns(::Mocktail::MatcherPresentation) }
62
+ def matchers; end
63
+
64
+ # Returns an instance of `type` whose implementation is mocked out
65
+ #
66
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#52
67
+ sig do
68
+ type_parameters(:T)
69
+ .params(
70
+ type: T::Class[T.all(::Object, T.type_parameter(:T))]
71
+ ).returns(T.all(::Object, T.type_parameter(:T)))
72
+ end
73
+ def of(type); end
74
+
75
+ # Returns an instance of `klass` whose implementation is mocked out AND
76
+ # stubs its constructor to return that fake the next time klass.new is called
77
+ #
78
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#63
79
+ # Returns an instance of `klass` whose implementation is mocked out AND
80
+ sig do
81
+ type_parameters(:T)
82
+ .params(
83
+ type: T::Class[T.all(::Object, T.type_parameter(:T))],
84
+ count: T.nilable(::Integer)
85
+ ).returns(T.type_parameter(:T))
86
+ end
87
+ def of_next(type, count: T.unsafe(nil)); end
88
+
89
+ # An alias of of_next that always returns an array of fakes
90
+ #
91
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#89
92
+ sig do
93
+ type_parameters(:T)
94
+ .params(
95
+ type: T::Class[T.all(::Object, T.type_parameter(:T))],
96
+ count: ::Integer
97
+ ).returns(T::Array[T.type_parameter(:T)])
98
+ end
99
+ def of_next_with_count(type, count); end
100
+
101
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#104
102
+ sig { params(matcher: T.class_of(Mocktail::Matchers::Base)).void }
103
+ def register_matcher(matcher); end
104
+
105
+ # Replaces every singleton method on `type` with a fake, and when instantiated
106
+ # or included will also fake instance methods
107
+ #
108
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#111
109
+ # Replaces every singleton method on `type` with a fake, and when instantiated
110
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
111
+ def replace(type); end
112
+
113
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#117
114
+ sig { void }
115
+ def reset; end
116
+ end
117
+ end
118
+
119
+ # source://mocktail//lib/mocktail/sorbet/mocktail/errors.rb#12
120
+ class Mocktail::AmbiguousDemonstrationError < ::Mocktail::Error; end
121
+
122
+ # source://mocktail//lib/mocktail/sorbet/mocktail.rb#44
123
+ Mocktail::BASE_PATH = T.let(T.unsafe(nil), String)
124
+
125
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/bind.rb#4
126
+ module Mocktail::Bind
127
+ class << self
128
+ # sig intentionally omitted, because the wrapper will cause infinite recursion if certain methods are mocked
129
+ #
130
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/bind.rb#6
131
+ def call(mock, method_name, *args, **kwargs, &blk); end
132
+ end
133
+ end
134
+
135
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#8
136
+ class Mocktail::Cabinet
137
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#24
138
+ sig { void }
139
+ def initialize; end
140
+
141
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#15
142
+ sig { returns(T::Array[::Mocktail::Call]) }
143
+ def calls; end
144
+
145
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#85
146
+ sig { params(double: ::Mocktail::Double).returns(T::Array[::Mocktail::Call]) }
147
+ def calls_for_double(double); end
148
+
149
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#12
150
+ sig { params(demonstration_in_progress: T::Boolean).void }
151
+ def demonstration_in_progress=(demonstration_in_progress); end
152
+
153
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#65
154
+ sig { returns(T::Boolean) }
155
+ def demonstration_in_progress?; end
156
+
157
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#70
158
+ sig { params(thing: T.anything).returns(T.nilable(::Mocktail::Double)) }
159
+ def double_for_instance(thing); end
160
+
161
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#33
162
+ sig { void }
163
+ def reset!; end
164
+
165
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#50
166
+ sig { params(call: ::Mocktail::Call).void }
167
+ def store_call(call); end
168
+
169
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#45
170
+ sig { params(double: ::Mocktail::Double).void }
171
+ def store_double(double); end
172
+
173
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#55
174
+ sig { params(stubbing: Mocktail::Stubbing[T.anything]).void }
175
+ def store_stubbing(stubbing); end
176
+
177
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#60
178
+ sig { params(unsatisfying_call: ::Mocktail::UnsatisfyingCall).void }
179
+ def store_unsatisfying_call(unsatisfying_call); end
180
+
181
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#18
182
+ sig { returns(T::Array[Mocktail::Stubbing[T.anything]]) }
183
+ def stubbings; end
184
+
185
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#78
186
+ sig { params(double: ::Mocktail::Double).returns(T::Array[Mocktail::Stubbing[T.anything]]) }
187
+ def stubbings_for_double(double); end
188
+
189
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/cabinet.rb#21
190
+ sig { returns(T::Array[::Mocktail::UnsatisfyingCall]) }
191
+ def unsatisfying_calls; end
192
+ end
193
+
194
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/call.rb#4
195
+ class Mocktail::Call < ::T::Struct
196
+ const :singleton, T.nilable(T::Boolean)
197
+ const :double, ::Object, default: T.unsafe(nil)
198
+ const :original_type, T.nilable(T.any(::Module, T::Class[T.anything]))
199
+ const :dry_type, T.nilable(T.any(::Module, T::Class[T.anything]))
200
+ const :method, T.nilable(::Symbol)
201
+ const :original_method, T.nilable(T.any(::Method, ::UnboundMethod))
202
+ const :args, T::Array[T.untyped], default: T.unsafe(nil)
203
+ const :kwargs, T::Hash[::Symbol, T.untyped], default: T.unsafe(nil)
204
+ const :block, T.nilable(::Proc)
205
+
206
+ # Because T::Struct compares with referential equality, we need
207
+ # to redefine the equality methods to compare the values of the attributes.
208
+ #
209
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/call.rb#27
210
+ # Because T::Struct compares with referential equality, we need
211
+ sig { params(other: T.nilable(T.anything)).returns(T::Boolean) }
212
+ def ==(other); end
213
+
214
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/call.rb#32
215
+ sig { params(other: T.anything).returns(T::Boolean) }
216
+ def eql?(other); end
217
+
218
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/call.rb#47
219
+ sig { returns(::Integer) }
220
+ def hash; end
221
+
222
+ class << self
223
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
224
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
225
+ def inherited(s); end
226
+ end
227
+ end
228
+
229
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/cleans_backtrace.rb#4
230
+ class Mocktail::CleansBacktrace
231
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/cleans_backtrace.rb#12
232
+ sig { type_parameters(:T).params(error: T.all(::StandardError, T.type_parameter(:T))).returns(T.type_parameter(:T)) }
233
+ def clean(error); end
234
+ end
235
+
236
+ # source://mocktail//lib/mocktail/sorbet/mocktail/collects_calls.rb#4
237
+ class Mocktail::CollectsCalls
238
+ # source://mocktail//lib/mocktail/sorbet/mocktail/collects_calls.rb#8
239
+ sig { params(double: ::Object, method_name: T.nilable(::Symbol)).returns(T::Array[::Mocktail::Call]) }
240
+ def collect(double, method_name); end
241
+ end
242
+
243
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/creates_identifier.rb#4
244
+ class Mocktail::CreatesIdentifier
245
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/creates_identifier.rb#10
246
+ sig { params(s: T.anything, default: ::String, max_length: ::Integer).returns(::String) }
247
+ def create(s, default: T.unsafe(nil), max_length: T.unsafe(nil)); end
248
+
249
+ private
250
+
251
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/creates_identifier.rb#33
252
+ sig { params(id: ::String, default: ::String).returns(::String) }
253
+ def unreserved(id, default); end
254
+ end
255
+
256
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/creates_identifier.rb#7
257
+ Mocktail::CreatesIdentifier::KEYWORDS = T.let(T.unsafe(nil), Array)
258
+
259
+ # source://mocktail//lib/mocktail/sorbet/mocktail/dsl.rb#4
260
+ module Mocktail::DSL
261
+ # source://mocktail//lib/mocktail/sorbet/mocktail/dsl.rb#18
262
+ sig do
263
+ type_parameters(:T)
264
+ .params(
265
+ ignore_block: T::Boolean,
266
+ ignore_extra_args: T::Boolean,
267
+ ignore_arity: T::Boolean,
268
+ times: T.nilable(::Integer),
269
+ demo: T.proc.params(matchers: ::Mocktail::MatcherPresentation).returns(T.type_parameter(:T))
270
+ ).returns(Mocktail::Stubbing[T.type_parameter(:T)])
271
+ end
272
+ def stubs(ignore_block: T.unsafe(nil), ignore_extra_args: T.unsafe(nil), ignore_arity: T.unsafe(nil), times: T.unsafe(nil), &demo); end
273
+
274
+ # source://mocktail//lib/mocktail/sorbet/mocktail/dsl.rb#37
275
+ sig do
276
+ params(
277
+ ignore_block: T::Boolean,
278
+ ignore_extra_args: T::Boolean,
279
+ ignore_arity: T::Boolean,
280
+ times: T.nilable(::Integer),
281
+ demo: T.proc.params(matchers: ::Mocktail::MatcherPresentation).void
282
+ ).void
283
+ end
284
+ def verify(ignore_block: T.unsafe(nil), ignore_extra_args: T.unsafe(nil), ignore_arity: T.unsafe(nil), times: T.unsafe(nil), &demo); end
285
+ end
286
+
287
+ # source://mocktail//lib/mocktail/sorbet/mocktail/debug.rb#4
288
+ module Mocktail::Debug
289
+ class << self
290
+ # It would be easy and bad for the mocktail lib to call something like
291
+ #
292
+ # double == other_double
293
+ #
294
+ # But if it's a double, that means anyone who stubs that method could change
295
+ # the internal behavior of the library in unexpected ways (as happened here:
296
+ # https://github.com/testdouble/mocktail/issues/7 )
297
+ #
298
+ # For that reason when we run our tests, we also want to blow up if this
299
+ # happens unintentionally. This works in conjunction with the test
300
+ # MockingMethodfulClassesTest, because it mocks every defined method on the
301
+ # mocked BasicObject
302
+ #
303
+ # source://mocktail//lib/mocktail/sorbet/mocktail/debug.rb#20
304
+ # It would be easy and bad for the mocktail lib to call something like
305
+ # double == other_double
306
+ # But if it's a double, that means anyone who stubs that method could change
307
+ # the internal behavior of the library in unexpected ways (as happened here:
308
+ # https://github.com/testdouble/mocktail/issues/7 )
309
+ # For that reason when we run our tests, we also want to blow up if this
310
+ # happens unintentionally. This works in conjunction with the test
311
+ # MockingMethodfulClassesTest, because it mocks every defined method on the
312
+ sig { void }
313
+ def guard_against_mocktail_accidentally_calling_mocks_if_debugging!; end
314
+ end
315
+ end
316
+
317
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb#6
318
+ class Mocktail::DeclaresDryClass
319
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb#12
320
+ sig { void }
321
+ def initialize; end
322
+
323
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb#23
324
+ sig do
325
+ type_parameters(:T)
326
+ .params(
327
+ type: T.all(T.type_parameter(:T), T::Class[::Object]),
328
+ instance_methods: T::Array[::Symbol]
329
+ ).returns(T.type_parameter(:T))
330
+ end
331
+ def declare(type, instance_methods); end
332
+
333
+ private
334
+
335
+ # These have special implementations, but if the user defines
336
+ # any of them on the object itself, then they'll be replaced with normal
337
+ # mocked methods. YMMV
338
+ #
339
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb#55
340
+ # These have special implementations, but if the user defines
341
+ # any of them on the object itself, then they'll be replaced with normal
342
+ sig do
343
+ params(
344
+ dry_class: T::Class[::Object],
345
+ type: T.any(::Module, T::Class[T.anything]),
346
+ instance_methods: T::Array[::Symbol]
347
+ ).void
348
+ end
349
+ def add_more_methods!(dry_class, type, instance_methods); end
350
+
351
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb#94
352
+ sig do
353
+ params(
354
+ dry_class: T::Class[::Object],
355
+ method_name: ::Symbol,
356
+ type: T.any(::Module, T::Class[T.anything]),
357
+ instance_methods: T::Array[::Symbol]
358
+ ).void
359
+ end
360
+ def add_stringify_methods!(dry_class, method_name, type, instance_methods); end
361
+
362
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb#64
363
+ sig do
364
+ params(
365
+ dry_class: T::Class[::Object],
366
+ type: T.any(::Module, T::Class[T.anything]),
367
+ instance_methods: T::Array[::Symbol]
368
+ ).void
369
+ end
370
+ def define_double_methods!(dry_class, type, instance_methods); end
371
+
372
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb#115
373
+ sig do
374
+ params(
375
+ dry_class: T::Class[::Object],
376
+ type: T.any(::Module, T::Class[T.anything]),
377
+ instance_methods: T::Array[::Symbol]
378
+ ).void
379
+ end
380
+ def define_method_missing_errors!(dry_class, type, instance_methods); end
381
+ end
382
+
383
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class.rb#9
384
+ Mocktail::DeclaresDryClass::DEFAULT_ANCESTORS = T.let(T.unsafe(nil), Array)
385
+
386
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/demo_config.rb#4
387
+ class Mocktail::DemoConfig < ::T::Struct
388
+ const :ignore_block, T::Boolean, default: T.unsafe(nil)
389
+ const :ignore_extra_args, T::Boolean, default: T.unsafe(nil)
390
+ const :ignore_arity, T::Boolean, default: T.unsafe(nil)
391
+ const :times, T.nilable(::Integer), default: T.unsafe(nil)
392
+
393
+ class << self
394
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
395
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
396
+ def inherited(s); end
397
+ end
398
+ end
399
+
400
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing/describes_unsatisfied_stubbing.rb#7
401
+ class Mocktail::DescribesUnsatisfiedStubbing
402
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing/describes_unsatisfied_stubbing.rb#11
403
+ sig { void }
404
+ def initialize; end
405
+
406
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing/describes_unsatisfied_stubbing.rb#16
407
+ sig { params(dry_call: ::Mocktail::Call).returns(::Mocktail::UnsatisfyingCall) }
408
+ def describe(dry_call); end
409
+ end
410
+
411
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/determines_matching_calls.rb#6
412
+ class Mocktail::DeterminesMatchingCalls
413
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/determines_matching_calls.rb#10
414
+ sig do
415
+ params(
416
+ real_call: ::Mocktail::Call,
417
+ demo_call: ::Mocktail::Call,
418
+ demo_config: ::Mocktail::DemoConfig
419
+ ).returns(T::Boolean)
420
+ end
421
+ def determine(real_call, demo_call, demo_config); end
422
+
423
+ private
424
+
425
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/determines_matching_calls.rb#23
426
+ sig do
427
+ params(
428
+ real_args: T::Array[T.untyped],
429
+ demo_args: T::Array[T.untyped],
430
+ ignore_extra_args: T::Boolean
431
+ ).returns(T::Boolean)
432
+ end
433
+ def args_match?(real_args, demo_args, ignore_extra_args); end
434
+
435
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/determines_matching_calls.rb#50
436
+ sig do
437
+ params(
438
+ real_block: T.nilable(::Proc),
439
+ demo_block: T.nilable(::Proc),
440
+ ignore_block: T::Boolean
441
+ ).returns(T::Boolean)
442
+ end
443
+ def blocks_match?(real_block, demo_block, ignore_block); end
444
+
445
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/determines_matching_calls.rb#37
446
+ sig do
447
+ params(
448
+ real_kwargs: T::Hash[::Symbol, T.untyped],
449
+ demo_kwargs: T::Hash[::Symbol, T.untyped],
450
+ ignore_extra_args: T::Boolean
451
+ ).returns(T::Boolean)
452
+ end
453
+ def kwargs_match?(real_kwargs, demo_kwargs, ignore_extra_args); end
454
+
455
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/determines_matching_calls.rb#63
456
+ sig { params(real_arg: T.untyped, demo_arg: T.untyped).returns(T::Boolean) }
457
+ def match?(real_arg, demo_arg); end
458
+ end
459
+
460
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/double.rb#4
461
+ class Mocktail::Double < ::T::Struct
462
+ const :original_type, T.any(::Module, T::Class[T.anything])
463
+ const :dry_type, T::Class[T.anything]
464
+ const :dry_instance, ::Object
465
+ const :dry_methods, T::Array[::Symbol]
466
+
467
+ class << self
468
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
469
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
470
+ def inherited(s); end
471
+ end
472
+ end
473
+
474
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/double_data.rb#7
475
+ class Mocktail::DoubleData < ::T::Struct
476
+ include ::Mocktail::ExplanationData
477
+
478
+ const :type, T.any(::Module, T::Class[T.anything])
479
+ const :double, ::Object
480
+ const :calls, T::Array[::Mocktail::Call]
481
+ const :stubbings, T::Array[Mocktail::Stubbing[T.anything]]
482
+
483
+ class << self
484
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
485
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
486
+ def inherited(s); end
487
+ end
488
+ end
489
+
490
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#36
491
+ class Mocktail::DoubleExplanation < ::Mocktail::Explanation
492
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#41
493
+ sig { params(reference: ::Mocktail::DoubleData, message: ::String).void }
494
+ def initialize(reference, message); end
495
+
496
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#38
497
+ sig { override.returns(::Mocktail::DoubleData) }
498
+ def reference; end
499
+ end
500
+
501
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/ensures_imitation_support.rb#4
502
+ class Mocktail::EnsuresImitationSupport
503
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/ensures_imitation_support.rb#8
504
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
505
+ def ensure(type); end
506
+ end
507
+
508
+ # source://mocktail//lib/mocktail/sorbet/mocktail/errors.rb#4
509
+ class Mocktail::Error < ::StandardError; end
510
+
511
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_nils.rb#7
512
+ class Mocktail::ExplainsNils
513
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_nils.rb#11
514
+ sig { void }
515
+ def initialize; end
516
+
517
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_nils.rb#17
518
+ sig { returns(T::Array[::Mocktail::UnsatisfyingCallExplanation]) }
519
+ def explain; end
520
+ end
521
+
522
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#7
523
+ class Mocktail::ExplainsThing
524
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#11
525
+ sig { void }
526
+ def initialize; end
527
+
528
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#17
529
+ sig { params(thing: ::Object).returns(::Mocktail::Explanation) }
530
+ def explain(thing); end
531
+
532
+ private
533
+
534
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#54
535
+ sig { params(double: ::Mocktail::Double).returns(::Mocktail::DoubleData) }
536
+ def data_for_double(double); end
537
+
538
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#78
539
+ sig { params(type_replacement: ::Mocktail::TypeReplacement).returns(::Mocktail::TypeReplacementData) }
540
+ def data_for_type_replacement(type_replacement); end
541
+
542
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#106
543
+ sig do
544
+ params(
545
+ double_data: T.any(::Mocktail::DoubleData, ::Mocktail::TypeReplacementData),
546
+ method: ::Symbol
547
+ ).returns(::String)
548
+ end
549
+ def describe_dry_method(double_data, method); end
550
+
551
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#64
552
+ sig { params(double: ::Mocktail::Double).returns(::Mocktail::DoubleExplanation) }
553
+ def double_explanation(double); end
554
+
555
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#33
556
+ sig { params(thing: ::Object).returns(T.nilable(::Mocktail::FakeMethodExplanation)) }
557
+ def fake_method_explanation_for(thing); end
558
+
559
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#132
560
+ sig { params(thing: ::Object).returns(::Mocktail::NoExplanation) }
561
+ def no_explanation(thing); end
562
+
563
+ # source://mocktail//lib/mocktail/sorbet/mocktail/explains_thing.rb#92
564
+ sig { params(type_replacement: ::Mocktail::TypeReplacement).returns(::Mocktail::ReplacedTypeExplanation) }
565
+ def replaced_type_explanation(type_replacement); end
566
+ end
567
+
568
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#4
569
+ class Mocktail::Explanation
570
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#14
571
+ sig { params(reference: ::Mocktail::ExplanationData, message: ::String).void }
572
+ def initialize(reference, message); end
573
+
574
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#11
575
+ sig { returns(::String) }
576
+ def message; end
577
+
578
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#8
579
+ sig { returns(::Mocktail::ExplanationData) }
580
+ def reference; end
581
+
582
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#20
583
+ sig { returns(T.class_of(Mocktail::Explanation)) }
584
+ def type; end
585
+ end
586
+
587
+ # @abstract Subclasses must implement the `abstract` methods below.
588
+ #
589
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation_data.rb#4
590
+ module Mocktail::ExplanationData
591
+ include ::Kernel
592
+
593
+ interface!
594
+
595
+ # @abstract
596
+ #
597
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation_data.rb#12
598
+ sig { abstract.returns(T::Array[::Mocktail::Call]) }
599
+ def calls; end
600
+
601
+ # @abstract
602
+ #
603
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation_data.rb#16
604
+ sig { abstract.returns(T::Array[Mocktail::Stubbing[T.anything]]) }
605
+ def stubbings; end
606
+ end
607
+
608
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/fake_method_data.rb#4
609
+ class Mocktail::FakeMethodData < ::T::Struct
610
+ include ::Mocktail::ExplanationData
611
+
612
+ const :receiver, T.anything
613
+ const :calls, T::Array[::Mocktail::Call]
614
+ const :stubbings, T::Array[Mocktail::Stubbing[T.anything]]
615
+
616
+ class << self
617
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
618
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
619
+ def inherited(s); end
620
+ end
621
+ end
622
+
623
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#58
624
+ class Mocktail::FakeMethodExplanation < ::Mocktail::Explanation
625
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#63
626
+ sig { params(reference: ::Mocktail::FakeMethodData, message: ::String).void }
627
+ def initialize(reference, message); end
628
+
629
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#60
630
+ sig { override.returns(::Mocktail::FakeMethodData) }
631
+ def reference; end
632
+ end
633
+
634
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing/finds_satisfaction.rb#6
635
+ class Mocktail::FindsSatisfaction
636
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing/finds_satisfaction.rb#10
637
+ sig { void }
638
+ def initialize; end
639
+
640
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing/finds_satisfaction.rb#15
641
+ sig { params(dry_call: ::Mocktail::Call).returns(T.nilable(Mocktail::Stubbing[T.anything])) }
642
+ def find(dry_call); end
643
+ end
644
+
645
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/finds_verifiable_calls.rb#6
646
+ class Mocktail::FindsVerifiableCalls
647
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/finds_verifiable_calls.rb#10
648
+ sig { void }
649
+ def initialize; end
650
+
651
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/finds_verifiable_calls.rb#15
652
+ sig { params(recording: ::Mocktail::Call, demo_config: ::Mocktail::DemoConfig).returns(T::Array[::Mocktail::Call]) }
653
+ def find(recording, demo_config); end
654
+ end
655
+
656
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing.rb#7
657
+ class Mocktail::FulfillsStubbing
658
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing.rb#11
659
+ sig { void }
660
+ def initialize; end
661
+
662
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing.rb#17
663
+ sig { params(dry_call: ::Mocktail::Call).returns(T.anything) }
664
+ def fulfill(dry_call); end
665
+
666
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing.rb#28
667
+ sig { params(dry_call: ::Mocktail::Call).returns(T.nilable(Mocktail::Stubbing[T.anything])) }
668
+ def satisfaction(dry_call); end
669
+
670
+ private
671
+
672
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/fulfills_stubbing.rb#37
673
+ sig { params(dry_call: ::Mocktail::Call).void }
674
+ def store_unsatisfying_call!(dry_call); end
675
+ end
676
+
677
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error/gathers_calls_of_method.rb#4
678
+ class Mocktail::GathersCallsOfMethod
679
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error/gathers_calls_of_method.rb#8
680
+ sig { params(dry_call: ::Mocktail::Call).returns(T::Array[::Mocktail::Call]) }
681
+ def gather(dry_call); end
682
+ end
683
+
684
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/gathers_fakeable_instance_methods.rb#4
685
+ class Mocktail::GathersFakeableInstanceMethods
686
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/gathers_fakeable_instance_methods.rb#8
687
+ sig { params(type: T.any(::Module, T::Class[T.anything])).returns(T::Array[::Symbol]) }
688
+ def gather(type); end
689
+
690
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/gathers_fakeable_instance_methods.rb#19
691
+ sig { params(type: T.any(::Module, T::Class[T.anything]), method_name: ::Symbol).returns(T::Boolean) }
692
+ def ignore?(type, method_name); end
693
+
694
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/gathers_fakeable_instance_methods.rb#24
695
+ sig { returns(T::Array[::Module]) }
696
+ def ignored_ancestors; end
697
+ end
698
+
699
+ # source://mocktail//lib/mocktail/sorbet/mocktail/grabs_original_method_parameters.rb#4
700
+ class Mocktail::GrabsOriginalMethodParameters
701
+ # Sorbet wraps the original method in a sig wrapper, so we need to unwrap it.
702
+ # The value returned from `owner.instance_method(method_name)` does not have
703
+ # the real parameters values available, as they'll have been erased
704
+ #
705
+ # If the method isn't wrapped by Sorbet, this will return the #instance_method,
706
+ # per usual
707
+ #
708
+ # source://mocktail//lib/mocktail/sorbet/mocktail/grabs_original_method_parameters.rb#14
709
+ # Sorbet wraps the original method in a sig wrapper, so we need to unwrap it.
710
+ # The value returned from `owner.instance_method(method_name)` does not have
711
+ # the real parameters values available, as they'll have been erased
712
+ # If the method isn't wrapped by Sorbet, this will return the #instance_method,
713
+ sig { params(method: T.nilable(T.any(::Method, ::UnboundMethod))).returns(T::Array[T::Array[::Symbol]]) }
714
+ def grab(method); end
715
+
716
+ private
717
+
718
+ # source://mocktail//lib/mocktail/sorbet/mocktail/grabs_original_method_parameters.rb#27
719
+ sig { params(method: T.any(::Method, ::UnboundMethod)).returns(T.nilable(::T::Private::Methods::Signature)) }
720
+ def sorbet_wrapped_method(method); end
721
+ end
722
+
723
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call.rb#8
724
+ class Mocktail::HandlesDryCall
725
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call.rb#12
726
+ sig { void }
727
+ def initialize; end
728
+
729
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call.rb#19
730
+ sig { params(dry_call: ::Mocktail::Call).returns(T.anything) }
731
+ def handle(dry_call); end
732
+ end
733
+
734
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_new_call.rb#4
735
+ class Mocktail::HandlesDryNewCall
736
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_new_call.rb#8
737
+ sig { void }
738
+ def initialize; end
739
+
740
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_new_call.rb#16
741
+ sig do
742
+ params(
743
+ type: T::Class[T.all(::Object, ::T)],
744
+ args: T::Array[T.anything],
745
+ kwargs: T::Hash[::Symbol, T.anything],
746
+ block: T.nilable(::Proc)
747
+ ).returns(T.anything)
748
+ end
749
+ def handle(type, args, kwargs, block); end
750
+ end
751
+
752
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type.rb#7
753
+ class Mocktail::ImitatesType
754
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type.rb#12
755
+ sig { void }
756
+ def initialize; end
757
+
758
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type.rb#22
759
+ sig do
760
+ type_parameters(:T)
761
+ .params(
762
+ type: T::Class[T.all(::Object, T.type_parameter(:T))]
763
+ ).returns(T.all(::Object, T.type_parameter(:T)))
764
+ end
765
+ def imitate(type); end
766
+ end
767
+
768
+ # source://mocktail//lib/mocktail/sorbet/mocktail/initializes_mocktail.rb#4
769
+ class Mocktail::InitializesMocktail
770
+ # source://mocktail//lib/mocktail/sorbet/mocktail/initializes_mocktail.rb#8
771
+ sig { void }
772
+ def init; end
773
+ end
774
+
775
+ # source://mocktail//lib/mocktail/sorbet/mocktail/errors.rb#14
776
+ class Mocktail::InvalidMatcherError < ::Mocktail::Error; end
777
+
778
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/logs_call.rb#4
779
+ class Mocktail::LogsCall
780
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/logs_call.rb#8
781
+ sig { params(dry_call: ::Mocktail::Call).void }
782
+ def log(dry_call); end
783
+ end
784
+
785
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double.rb#7
786
+ class Mocktail::MakesDouble
787
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double.rb#11
788
+ sig { void }
789
+ def initialize; end
790
+
791
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double.rb#17
792
+ sig { params(type: T::Class[::Object]).returns(::Mocktail::Double) }
793
+ def make(type); end
794
+ end
795
+
796
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matcher_presentation.rb#4
797
+ class Mocktail::MatcherPresentation
798
+ sig { returns(T.untyped) }
799
+ def any; end
800
+
801
+ sig { type_parameters(:T).params(expecteds: T.type_parameter(:T)).returns(T::Array[T.type_parameter(:T)]) }
802
+ def includes(*expecteds); end
803
+
804
+ sig do
805
+ type_parameters(:K, :V)
806
+ .params(
807
+ expecteds: T::Hash[T.type_parameter(:K), T.type_parameter(:V)]
808
+ ).returns(T::Hash[T.type_parameter(:K), T.type_parameter(:V)])
809
+ end
810
+ def includes_hash(*expecteds); end
811
+
812
+ sig do
813
+ type_parameters(:K, :V)
814
+ .params(
815
+ expecteds: T.type_parameter(:K)
816
+ ).returns(T::Hash[T.type_parameter(:K), T.type_parameter(:V)])
817
+ end
818
+ def includes_key(*expecteds); end
819
+
820
+ sig { type_parameters(:T).params(expecteds: T.type_parameter(:T)).returns(T.type_parameter(:T)) }
821
+ def includes_string(*expecteds); end
822
+
823
+ sig { type_parameters(:T).params(expected: T::Class[T.type_parameter(:T)]).returns(T.type_parameter(:T)) }
824
+ def is_a(expected); end
825
+
826
+ sig { params(pattern: T.any(String, Regexp)).returns(String) }
827
+ def matches(pattern); end
828
+
829
+ # standard:disable Style/ArgumentsForwarding
830
+ #
831
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matcher_presentation.rb#13
832
+ sig { params(name: ::Symbol, args: T.anything, kwargs: T.anything, blk: T.nilable(::Proc)).returns(T.anything) }
833
+ def method_missing(name, *args, **kwargs, &blk); end
834
+
835
+ sig { type_parameters(:T).params(unexpected: T.type_parameter(:T)).returns(T.type_parameter(:T)) }
836
+ def not(unexpected); end
837
+
838
+ sig { returns(T.untyped) }
839
+ def numeric; end
840
+
841
+ sig { params(blk: T.proc.params(arg: T.untyped).returns(T::Boolean)).returns(T.untyped) }
842
+ def that(&blk); end
843
+
844
+ private
845
+
846
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matcher_presentation.rb#8
847
+ sig { params(name: ::Symbol, include_private: T::Boolean).returns(T::Boolean) }
848
+ def respond_to_missing?(name, include_private = T.unsafe(nil)); end
849
+ end
850
+
851
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/matcher_registry.rb#4
852
+ class Mocktail::MatcherRegistry
853
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/matcher_registry.rb#13
854
+ sig { void }
855
+ def initialize; end
856
+
857
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/matcher_registry.rb#18
858
+ sig { params(matcher_type: T.class_of(Mocktail::Matchers::Base)).void }
859
+ def add(matcher_type); end
860
+
861
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/matcher_registry.rb#23
862
+ sig { params(name: ::Symbol).returns(T.nilable(T.class_of(Mocktail::Matchers::Base))) }
863
+ def get(name); end
864
+
865
+ class << self
866
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/matcher_registry.rb#8
867
+ sig { returns(::Mocktail::MatcherRegistry) }
868
+ def instance; end
869
+ end
870
+ end
871
+
872
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers.rb#4
873
+ module Mocktail::Matchers; end
874
+
875
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/any.rb#4
876
+ class Mocktail::Matchers::Any < ::Mocktail::Matchers::Base
877
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/any.rb#13
878
+ sig { void }
879
+ def initialize; end
880
+
881
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/any.rb#23
882
+ sig { returns(::String) }
883
+ def inspect; end
884
+
885
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/any.rb#18
886
+ sig { params(actual: T.anything).returns(T::Boolean) }
887
+ def match?(actual); end
888
+
889
+ class << self
890
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/any.rb#8
891
+ sig { returns(::Symbol) }
892
+ def matcher_name; end
893
+ end
894
+ end
895
+
896
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
897
+ #
898
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/base.rb#4
899
+ class Mocktail::Matchers::Base
900
+ # Custom matchers can receive any args, kwargs, or block they want. Usually
901
+ # single-argument, though, so that's defaulted here and in #insepct
902
+ #
903
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/base.rb#15
904
+ # Custom matchers can receive any args, kwargs, or block they want. Usually
905
+ sig { params(expected: ::BasicObject).void }
906
+ def initialize(expected); end
907
+
908
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/base.rb#30
909
+ sig { returns(::String) }
910
+ def inspect; end
911
+
912
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/base.rb#35
913
+ sig { returns(::TrueClass) }
914
+ def is_mocktail_matcher?; end
915
+
916
+ # @raise [Mocktail::InvalidMatcherError]
917
+ #
918
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/base.rb#25
919
+ sig { params(actual: T.untyped).returns(T::Boolean) }
920
+ def match?(actual); end
921
+
922
+ class << self
923
+ # @raise [Mocktail::InvalidMatcherError]
924
+ #
925
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/base.rb#20
926
+ sig { returns(::Symbol) }
927
+ def matcher_name; end
928
+ end
929
+ end
930
+
931
+ # Captors are conceptually complex implementations, but with a simple usage/purpose:
932
+ # They are values the user can create and hold onto that will return a matcher
933
+ # and then "capture" the value made by the real call, for later analysis & assertion.
934
+ #
935
+ # Unlike other matchers, these don't make any useful sense for stubbing, but are
936
+ # very useful when asserting complication call verifications
937
+ #
938
+ # The fact the user will need the reference outside the verification call is
939
+ # why this is a top-level method on Mocktail, and not included in the |m| block
940
+ # arg to stubs/verify
941
+ #
942
+ # See Mockito, which is the earliest implementation I know of:
943
+ # https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Captor.html
944
+ #
945
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#17
946
+ # Captors are conceptually complex implementations, but with a simple usage/purpose:
947
+ # They are values the user can create and hold onto that will return a matcher
948
+ # and then "capture" the value made by the real call, for later analysis & assertion.
949
+ # Unlike other matchers, these don't make any useful sense for stubbing, but are
950
+ # very useful when asserting complication call verifications
951
+ # The fact the user will need the reference outside the verification call is
952
+ # why this is a top-level method on Mocktail, and not included in the |m| block
953
+ # arg to stubs/verify
954
+ # See Mockito, which is the earliest implementation I know of:
955
+ class Mocktail::Matchers::Captor
956
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#62
957
+ sig { void }
958
+ def initialize; end
959
+
960
+ # This T.untyped is intentional. Even though a Capture is surely returned,
961
+ # in order for a verification demonstration to pass its own type check,
962
+ # it needs to think it's being returned whatever parameter is expected
963
+ #
964
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#59
965
+ # This T.untyped is intentional. Even though a Capture is surely returned,
966
+ # in order for a verification demonstration to pass its own type check,
967
+ sig { returns(T.untyped) }
968
+ def capture; end
969
+
970
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#67
971
+ sig { returns(T::Boolean) }
972
+ def captured?; end
973
+
974
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#72
975
+ sig { returns(T.untyped) }
976
+ def value; end
977
+ end
978
+
979
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#20
980
+ class Mocktail::Matchers::Captor::Capture < ::Mocktail::Matchers::Base
981
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#32
982
+ sig { void }
983
+ def initialize; end
984
+
985
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#45
986
+ sig { returns(T::Boolean) }
987
+ def captured?; end
988
+
989
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#50
990
+ sig { returns(::String) }
991
+ def inspect; end
992
+
993
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#38
994
+ sig { params(actual: T.untyped).returns(::TrueClass) }
995
+ def match?(actual); end
996
+
997
+ # Returns the value of attribute value.
998
+ #
999
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#29
1000
+ sig { returns(T.untyped) }
1001
+ def value; end
1002
+
1003
+ class << self
1004
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/captor.rb#24
1005
+ sig { returns(::Symbol) }
1006
+ def matcher_name; end
1007
+ end
1008
+ end
1009
+
1010
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes.rb#4
1011
+ class Mocktail::Matchers::Includes < ::Mocktail::Matchers::Base
1012
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes.rb#13
1013
+ sig { params(expecteds: T.untyped).void }
1014
+ def initialize(*expecteds); end
1015
+
1016
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes.rb#28
1017
+ sig { returns(::String) }
1018
+ def inspect; end
1019
+
1020
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes.rb#18
1021
+ sig { params(actual: T.untyped).returns(T::Boolean) }
1022
+ def match?(actual); end
1023
+
1024
+ class << self
1025
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes.rb#8
1026
+ sig { returns(::Symbol) }
1027
+ def matcher_name; end
1028
+ end
1029
+ end
1030
+
1031
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes_hash.rb#4
1032
+ class Mocktail::Matchers::IncludesHash < ::Mocktail::Matchers::Includes
1033
+ class << self
1034
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes_hash.rb#8
1035
+ sig { returns(::Symbol) }
1036
+ def matcher_name; end
1037
+ end
1038
+ end
1039
+
1040
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes_key.rb#4
1041
+ class Mocktail::Matchers::IncludesKey < ::Mocktail::Matchers::Includes
1042
+ class << self
1043
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes_key.rb#8
1044
+ sig { returns(::Symbol) }
1045
+ def matcher_name; end
1046
+ end
1047
+ end
1048
+
1049
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes_string.rb#4
1050
+ class Mocktail::Matchers::IncludesString < ::Mocktail::Matchers::Includes
1051
+ class << self
1052
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/includes_string.rb#8
1053
+ sig { returns(::Symbol) }
1054
+ def matcher_name; end
1055
+ end
1056
+ end
1057
+
1058
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/is_a.rb#4
1059
+ class Mocktail::Matchers::IsA < ::Mocktail::Matchers::Base
1060
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/is_a.rb#13
1061
+ sig { params(actual: T.untyped).returns(T::Boolean) }
1062
+ def match?(actual); end
1063
+
1064
+ class << self
1065
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/is_a.rb#8
1066
+ sig { returns(::Symbol) }
1067
+ def matcher_name; end
1068
+ end
1069
+ end
1070
+
1071
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/matches.rb#4
1072
+ class Mocktail::Matchers::Matches < ::Mocktail::Matchers::Base
1073
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/matches.rb#13
1074
+ sig { params(actual: T.untyped).returns(T::Boolean) }
1075
+ def match?(actual); end
1076
+
1077
+ class << self
1078
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/matches.rb#8
1079
+ sig { returns(::Symbol) }
1080
+ def matcher_name; end
1081
+ end
1082
+ end
1083
+
1084
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/not.rb#4
1085
+ class Mocktail::Matchers::Not < ::Mocktail::Matchers::Base
1086
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/not.rb#13
1087
+ sig { params(actual: T.untyped).returns(T::Boolean) }
1088
+ def match?(actual); end
1089
+
1090
+ class << self
1091
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/not.rb#8
1092
+ sig { returns(::Symbol) }
1093
+ def matcher_name; end
1094
+ end
1095
+ end
1096
+
1097
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/numeric.rb#4
1098
+ class Mocktail::Matchers::Numeric < ::Mocktail::Matchers::Base
1099
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/numeric.rb#13
1100
+ sig { void }
1101
+ def initialize; end
1102
+
1103
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/numeric.rb#23
1104
+ sig { returns(::String) }
1105
+ def inspect; end
1106
+
1107
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/numeric.rb#18
1108
+ sig { params(actual: T.untyped).returns(T::Boolean) }
1109
+ def match?(actual); end
1110
+
1111
+ class << self
1112
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/numeric.rb#8
1113
+ sig { returns(::Symbol) }
1114
+ def matcher_name; end
1115
+ end
1116
+ end
1117
+
1118
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/that.rb#4
1119
+ class Mocktail::Matchers::That < ::Mocktail::Matchers::Base
1120
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/that.rb#13
1121
+ sig { params(blk: T.nilable(T.proc.params(actual: T.untyped).returns(T.untyped))).void }
1122
+ def initialize(&blk); end
1123
+
1124
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/that.rb#28
1125
+ sig { returns(::String) }
1126
+ def inspect; end
1127
+
1128
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/that.rb#21
1129
+ sig { params(actual: T.untyped).returns(T::Boolean) }
1130
+ def match?(actual); end
1131
+
1132
+ class << self
1133
+ # source://mocktail//lib/mocktail/sorbet/mocktail/matchers/that.rb#8
1134
+ sig { returns(::Symbol) }
1135
+ def matcher_name; end
1136
+ end
1137
+ end
1138
+
1139
+ # source://mocktail//lib/mocktail/sorbet/mocktail/errors.rb#10
1140
+ class Mocktail::MissingDemonstrationError < ::Mocktail::Error; end
1141
+
1142
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#25
1143
+ class Mocktail::NoExplanation < ::Mocktail::Explanation
1144
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#30
1145
+ sig { params(reference: ::Mocktail::NoExplanationData, message: ::String).void }
1146
+ def initialize(reference, message); end
1147
+
1148
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#27
1149
+ sig { override.returns(::Mocktail::NoExplanationData) }
1150
+ def reference; end
1151
+ end
1152
+
1153
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/no_explanation_data.rb#4
1154
+ class Mocktail::NoExplanationData < ::T::Struct
1155
+ include ::Mocktail::ExplanationData
1156
+
1157
+ const :thing, ::Object
1158
+
1159
+ # @raise [Error]
1160
+ #
1161
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/no_explanation_data.rb#11
1162
+ sig { override.returns(T::Array[::Mocktail::Call]) }
1163
+ def calls; end
1164
+
1165
+ # @raise [Error]
1166
+ #
1167
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/no_explanation_data.rb#16
1168
+ sig { override.returns(T::Array[Mocktail::Stubbing[T.anything]]) }
1169
+ def stubbings; end
1170
+
1171
+ class << self
1172
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
1173
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
1174
+ def inherited(s); end
1175
+ end
1176
+ end
1177
+
1178
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/signature.rb#4
1179
+ class Mocktail::Params < ::T::Struct
1180
+ prop :all, T::Array[::Symbol], default: T.unsafe(nil)
1181
+ prop :required, T::Array[::Symbol], default: T.unsafe(nil)
1182
+ prop :optional, T::Array[::Symbol], default: T.unsafe(nil)
1183
+ prop :rest, T.nilable(::Symbol)
1184
+
1185
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/signature.rb#13
1186
+ sig { returns(T::Array[::Symbol]) }
1187
+ def allowed; end
1188
+
1189
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/signature.rb#18
1190
+ sig { returns(T::Boolean) }
1191
+ def rest?; end
1192
+
1193
+ class << self
1194
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
1195
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
1196
+ def inherited(s); end
1197
+ end
1198
+ end
1199
+
1200
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#8
1201
+ class Mocktail::RaisesNeatoNoMethodError
1202
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#12
1203
+ sig { void }
1204
+ def initialize; end
1205
+
1206
+ # @raise [NoMethodError]
1207
+ #
1208
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#19
1209
+ sig { params(call: ::Mocktail::Call).void }
1210
+ def call(call); end
1211
+
1212
+ private
1213
+
1214
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#63
1215
+ sig { params(block: T.nilable(::Proc)).returns(T.nilable(::String)) }
1216
+ def block_param(block); end
1217
+
1218
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#81
1219
+ sig { params(call: ::Mocktail::Call).returns(T.nilable(::String)) }
1220
+ def corrections(call); end
1221
+
1222
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#70
1223
+ sig { params(identifiers: T::Array[::String]).returns(T::Array[::String]) }
1224
+ def count_repeats(identifiers); end
1225
+
1226
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#56
1227
+ sig { params(kwargs: T::Hash[::Symbol, T.anything]).returns(T.nilable(::String)) }
1228
+ def kwparams_list(kwargs); end
1229
+
1230
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#36
1231
+ sig { params(call: ::Mocktail::Call).returns(T.nilable(::String)) }
1232
+ def params(call); end
1233
+
1234
+ # source://mocktail//lib/mocktail/sorbet/mocktail/raises_neato_no_method_error.rb#47
1235
+ sig { params(args: T::Array[T.anything]).returns(T.nilable(::String)) }
1236
+ def params_list(args); end
1237
+ end
1238
+
1239
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error.rb#8
1240
+ class Mocktail::RaisesVerificationError
1241
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error.rb#12
1242
+ sig { void }
1243
+ def initialize; end
1244
+
1245
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error.rb#19
1246
+ sig do
1247
+ params(
1248
+ recording: ::Mocktail::Call,
1249
+ verifiable_calls: T::Array[::Mocktail::Call],
1250
+ demo_config: ::Mocktail::DemoConfig
1251
+ ).void
1252
+ end
1253
+ def raise(recording, verifiable_calls, demo_config); end
1254
+
1255
+ private
1256
+
1257
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error.rb#50
1258
+ sig do
1259
+ params(
1260
+ recording: ::Mocktail::Call,
1261
+ verifiable_calls: T::Array[::Mocktail::Call],
1262
+ demo_config: ::Mocktail::DemoConfig
1263
+ ).returns(T.nilable(::String))
1264
+ end
1265
+ def describe_other_calls(recording, verifiable_calls, demo_config); end
1266
+
1267
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error.rb#39
1268
+ sig { params(demo_config: ::Mocktail::DemoConfig, count: ::Integer).returns(T.nilable(::String)) }
1269
+ def describe_verifiable_times_called(demo_config, count); end
1270
+
1271
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call/raises_verification_error.rb#66
1272
+ sig { params(s: ::String, count: T.nilable(::Integer)).returns(::String) }
1273
+ def pl(s, count); end
1274
+ end
1275
+
1276
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/reconciles_args_with_params.rb#4
1277
+ class Mocktail::ReconcilesArgsWithParams
1278
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/reconciles_args_with_params.rb#8
1279
+ sig { params(signature: ::Mocktail::Signature).returns(T::Boolean) }
1280
+ def reconcile(signature); end
1281
+
1282
+ private
1283
+
1284
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/reconciles_args_with_params.rb#16
1285
+ sig { params(arg_params: ::Mocktail::Params, args: T::Array[T.untyped]).returns(T::Boolean) }
1286
+ def args_match?(arg_params, args); end
1287
+
1288
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/reconciles_args_with_params.rb#22
1289
+ sig { params(kwarg_params: ::Mocktail::Params, kwargs: T::Hash[::Symbol, T.untyped]).returns(T::Boolean) }
1290
+ def kwargs_match?(kwarg_params, kwargs); end
1291
+ end
1292
+
1293
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class/reconstructs_call.rb#4
1294
+ class Mocktail::ReconstructsCall
1295
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class/reconstructs_call.rb#19
1296
+ sig do
1297
+ params(
1298
+ double: ::Object,
1299
+ call_binding: ::Binding,
1300
+ default_args: T.nilable(T::Hash[::Symbol, T.anything]),
1301
+ dry_class: T::Class[::Object],
1302
+ type: T.any(::Module, T::Class[T.anything]),
1303
+ method: ::Symbol,
1304
+ original_method: T.any(::Method, ::UnboundMethod),
1305
+ signature: ::Mocktail::Signature
1306
+ ).returns(::Mocktail::Call)
1307
+ end
1308
+ def reconstruct(double:, call_binding:, default_args:, dry_class:, type:, method:, original_method:, signature:); end
1309
+
1310
+ private
1311
+
1312
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class/reconstructs_call.rb#39
1313
+ sig do
1314
+ params(
1315
+ signature: ::Mocktail::Signature,
1316
+ call_binding: ::Binding,
1317
+ default_args: T.nilable(T::Hash[::Symbol, T.anything])
1318
+ ).returns(T::Array[T.anything])
1319
+ end
1320
+ def args_for(signature, call_binding, default_args); end
1321
+
1322
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class/reconstructs_call.rb#52
1323
+ sig do
1324
+ params(
1325
+ signature: ::Mocktail::Signature,
1326
+ call_binding: ::Binding,
1327
+ default_args: T.nilable(T::Hash[::Symbol, T.anything])
1328
+ ).returns(T::Hash[::Symbol, T.anything])
1329
+ end
1330
+ def kwargs_for(signature, call_binding, default_args); end
1331
+
1332
+ # source://mocktail//lib/mocktail/sorbet/mocktail/imitates_type/makes_double/declares_dry_class/reconstructs_call.rb#62
1333
+ sig do
1334
+ params(
1335
+ params: ::Mocktail::Params,
1336
+ default_args: T.nilable(T::Hash[::Symbol, T.anything])
1337
+ ).returns([T::Array[::Symbol], T.nilable(::Symbol)])
1338
+ end
1339
+ def non_default_args(params, default_args); end
1340
+ end
1341
+
1342
+ # source://mocktail//lib/mocktail/sorbet/mocktail/records_demonstration.rb#4
1343
+ class Mocktail::RecordsDemonstration
1344
+ # source://mocktail//lib/mocktail/sorbet/mocktail/records_demonstration.rb#14
1345
+ sig do
1346
+ type_parameters(:T)
1347
+ .params(
1348
+ demonstration: T.proc.params(matchers: ::Mocktail::MatcherPresentation).returns(T.type_parameter(:T)),
1349
+ demo_config: ::Mocktail::DemoConfig
1350
+ ).returns(::Mocktail::Call)
1351
+ end
1352
+ def record(demonstration, demo_config); end
1353
+ end
1354
+
1355
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/recreates_message.rb#4
1356
+ class Mocktail::RecreatesMessage
1357
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/recreates_message.rb#8
1358
+ sig { params(signature: ::Mocktail::Signature).returns(::String) }
1359
+ def recreate(signature); end
1360
+ end
1361
+
1362
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/redefines_new.rb#4
1363
+ class Mocktail::RedefinesNew
1364
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/redefines_new.rb#8
1365
+ sig { void }
1366
+ def initialize; end
1367
+
1368
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/redefines_new.rb#13
1369
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
1370
+ def redefine(type); end
1371
+ end
1372
+
1373
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/redefines_singleton_methods.rb#4
1374
+ class Mocktail::RedefinesSingletonMethods
1375
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/redefines_singleton_methods.rb#8
1376
+ sig { void }
1377
+ def initialize; end
1378
+
1379
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/redefines_singleton_methods.rb#47
1380
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
1381
+ def declare_singleton_method_missing_errors!(type); end
1382
+
1383
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/redefines_singleton_methods.rb#13
1384
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
1385
+ def redefine(type); end
1386
+
1387
+ private
1388
+
1389
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/redefines_singleton_methods.rb#72
1390
+ sig { params(method: ::Method).returns(T::Boolean) }
1391
+ def sorbet_method_hook?(method); end
1392
+ end
1393
+
1394
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_matcher.rb#4
1395
+ class Mocktail::RegistersMatcher
1396
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_matcher.rb#8
1397
+ sig { void }
1398
+ def initialize; end
1399
+
1400
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_matcher.rb#13
1401
+ sig { params(matcher_type: T.class_of(Mocktail::Matchers::Base)).void }
1402
+ def register(matcher_type); end
1403
+
1404
+ private
1405
+
1406
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_matcher.rb#59
1407
+ sig { params(matcher_type: T.class_of(Mocktail::Matchers::Base)).returns(T::Boolean) }
1408
+ def invalid_flag?(matcher_type); end
1409
+
1410
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_matcher.rb#51
1411
+ sig { params(matcher_type: T.class_of(Mocktail::Matchers::Base)).returns(T::Boolean) }
1412
+ def invalid_match?(matcher_type); end
1413
+
1414
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_matcher.rb#43
1415
+ sig { params(matcher_type: T.class_of(Mocktail::Matchers::Base)).returns(T::Boolean) }
1416
+ def invalid_name?(matcher_type); end
1417
+
1418
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_matcher.rb#38
1419
+ sig { params(matcher_type: T.class_of(Mocktail::Matchers::Base)).returns(T::Boolean) }
1420
+ def invalid_type?(matcher_type); end
1421
+ end
1422
+
1423
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_stubbing.rb#6
1424
+ class Mocktail::RegistersStubbing
1425
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_stubbing.rb#10
1426
+ sig { void }
1427
+ def initialize; end
1428
+
1429
+ # source://mocktail//lib/mocktail/sorbet/mocktail/registers_stubbing.rb#21
1430
+ sig do
1431
+ type_parameters(:T)
1432
+ .params(
1433
+ demonstration: T.proc.params(matchers: ::Mocktail::MatcherPresentation).returns(T.type_parameter(:T)),
1434
+ demo_config: ::Mocktail::DemoConfig
1435
+ ).returns(Mocktail::Stubbing[T.type_parameter(:T)])
1436
+ end
1437
+ def register(demonstration, demo_config); end
1438
+ end
1439
+
1440
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#47
1441
+ class Mocktail::ReplacedTypeExplanation < ::Mocktail::Explanation
1442
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#52
1443
+ sig { params(reference: ::Mocktail::TypeReplacementData, message: ::String).void }
1444
+ def initialize(reference, message); end
1445
+
1446
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/explanation.rb#49
1447
+ sig { override.returns(::Mocktail::TypeReplacementData) }
1448
+ def reference; end
1449
+ end
1450
+
1451
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_next.rb#4
1452
+ class Mocktail::ReplacesNext
1453
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_next.rb#8
1454
+ sig { void }
1455
+ def initialize; end
1456
+
1457
+ # @raise [UnsupportedMocktail]
1458
+ #
1459
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_next.rb#28
1460
+ sig do
1461
+ type_parameters(:T)
1462
+ .params(
1463
+ type: T::Class[T.all(::Object, T.type_parameter(:T))],
1464
+ count: ::Integer
1465
+ ).returns(T::Array[T.type_parameter(:T)])
1466
+ end
1467
+ def replace(type, count); end
1468
+
1469
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_next.rb#19
1470
+ sig do
1471
+ type_parameters(:T)
1472
+ .params(
1473
+ type: T::Class[T.all(::Object, T.type_parameter(:T))]
1474
+ ).returns(T.type_parameter(:T))
1475
+ end
1476
+ def replace_once(type); end
1477
+ end
1478
+
1479
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type.rb#8
1480
+ class Mocktail::ReplacesType
1481
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type.rb#12
1482
+ sig { void }
1483
+ def initialize; end
1484
+
1485
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type.rb#20
1486
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
1487
+ def replace(type); end
1488
+ end
1489
+
1490
+ # source://mocktail//lib/mocktail/sorbet/mocktail/resets_state.rb#4
1491
+ class Mocktail::ResetsState
1492
+ # source://mocktail//lib/mocktail/sorbet/mocktail/resets_state.rb#8
1493
+ sig { void }
1494
+ def reset; end
1495
+ end
1496
+
1497
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/runs_sorbet_sig_blocks_before_replacement.rb#4
1498
+ class Mocktail::RunsSorbetSigBlocksBeforeReplacement
1499
+ # This is necessary because when Sorbet runs a sig block of a singleton
1500
+ # method, it has the net effect of unwrapping/redefining the method. If
1501
+ # we try to use Mocktail.replace(Foo) and Foo.bar has a Sorbet sig block,
1502
+ # then we'll end up with three "versions" of the same method and no way
1503
+ # to keep straight which one == which:
1504
+ #
1505
+ # A - Foo.bar, as defined in the original class
1506
+ # B - Foo.bar, as redefined by RedefinesSingletonMethods
1507
+ # C - Foo.bar, as wrapped by sorbet-runtime
1508
+ #
1509
+ # Initially, Foo.method(:bar) would == C, but after the type
1510
+ # replacement, it would == B (with a reference back to C as the original),
1511
+ # but after handling a single dry call, our invocation of
1512
+ # GrabsOriginalMethodParameters.grab(Foo.method(:bar)) would invoke the
1513
+ # Sorbet `sig` block, which has the net effect of redefining the method back
1514
+ # to A.
1515
+ #
1516
+ # It's very fun and confusing and a great time.
1517
+ #
1518
+ # source://mocktail//lib/mocktail/sorbet/mocktail/replaces_type/runs_sorbet_sig_blocks_before_replacement.rb#26
1519
+ # This is necessary because when Sorbet runs a sig block of a singleton
1520
+ # method, it has the net effect of unwrapping/redefining the method. If
1521
+ # we try to use Mocktail.replace(Foo) and Foo.bar has a Sorbet sig block,
1522
+ # then we'll end up with three "versions" of the same method and no way
1523
+ # to keep straight which one == which:
1524
+ # A - Foo.bar, as defined in the original class
1525
+ # B - Foo.bar, as redefined by RedefinesSingletonMethods
1526
+ # C - Foo.bar, as wrapped by sorbet-runtime
1527
+ # Initially, Foo.method(:bar) would == C, but after the type
1528
+ # replacement, it would == B (with a reference back to C as the original),
1529
+ # but after handling a single dry call, our invocation of
1530
+ # GrabsOriginalMethodParameters.grab(Foo.method(:bar)) would invoke the
1531
+ # Sorbet `sig` block, which has the net effect of redefining the method back
1532
+ # to A.
1533
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
1534
+ def run(type); end
1535
+ end
1536
+
1537
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/signature.rb#23
1538
+ class Mocktail::Signature < ::T::Struct
1539
+ const :positional_params, ::Mocktail::Params
1540
+ const :positional_args, T::Array[T.anything]
1541
+ const :keyword_params, ::Mocktail::Params
1542
+ const :keyword_args, T::Hash[::Symbol, T.anything]
1543
+ const :block_param, T.nilable(::Symbol)
1544
+ const :block_arg, T.nilable(::Proc), default: T.unsafe(nil)
1545
+
1546
+ class << self
1547
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
1548
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
1549
+ def inherited(s); end
1550
+ end
1551
+ end
1552
+
1553
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/signature.rb#33
1554
+ Mocktail::Signature::DEFAULT_BLOCK_PARAM = T.let(T.unsafe(nil), String)
1555
+
1556
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/signature.rb#31
1557
+ Mocktail::Signature::DEFAULT_REST_ARGS = T.let(T.unsafe(nil), String)
1558
+
1559
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/signature.rb#32
1560
+ Mocktail::Signature::DEFAULT_REST_KWARGS = T.let(T.unsafe(nil), String)
1561
+
1562
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error.rb#10
1563
+ class Mocktail::SimulatesArgumentError
1564
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error.rb#14
1565
+ sig { void }
1566
+ def initialize; end
1567
+
1568
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error.rb#23
1569
+ sig { params(dry_call: ::Mocktail::Call).returns(T.nilable(::ArgumentError)) }
1570
+ def simulate(dry_call); end
1571
+ end
1572
+
1573
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#4
1574
+ class Mocktail::StringifiesCall
1575
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#8
1576
+ sig { params(call: ::Mocktail::Call, anonymous_blocks: T::Boolean, always_parens: T::Boolean).returns(::String) }
1577
+ def stringify(call, anonymous_blocks: T.unsafe(nil), always_parens: T.unsafe(nil)); end
1578
+
1579
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#13
1580
+ sig do
1581
+ params(
1582
+ calls: T::Array[::Mocktail::Call],
1583
+ nonzero_message: ::String,
1584
+ zero_message: ::String,
1585
+ anonymous_blocks: T::Boolean,
1586
+ always_parens: T::Boolean
1587
+ ).returns(::String)
1588
+ end
1589
+ def stringify_multiple(calls, nonzero_message:, zero_message:, anonymous_blocks: T.unsafe(nil), always_parens: T.unsafe(nil)); end
1590
+
1591
+ private
1592
+
1593
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#46
1594
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#47
1595
+ sig { params(args: T::Array[::Object]).returns(T.nilable(::String)) }
1596
+ def argify(args); end
1597
+
1598
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#29
1599
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#30
1600
+ sig { params(call: ::Mocktail::Call, parens: T::Boolean).returns(T.nilable(::String)) }
1601
+ def args_to_s(call, parens: T.unsafe(nil)); end
1602
+
1603
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#64
1604
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#65
1605
+ sig { params(block: T.nilable(::Proc), anonymous: T::Boolean).returns(T.nilable(::String)) }
1606
+ def blockify(block, anonymous:); end
1607
+
1608
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#52
1609
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#53
1610
+ sig { params(kwargs: T::Hash[::Symbol, ::Object]).returns(T.nilable(::String)) }
1611
+ def kwargify(kwargs); end
1612
+
1613
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#58
1614
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#59
1615
+ sig { params(block: T.nilable(::Proc)).returns(T.nilable(::String)) }
1616
+ def lambdafy(block); end
1617
+
1618
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#75
1619
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#76
1620
+ sig { params(block: ::Proc).returns(::String) }
1621
+ def source_locationify(block); end
1622
+
1623
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#80
1624
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_call.rb#81
1625
+ sig { params(path: ::String).returns(::String) }
1626
+ def strip_pwd(path); end
1627
+ end
1628
+
1629
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_method_name.rb#4
1630
+ class Mocktail::StringifiesMethodName
1631
+ # source://mocktail//lib/mocktail/sorbet/mocktail/share/stringifies_method_name.rb#8
1632
+ sig { params(call: ::Mocktail::Call).returns(::String) }
1633
+ def stringify(call); end
1634
+ end
1635
+
1636
+ # source://mocktail//lib/mocktail/sorbet/mocktail/stringifies_method_signature.rb#4
1637
+ class Mocktail::StringifiesMethodSignature
1638
+ # source://mocktail//lib/mocktail/sorbet/mocktail/stringifies_method_signature.rb#8
1639
+ sig { params(signature: ::Mocktail::Signature).returns(::String) }
1640
+ def stringify(signature); end
1641
+
1642
+ private
1643
+
1644
+ # source://mocktail//lib/mocktail/sorbet/mocktail/stringifies_method_signature.rb#45
1645
+ sig { params(signature: ::Mocktail::Signature).returns(::String) }
1646
+ def block(signature); end
1647
+
1648
+ # source://mocktail//lib/mocktail/sorbet/mocktail/stringifies_method_signature.rb#32
1649
+ sig { params(signature: ::Mocktail::Signature).returns(T.nilable(::String)) }
1650
+ def keyword(signature); end
1651
+
1652
+ # source://mocktail//lib/mocktail/sorbet/mocktail/stringifies_method_signature.rb#19
1653
+ sig { params(signature: ::Mocktail::Signature).returns(T.nilable(::String)) }
1654
+ def positional(signature); end
1655
+ end
1656
+
1657
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/stubbing.rb#4
1658
+ class Mocktail::Stubbing < ::T::Struct
1659
+ extend T::Generic
1660
+
1661
+ MethodReturnType = type_member
1662
+
1663
+ const :demonstration, T.proc.params(matchers: ::Mocktail::MatcherPresentation).returns(MethodReturnType)
1664
+ const :demo_config, ::Mocktail::DemoConfig
1665
+ prop :satisfaction_count, ::Integer, default: T.unsafe(nil)
1666
+ const :recording, ::Mocktail::Call
1667
+ prop :effect, T.nilable(T.proc.params(call: ::Mocktail::Call).returns(MethodReturnType))
1668
+
1669
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/stubbing.rb#16
1670
+ sig { void }
1671
+ def satisfied!; end
1672
+
1673
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/stubbing.rb#21
1674
+ sig { params(block: T.proc.params(call: ::Mocktail::Call).returns(MethodReturnType)).void }
1675
+ def with(&block); end
1676
+
1677
+ class << self
1678
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
1679
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
1680
+ def inherited(s); end
1681
+ end
1682
+ end
1683
+
1684
+ # source://mocktail//lib/mocktail/sorbet/mocktail/typed.rb#4
1685
+ Mocktail::TYPED = T.let(T.unsafe(nil), TrueClass)
1686
+
1687
+ # The TopShelf is where we keep all the more global, dangerous state.
1688
+ # In particular, this is where Mocktail manages state related to singleton
1689
+ # method replacements carried out with Mocktail.replace(ClassOrModule)
1690
+ #
1691
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#7
1692
+ # The TopShelf is where we keep all the more global, dangerous state.
1693
+ # In particular, this is where Mocktail manages state related to singleton
1694
+ class Mocktail::TopShelf
1695
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#19
1696
+ sig { void }
1697
+ def initialize; end
1698
+
1699
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#50
1700
+ sig { params(type: T.any(::Module, T::Class[T.anything])).returns(T::Boolean) }
1701
+ def new_replaced?(type); end
1702
+
1703
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#60
1704
+ sig { params(type: T::Class[T.anything]).returns(T::Boolean) }
1705
+ def of_next_registered?(type); end
1706
+
1707
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#45
1708
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
1709
+ def register_new_replacement!(type); end
1710
+
1711
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#55
1712
+ sig { params(type: T::Class[T.anything]).void }
1713
+ def register_of_next_replacement!(type); end
1714
+
1715
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#70
1716
+ sig { params(type: T.any(::Module, T::Class[T.anything])).void }
1717
+ def register_singleton_method_replacement!(type); end
1718
+
1719
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#40
1720
+ sig { void }
1721
+ def reset_current_thread!; end
1722
+
1723
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#75
1724
+ sig { params(type: T.any(::Module, T::Class[T.anything])).returns(T::Boolean) }
1725
+ def singleton_methods_replaced?(type); end
1726
+
1727
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#26
1728
+ sig { params(type: T.any(::Module, T::Class[T.anything])).returns(::Mocktail::TypeReplacement) }
1729
+ def type_replacement_for(type); end
1730
+
1731
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#33
1732
+ sig { params(type: T.any(::Module, T::Class[T.anything])).returns(T.nilable(::Mocktail::TypeReplacement)) }
1733
+ def type_replacement_if_exists_for(type); end
1734
+
1735
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#65
1736
+ sig { params(type: T::Class[T.anything]).void }
1737
+ def unregister_of_next_replacement!(type); end
1738
+
1739
+ class << self
1740
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/top_shelf.rb#11
1741
+ sig { returns(::Mocktail::TopShelf) }
1742
+ def instance; end
1743
+ end
1744
+ end
1745
+
1746
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/transforms_params.rb#6
1747
+ class Mocktail::TransformsParams
1748
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/transforms_params.rb#10
1749
+ sig { void }
1750
+ def initialize; end
1751
+
1752
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/transforms_params.rb#15
1753
+ sig do
1754
+ params(
1755
+ dry_call: ::Mocktail::Call,
1756
+ params: T.nilable(T::Array[T::Array[::Symbol]])
1757
+ ).returns(::Mocktail::Signature)
1758
+ end
1759
+ def transform(dry_call, params: T.unsafe(nil)); end
1760
+
1761
+ private
1762
+
1763
+ # source://mocktail//lib/mocktail/sorbet/mocktail/simulates_argument_error/transforms_params.rb#48
1764
+ sig { params(params: T::Array[T::Array[::Symbol]]).returns(T::Array[T::Array[::Symbol]]) }
1765
+ def name_unnamed_params(params); end
1766
+ end
1767
+
1768
+ # source://mocktail//lib/mocktail/sorbet/mocktail/errors.rb#18
1769
+ class Mocktail::TypeCheckingError < ::Mocktail::Error; end
1770
+
1771
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/type_replacement.rb#4
1772
+ class Mocktail::TypeReplacement < ::T::Struct
1773
+ const :type, T.any(::Module, T::Class[T.anything])
1774
+ prop :original_methods, T.nilable(T::Array[::Method])
1775
+ prop :replacement_methods, T.nilable(T::Array[::Method])
1776
+ prop :original_new, T.nilable(::Method)
1777
+ prop :replacement_new, T.nilable(::Method)
1778
+
1779
+ class << self
1780
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
1781
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
1782
+ def inherited(s); end
1783
+ end
1784
+ end
1785
+
1786
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/type_replacement_data.rb#4
1787
+ class Mocktail::TypeReplacementData < ::T::Struct
1788
+ include ::Mocktail::ExplanationData
1789
+
1790
+ const :type, T.any(::Module, T::Class[T.anything])
1791
+ const :replaced_method_names, T::Array[::Symbol]
1792
+ const :calls, T::Array[::Mocktail::Call]
1793
+ const :stubbings, T::Array[Mocktail::Stubbing[T.anything]]
1794
+
1795
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/type_replacement_data.rb#15
1796
+ sig { returns(T.any(::Module, T::Class[T.anything])) }
1797
+ def double; end
1798
+
1799
+ class << self
1800
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
1801
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
1802
+ def inherited(s); end
1803
+ end
1804
+ end
1805
+
1806
+ # source://mocktail//lib/mocktail/sorbet/mocktail/errors.rb#6
1807
+ class Mocktail::UnexpectedError < ::Mocktail::Error; end
1808
+
1809
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/unsatisfying_call.rb#4
1810
+ class Mocktail::UnsatisfyingCall < ::T::Struct
1811
+ const :call, ::Mocktail::Call
1812
+ const :other_stubbings, T::Array[Mocktail::Stubbing[T.anything]]
1813
+ const :backtrace, T::Array[::String]
1814
+
1815
+ class << self
1816
+ # source://sorbet-runtime/0.5.11971/lib/types/struct.rb#13
1817
+ # source://sorbet-runtime/0.5.10983/lib/types/struct.rb#13
1818
+ def inherited(s); end
1819
+ end
1820
+ end
1821
+
1822
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/unsatisfying_call_explanation.rb#4
1823
+ class Mocktail::UnsatisfyingCallExplanation
1824
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/unsatisfying_call_explanation.rb#14
1825
+ sig { params(reference: ::Mocktail::UnsatisfyingCall, message: ::String).void }
1826
+ def initialize(reference, message); end
1827
+
1828
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/unsatisfying_call_explanation.rb#11
1829
+ sig { returns(::String) }
1830
+ def message; end
1831
+
1832
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/unsatisfying_call_explanation.rb#8
1833
+ sig { returns(::Mocktail::UnsatisfyingCall) }
1834
+ def reference; end
1835
+
1836
+ # source://mocktail//lib/mocktail/sorbet/mocktail/value/unsatisfying_call_explanation.rb#20
1837
+ sig { returns(T.class_of(Mocktail::UnsatisfyingCallExplanation)) }
1838
+ def type; end
1839
+ end
1840
+
1841
+ # source://mocktail//lib/mocktail/sorbet/mocktail/errors.rb#8
1842
+ class Mocktail::UnsupportedMocktail < ::Mocktail::Error; end
1843
+
1844
+ # source://mocktail//lib/mocktail/sorbet/mocktail/version.rb#11
1845
+ Mocktail::VERSION = T.let(T.unsafe(nil), String)
1846
+
1847
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/validates_arguments.rb#4
1848
+ class Mocktail::ValidatesArguments
1849
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/validates_arguments.rb#32
1850
+ sig { void }
1851
+ def initialize; end
1852
+
1853
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/validates_arguments.rb#37
1854
+ sig { params(dry_call: ::Mocktail::Call).returns(::NilClass) }
1855
+ def validate(dry_call); end
1856
+
1857
+ class << self
1858
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/validates_arguments.rb#7
1859
+ sig { void }
1860
+ def disable!; end
1861
+
1862
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/validates_arguments.rb#17
1863
+ sig { returns(T::Boolean) }
1864
+ def disabled?; end
1865
+
1866
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/validates_arguments.rb#12
1867
+ sig { void }
1868
+ def enable!; end
1869
+
1870
+ # source://mocktail//lib/mocktail/sorbet/mocktail/handles_dry_call/validates_arguments.rb#22
1871
+ sig { params(disable: T.nilable(T::Boolean), blk: T.proc.returns(T.anything)).void }
1872
+ def optional(disable, &blk); end
1873
+ end
1874
+ end
1875
+
1876
+ # source://mocktail//lib/mocktail/sorbet/mocktail/errors.rb#16
1877
+ class Mocktail::VerificationError < ::Mocktail::Error; end
1878
+
1879
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call.rb#8
1880
+ class Mocktail::VerifiesCall
1881
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call.rb#12
1882
+ sig { void }
1883
+ def initialize; end
1884
+
1885
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call.rb#19
1886
+ sig do
1887
+ params(
1888
+ demo: T.proc.params(matchers: ::Mocktail::MatcherPresentation).void,
1889
+ demo_config: ::Mocktail::DemoConfig
1890
+ ).void
1891
+ end
1892
+ def verify(demo, demo_config); end
1893
+
1894
+ private
1895
+
1896
+ # source://mocktail//lib/mocktail/sorbet/mocktail/verifies_call.rb#32
1897
+ sig { params(verifiable_call_count: ::Integer, demo_config: ::Mocktail::DemoConfig).returns(T::Boolean) }
1898
+ def verification_satisfied?(verifiable_call_count, demo_config); end
1899
+ end
1900
+
1901
+ # sorbet gem fails to export some of these constants, so we need to in order to
1902
+ # pass static typecheck
1903
+ module T
1904
+ module Private
1905
+ module Methods
1906
+ module MethodHooks; end
1907
+
1908
+ class Signature
1909
+ sig { returns(T::Array[T::Array[Symbol]]) }
1910
+ def parameters; end
1911
+ end
1912
+
1913
+ module SingletonMethodHooks; end
1914
+ end
1915
+
1916
+ module RuntimeLevels
1917
+ class << self
1918
+ sig { returns(Symbol) }
1919
+ def default_checked_level; end
1920
+ end
1921
+ end
1922
+ end
1923
+ end