rbs 2.8.4 → 3.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (434) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -4
  3. data/.github/workflows/comments.yml +11 -11
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +40 -49
  6. data/.github/workflows/typecheck.yml +36 -0
  7. data/.github/workflows/windows.yml +28 -0
  8. data/.gitignore +1 -0
  9. data/.rubocop.yml +42 -2
  10. data/CHANGELOG.md +845 -1
  11. data/README.md +64 -4
  12. data/Rakefile +198 -18
  13. data/Steepfile +11 -11
  14. data/config.yml +311 -0
  15. data/core/array.rbs +2189 -1914
  16. data/core/basic_object.rbs +59 -84
  17. data/core/binding.rbs +7 -69
  18. data/core/builtin.rbs +210 -11
  19. data/core/class.rbs +37 -0
  20. data/core/comparable.rbs +23 -25
  21. data/core/complex.rbs +449 -227
  22. data/core/constants.rbs +29 -21
  23. data/core/data.rbs +415 -0
  24. data/core/dir.rbs +698 -415
  25. data/core/encoding.rbs +468 -843
  26. data/core/enumerable.rbs +495 -455
  27. data/core/enumerator/product.rbs +92 -0
  28. data/core/enumerator.rbs +106 -9
  29. data/core/env.rbs +1 -1
  30. data/core/errno.rbs +506 -605
  31. data/core/errors.rbs +15 -17
  32. data/core/exception.rbs +361 -145
  33. data/core/false_class.rbs +39 -26
  34. data/core/fiber.rbs +121 -14
  35. data/core/file.rbs +1262 -320
  36. data/core/file_test.rbs +62 -45
  37. data/core/float.rbs +187 -208
  38. data/core/gc.rbs +446 -196
  39. data/core/global_variables.rbs +29 -29
  40. data/core/hash.rbs +242 -349
  41. data/core/integer.rbs +246 -308
  42. data/core/io/buffer.rbs +373 -122
  43. data/core/io/wait.rbs +29 -17
  44. data/core/io.rbs +1881 -1518
  45. data/core/kernel.rbs +2116 -1538
  46. data/core/marshal.rbs +24 -14
  47. data/core/match_data.rbs +413 -166
  48. data/core/math.rbs +531 -291
  49. data/core/method.rbs +101 -32
  50. data/core/module.rbs +228 -64
  51. data/core/nil_class.rbs +106 -47
  52. data/core/numeric.rbs +206 -292
  53. data/core/object.rbs +73 -1168
  54. data/core/object_space/weak_key_map.rbs +166 -0
  55. data/core/object_space.rbs +5 -3
  56. data/core/proc.rbs +280 -39
  57. data/core/process.rbs +1318 -658
  58. data/core/ractor.rbs +200 -134
  59. data/core/random.rbs +21 -4
  60. data/core/range.rbs +309 -153
  61. data/core/rational.rbs +4 -12
  62. data/core/rb_config.rbs +64 -43
  63. data/core/rbs/unnamed/argf.rbs +411 -147
  64. data/core/rbs/unnamed/env_class.rbs +137 -253
  65. data/core/rbs/unnamed/random.rbs +49 -26
  66. data/core/refinement.rbs +16 -1
  67. data/core/regexp.rbs +1568 -862
  68. data/core/ruby_vm.rbs +719 -7
  69. data/core/rubygems/config_file.rbs +3 -0
  70. data/core/rubygems/errors.rbs +69 -6
  71. data/core/rubygems/rubygems.rbs +71 -17
  72. data/core/rubygems/version.rbs +11 -7
  73. data/{stdlib/set/0 → core}/set.rbs +80 -91
  74. data/core/signal.rbs +14 -8
  75. data/core/string.rbs +1732 -1607
  76. data/core/struct.rbs +467 -95
  77. data/core/symbol.rbs +215 -245
  78. data/core/thread.rbs +133 -89
  79. data/core/thread_group.rbs +9 -9
  80. data/core/time.rbs +1141 -841
  81. data/core/trace_point.rbs +181 -121
  82. data/core/true_class.rbs +58 -32
  83. data/core/unbound_method.rbs +103 -30
  84. data/core/warning.rbs +50 -5
  85. data/docs/CONTRIBUTING.md +1 -1
  86. data/docs/architecture.md +110 -0
  87. data/docs/collection.md +59 -5
  88. data/docs/data_and_struct.md +86 -0
  89. data/docs/gem.md +57 -0
  90. data/docs/rbs_by_example.md +16 -35
  91. data/docs/repo.md +1 -1
  92. data/docs/sigs.md +7 -7
  93. data/docs/stdlib.md +63 -5
  94. data/docs/syntax.md +255 -61
  95. data/docs/tools.md +1 -0
  96. data/ext/rbs_extension/extconf.rb +10 -0
  97. data/ext/rbs_extension/lexer.c +1741 -1548
  98. data/ext/rbs_extension/lexer.h +11 -1
  99. data/ext/rbs_extension/lexer.re +12 -6
  100. data/ext/rbs_extension/lexstate.c +26 -3
  101. data/ext/rbs_extension/location.c +119 -111
  102. data/ext/rbs_extension/location.h +32 -7
  103. data/ext/rbs_extension/main.c +3 -0
  104. data/ext/rbs_extension/parser.c +883 -481
  105. data/ext/rbs_extension/parserstate.c +65 -25
  106. data/ext/rbs_extension/parserstate.h +13 -3
  107. data/ext/rbs_extension/rbs_extension.h +1 -10
  108. data/ext/rbs_extension/unescape.c +7 -47
  109. data/goodcheck.yml +2 -2
  110. data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
  111. data/include/rbs/ruby_objs.h +72 -0
  112. data/include/rbs.h +7 -0
  113. data/lib/rbs/annotate/annotations.rb +3 -3
  114. data/lib/rbs/annotate/formatter.rb +13 -3
  115. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  116. data/lib/rbs/annotate/rdoc_source.rb +12 -3
  117. data/lib/rbs/ast/declarations.rb +85 -2
  118. data/lib/rbs/ast/directives.rb +39 -0
  119. data/lib/rbs/ast/members.rb +49 -15
  120. data/lib/rbs/ast/type_param.rb +104 -15
  121. data/lib/rbs/ast/visitor.rb +137 -0
  122. data/lib/rbs/buffer.rb +5 -0
  123. data/lib/rbs/cli/colored_io.rb +48 -0
  124. data/lib/rbs/cli/diff.rb +83 -0
  125. data/lib/rbs/cli/validate.rb +356 -0
  126. data/lib/rbs/cli.rb +253 -143
  127. data/lib/rbs/collection/cleaner.rb +8 -1
  128. data/lib/rbs/collection/config/lockfile.rb +92 -0
  129. data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
  130. data/lib/rbs/collection/config.rb +19 -46
  131. data/lib/rbs/collection/installer.rb +12 -13
  132. data/lib/rbs/collection/sources/base.rb +2 -2
  133. data/lib/rbs/collection/sources/git.rb +146 -69
  134. data/lib/rbs/collection/sources/local.rb +81 -0
  135. data/lib/rbs/collection/sources/rubygems.rb +10 -12
  136. data/lib/rbs/collection/sources/stdlib.rb +14 -13
  137. data/lib/rbs/collection/sources.rb +15 -2
  138. data/lib/rbs/collection.rb +2 -1
  139. data/lib/rbs/definition.rb +13 -16
  140. data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
  141. data/lib/rbs/definition_builder/method_builder.rb +4 -4
  142. data/lib/rbs/definition_builder.rb +489 -584
  143. data/lib/rbs/diff.rb +125 -0
  144. data/lib/rbs/environment/use_map.rb +77 -0
  145. data/lib/rbs/environment.rb +406 -105
  146. data/lib/rbs/environment_loader.rb +48 -44
  147. data/lib/rbs/environment_walker.rb +1 -1
  148. data/lib/rbs/errors.rb +175 -56
  149. data/lib/rbs/file_finder.rb +28 -0
  150. data/lib/rbs/location_aux.rb +8 -7
  151. data/lib/rbs/locator.rb +37 -15
  152. data/lib/rbs/method_type.rb +23 -0
  153. data/lib/rbs/namespace.rb +1 -0
  154. data/lib/rbs/parser/lex_result.rb +15 -0
  155. data/lib/rbs/parser/token.rb +23 -0
  156. data/lib/rbs/parser_aux.rb +22 -13
  157. data/lib/rbs/prototype/helpers.rb +48 -22
  158. data/lib/rbs/prototype/node_usage.rb +99 -0
  159. data/lib/rbs/prototype/rb.rb +125 -31
  160. data/lib/rbs/prototype/rbi.rb +49 -36
  161. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  162. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  163. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  164. data/lib/rbs/prototype/runtime.rb +273 -159
  165. data/lib/rbs/resolver/constant_resolver.rb +24 -8
  166. data/lib/rbs/resolver/type_name_resolver.rb +41 -7
  167. data/lib/rbs/sorter.rb +153 -123
  168. data/lib/rbs/substitution.rb +19 -0
  169. data/lib/rbs/subtractor.rb +201 -0
  170. data/lib/rbs/test/errors.rb +24 -11
  171. data/lib/rbs/test/guaranteed.rb +30 -0
  172. data/lib/rbs/test/hook.rb +45 -40
  173. data/lib/rbs/test/setup.rb +1 -1
  174. data/lib/rbs/test/tester.rb +1 -1
  175. data/lib/rbs/test/type_check.rb +120 -23
  176. data/lib/rbs/test.rb +6 -3
  177. data/lib/rbs/type_alias_dependency.rb +13 -3
  178. data/lib/rbs/type_alias_regularity.rb +21 -14
  179. data/lib/rbs/type_name.rb +18 -13
  180. data/lib/rbs/types.rb +352 -18
  181. data/lib/rbs/unit_test/convertibles.rb +176 -0
  182. data/lib/rbs/unit_test/spy.rb +136 -0
  183. data/lib/rbs/unit_test/type_assertions.rb +341 -0
  184. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  185. data/lib/rbs/unit_test.rb +6 -0
  186. data/lib/rbs/validator.rb +55 -30
  187. data/lib/rbs/variance_calculator.rb +26 -23
  188. data/lib/rbs/vendorer.rb +3 -3
  189. data/lib/rbs/version.rb +1 -1
  190. data/lib/rbs/writer.rb +69 -22
  191. data/lib/rbs.rb +7 -2
  192. data/lib/rdoc/discover.rb +1 -1
  193. data/lib/rdoc_plugin/parser.rb +5 -5
  194. data/rbs.gemspec +12 -2
  195. data/schema/decls.json +1 -1
  196. data/schema/members.json +15 -10
  197. data/sig/ancestor_builder.rbs +4 -0
  198. data/sig/ancestor_graph.rbs +22 -2
  199. data/sig/annotate/formatter.rbs +2 -2
  200. data/sig/annotate/rdoc_annotater.rbs +1 -1
  201. data/sig/cli/colored_io.rbs +15 -0
  202. data/sig/cli/diff.rbs +21 -0
  203. data/sig/cli/validate.rbs +43 -0
  204. data/sig/cli.rbs +4 -0
  205. data/sig/collection/config/lockfile.rbs +74 -0
  206. data/sig/collection/config/lockfile_generator.rbs +66 -0
  207. data/sig/collection/config.rbs +5 -48
  208. data/sig/collection/installer.rbs +1 -1
  209. data/sig/collection/sources.rbs +105 -33
  210. data/sig/constant.rbs +1 -1
  211. data/sig/declarations.rbs +42 -3
  212. data/sig/definition.rbs +26 -10
  213. data/sig/definition_builder.rbs +103 -81
  214. data/sig/diff.rbs +28 -0
  215. data/sig/directives.rbs +61 -0
  216. data/sig/environment.rbs +175 -29
  217. data/sig/environment_loader.rbs +20 -18
  218. data/sig/errors.rbs +123 -2
  219. data/sig/file_finder.rbs +28 -0
  220. data/sig/location.rbs +0 -3
  221. data/sig/locator.rbs +14 -2
  222. data/sig/manifest.yaml +0 -1
  223. data/sig/members.rbs +32 -9
  224. data/sig/method_types.rbs +10 -4
  225. data/sig/namespace.rbs +2 -3
  226. data/sig/parser.rbs +55 -16
  227. data/sig/prototype/helpers.rbs +4 -0
  228. data/sig/prototype/node_usage.rbs +20 -0
  229. data/sig/prototype/rb.rbs +10 -2
  230. data/sig/prototype/rbi.rbs +2 -0
  231. data/sig/prototype/runtime.rbs +182 -0
  232. data/sig/rbs.rbs +1 -1
  233. data/sig/rdoc/rbs.rbs +4 -0
  234. data/sig/repository.rbs +7 -5
  235. data/sig/resolver/constant_resolver.rbs +3 -4
  236. data/sig/resolver/context.rbs +1 -1
  237. data/sig/resolver/type_name_resolver.rbs +5 -1
  238. data/sig/shims/bundler.rbs +38 -0
  239. data/sig/shims/rubygems.rbs +19 -0
  240. data/sig/sorter.rbs +23 -5
  241. data/sig/substitution.rbs +6 -0
  242. data/sig/subtractor.rbs +37 -0
  243. data/sig/test/errors.rbs +52 -0
  244. data/sig/test/guranteed.rbs +9 -0
  245. data/sig/test/type_check.rbs +19 -0
  246. data/sig/test.rbs +82 -0
  247. data/sig/type_alias_dependency.rbs +31 -0
  248. data/sig/type_alias_regularity.rbs +12 -6
  249. data/sig/type_param.rbs +45 -9
  250. data/sig/typename.rbs +8 -5
  251. data/sig/types.rbs +119 -12
  252. data/sig/unit_test/convertibles.rbs +154 -0
  253. data/sig/unit_test/spy.rbs +28 -0
  254. data/sig/unit_test/type_assertions.rbs +194 -0
  255. data/sig/unit_test/with_aliases.rbs +136 -0
  256. data/sig/use_map.rbs +35 -0
  257. data/sig/validator.rbs +12 -5
  258. data/sig/variance_calculator.rbs +3 -1
  259. data/sig/vendorer.rbs +1 -1
  260. data/sig/visitor.rbs +47 -0
  261. data/sig/writer.rbs +6 -2
  262. data/src/constants.c +153 -0
  263. data/src/ruby_objs.c +793 -0
  264. data/stdlib/base64/0/base64.rbs +298 -45
  265. data/stdlib/benchmark/0/benchmark.rbs +12 -3
  266. data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
  267. data/stdlib/cgi/0/core.rbs +68 -15
  268. data/stdlib/cgi/0/manifest.yaml +1 -0
  269. data/stdlib/coverage/0/coverage.rbs +50 -11
  270. data/stdlib/csv/0/csv.rbs +90 -119
  271. data/stdlib/csv/0/manifest.yaml +1 -0
  272. data/stdlib/date/0/date.rbs +806 -735
  273. data/stdlib/date/0/date_time.rbs +70 -211
  274. data/stdlib/dbm/0/dbm.rbs +0 -2
  275. data/stdlib/delegate/0/delegator.rbs +184 -0
  276. data/stdlib/delegate/0/kernel.rbs +47 -0
  277. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  278. data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
  279. data/stdlib/digest/0/digest.rbs +48 -35
  280. data/stdlib/erb/0/erb.rbs +15 -39
  281. data/stdlib/etc/0/etc.rbs +174 -54
  282. data/stdlib/fileutils/0/fileutils.rbs +1234 -385
  283. data/stdlib/forwardable/0/forwardable.rbs +4 -4
  284. data/stdlib/io-console/0/io-console.rbs +82 -17
  285. data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
  286. data/stdlib/json/0/json.rbs +434 -151
  287. data/stdlib/kconv/0/kconv.rbs +166 -0
  288. data/stdlib/logger/0/formatter.rbs +0 -2
  289. data/stdlib/logger/0/log_device.rbs +1 -3
  290. data/stdlib/logger/0/logger.rbs +465 -328
  291. data/stdlib/minitest/0/kernel.rbs +2 -2
  292. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  293. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  294. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  295. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  296. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  297. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  298. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  299. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  300. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  301. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  302. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  303. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  304. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  305. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  306. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  307. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  308. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  309. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  310. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  311. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  312. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  313. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
  314. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  315. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  316. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  317. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  318. data/stdlib/minitest/0/minitest.rbs +41 -892
  319. data/stdlib/monitor/0/monitor.rbs +91 -10
  320. data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
  321. data/stdlib/net-http/0/manifest.yaml +1 -1
  322. data/stdlib/net-http/0/net-http.rbs +3858 -964
  323. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  324. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  325. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  326. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  327. data/stdlib/nkf/0/nkf.rbs +35 -5
  328. data/stdlib/objspace/0/objspace.rbs +40 -18
  329. data/stdlib/observable/0/observable.rbs +217 -0
  330. data/stdlib/open-uri/0/manifest.yaml +4 -0
  331. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  332. data/stdlib/open3/0/open3.rbs +147 -0
  333. data/stdlib/openssl/0/manifest.yaml +1 -0
  334. data/stdlib/openssl/0/openssl.rbs +681 -316
  335. data/stdlib/optparse/0/optparse.rbs +100 -65
  336. data/stdlib/pathname/0/pathname.rbs +24 -15
  337. data/stdlib/pp/0/manifest.yaml +2 -0
  338. data/stdlib/pp/0/pp.rbs +300 -0
  339. data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
  340. data/stdlib/pstore/0/pstore.rbs +370 -156
  341. data/stdlib/psych/0/core_ext.rbs +12 -0
  342. data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
  343. data/stdlib/psych/0/manifest.yaml +3 -0
  344. data/stdlib/psych/0/psych.rbs +402 -0
  345. data/stdlib/{yaml → psych}/0/store.rbs +2 -2
  346. data/stdlib/pty/0/pty.rbs +63 -11
  347. data/stdlib/rdoc/0/code_object.rbs +51 -0
  348. data/stdlib/rdoc/0/comment.rbs +59 -0
  349. data/stdlib/rdoc/0/context.rbs +153 -0
  350. data/stdlib/rdoc/0/markup.rbs +117 -0
  351. data/stdlib/rdoc/0/parser.rbs +56 -0
  352. data/stdlib/rdoc/0/rdoc.rbs +13 -380
  353. data/stdlib/rdoc/0/ri.rbs +17 -0
  354. data/stdlib/rdoc/0/store.rbs +48 -0
  355. data/stdlib/rdoc/0/top_level.rbs +97 -0
  356. data/stdlib/resolv/0/resolv.rbs +16 -79
  357. data/stdlib/ripper/0/ripper.rbs +1648 -0
  358. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  359. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  360. data/stdlib/singleton/0/singleton.rbs +0 -3
  361. data/stdlib/socket/0/addrinfo.rbs +13 -18
  362. data/stdlib/socket/0/basic_socket.rbs +5 -10
  363. data/stdlib/socket/0/ip_socket.rbs +0 -2
  364. data/stdlib/socket/0/socket.rbs +77 -46
  365. data/stdlib/socket/0/tcp_server.rbs +0 -5
  366. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  367. data/stdlib/socket/0/udp_socket.rbs +4 -5
  368. data/stdlib/socket/0/unix_server.rbs +0 -5
  369. data/stdlib/socket/0/unix_socket.rbs +2 -4
  370. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
  371. data/stdlib/strscan/0/string_scanner.rbs +1269 -425
  372. data/stdlib/tempfile/0/tempfile.rbs +224 -61
  373. data/stdlib/time/0/time.rbs +48 -35
  374. data/stdlib/timeout/0/timeout.rbs +17 -8
  375. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  376. data/stdlib/tsort/0/tsort.rbs +0 -4
  377. data/stdlib/uri/0/common.rbs +271 -144
  378. data/stdlib/uri/0/file.rbs +5 -0
  379. data/stdlib/uri/0/ftp.rbs +1 -1
  380. data/stdlib/uri/0/generic.rbs +26 -22
  381. data/stdlib/uri/0/http.rbs +4 -4
  382. data/stdlib/uri/0/ldap.rbs +1 -1
  383. data/stdlib/uri/0/mailto.rbs +84 -0
  384. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  385. data/stdlib/yaml/0/manifest.yaml +1 -2
  386. data/stdlib/yaml/0/yaml.rbs +1 -199
  387. data/stdlib/zlib/0/buf_error.rbs +10 -0
  388. data/stdlib/zlib/0/data_error.rbs +10 -0
  389. data/stdlib/zlib/0/deflate.rbs +210 -0
  390. data/stdlib/zlib/0/error.rbs +20 -0
  391. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  392. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  393. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  394. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  395. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  396. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  397. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  398. data/stdlib/zlib/0/inflate.rbs +180 -0
  399. data/stdlib/zlib/0/mem_error.rbs +10 -0
  400. data/stdlib/zlib/0/need_dict.rbs +13 -0
  401. data/stdlib/zlib/0/stream_end.rbs +11 -0
  402. data/stdlib/zlib/0/stream_error.rbs +11 -0
  403. data/stdlib/zlib/0/version_error.rbs +11 -0
  404. data/stdlib/zlib/0/zlib.rbs +1 -3
  405. data/stdlib/zlib/0/zstream.rbs +200 -0
  406. data/templates/include/rbs/constants.h.erb +20 -0
  407. data/templates/include/rbs/ruby_objs.h.erb +10 -0
  408. data/templates/src/constants.c.erb +36 -0
  409. data/templates/src/ruby_objs.c.erb +27 -0
  410. data/templates/template.rb +122 -0
  411. metadata +136 -36
  412. data/Gemfile +0 -33
  413. data/Gemfile.lock +0 -118
  414. data/core/deprecated.rbs +0 -9
  415. data/ext/rbs_extension/constants.c +0 -135
  416. data/ext/rbs_extension/ruby_objs.c +0 -525
  417. data/ext/rbs_extension/ruby_objs.h +0 -43
  418. data/lib/rbs/constant_table.rb +0 -167
  419. data/lib/rbs/parser_compat/lexer_error.rb +0 -6
  420. data/lib/rbs/parser_compat/located_value.rb +0 -7
  421. data/lib/rbs/parser_compat/semantics_error.rb +0 -6
  422. data/lib/rbs/parser_compat/syntax_error.rb +0 -6
  423. data/lib/rbs/test/spy.rb +0 -6
  424. data/lib/rbs/type_name_resolver.rb +0 -67
  425. data/sig/constant_table.rbs +0 -30
  426. data/sig/shims/abstract_syntax_tree.rbs +0 -25
  427. data/sig/shims/pp.rbs +0 -3
  428. data/sig/shims/ripper.rbs +0 -8
  429. data/sig/shims.rbs +0 -69
  430. data/sig/type_name_resolver.rbs +0 -26
  431. data/stdlib/minitest/0/manifest.yaml +0 -2
  432. data/stdlib/prime/0/integer-extension.rbs +0 -41
  433. data/stdlib/prime/0/manifest.yaml +0 -2
  434. data/stdlib/prime/0/prime.rbs +0 -372
@@ -1,122 +1,342 @@
1
1
  # <!-- rdoc-file=lib/pstore.rb -->
2
- # PStore implements a file based persistence mechanism based on a Hash. User
3
- # code can store hierarchies of Ruby objects (values) into the data store file
4
- # by name (keys). An object hierarchy may be just a single object. User code
5
- # may later read values back from the data store or even update data, as needed.
2
+ # PStore implements a file based persistence mechanism based on a Hash. User
3
+ # code can store hierarchies of Ruby objects (values) into the data store by
4
+ # name (keys). An object hierarchy may be just a single object. User code may
5
+ # later read values back from the data store or even update data, as needed.
6
6
  #
7
7
  # The transactional behavior ensures that any changes succeed or fail together.
8
8
  # This can be used to ensure that the data store is not left in a transitory
9
9
  # state, where some values were updated but others were not.
10
10
  #
11
11
  # Behind the scenes, Ruby objects are stored to the data store file with
12
- # Marshal. That carries the usual limitations. Proc objects cannot be
12
+ # Marshal. That carries the usual limitations. Proc objects cannot be
13
13
  # marshalled, for example.
14
14
  #
15
- # ## Usage example:
15
+ # There are three important concepts here (details at the links):
16
+ #
17
+ # * [Store](rdoc-ref:PStore@The+Store): a store is an instance of PStore.
18
+ # * [Entries](rdoc-ref:PStore@Entries): the store is hash-like; each entry is
19
+ # the key for a stored object.
20
+ # * [Transactions](rdoc-ref:PStore@Transactions): each transaction is a
21
+ # collection of prospective changes to the store; a transaction is defined
22
+ # in the block given with a call to PStore#transaction.
23
+ #
24
+ # ## About the Examples
25
+ #
26
+ # Examples on this page need a store that has known properties. They can get a
27
+ # new (and populated) store by calling thus:
28
+ #
29
+ # example_store do |store|
30
+ # # Example code using store goes here.
31
+ # end
32
+ #
33
+ # All we really need to know about `example_store` is that it yields a fresh
34
+ # store with a known population of entries; its implementation:
35
+ #
36
+ # require 'pstore'
37
+ # require 'tempfile'
38
+ # # Yield a pristine store for use in examples.
39
+ # def example_store
40
+ # # Create the store in a temporary file.
41
+ # Tempfile.create do |file|
42
+ # store = PStore.new(file)
43
+ # # Populate the store.
44
+ # store.transaction do
45
+ # store[:foo] = 0
46
+ # store[:bar] = 1
47
+ # store[:baz] = 2
48
+ # end
49
+ # yield store
50
+ # end
51
+ # end
52
+ #
53
+ # ## The Store
54
+ #
55
+ # The contents of the store are maintained in a file whose path is specified
56
+ # when the store is created (see PStore.new). The objects are stored and
57
+ # retrieved using module Marshal, which means that certain objects cannot be
58
+ # added to the store; see [Marshal::dump](rdoc-ref:Marshal.dump).
59
+ #
60
+ # ## Entries
61
+ #
62
+ # A store may have any number of entries. Each entry has a key and a value, just
63
+ # as in a hash:
64
+ #
65
+ # * Key: as in a hash, the key can be (almost) any object; see [Hash
66
+ # Keys](rdoc-ref:Hash@Hash+Keys). You may find it convenient to keep it
67
+ # simple by using only symbols or strings as keys.
68
+ # * Value: the value may be any object that can be marshalled by Marshal (see
69
+ # [Marshal::dump](rdoc-ref:Marshal.dump)) and in fact may be a collection
70
+ # (e.g., an array, a hash, a set, a range, etc). That collection may in turn
71
+ # contain nested objects, including collections, to any depth; those objects
72
+ # must also be Marshal-able. See [Hierarchical
73
+ # Values](rdoc-ref:PStore@Hierarchical+Values).
74
+ #
75
+ # ## Transactions
76
+ #
77
+ # ### The Transaction Block
78
+ #
79
+ # The block given with a call to method #transaction# contains a *transaction*,
80
+ # which consists of calls to PStore methods that read from or write to the store
81
+ # (that is, all PStore methods except #transaction itself, #path, and
82
+ # Pstore.new):
83
+ #
84
+ # example_store do |store|
85
+ # store.transaction do
86
+ # store.keys # => [:foo, :bar, :baz]
87
+ # store[:bat] = 3
88
+ # store.keys # => [:foo, :bar, :baz, :bat]
89
+ # end
90
+ # end
91
+ #
92
+ # Execution of the transaction is deferred until the block exits, and is
93
+ # executed *atomically* (all-or-nothing): either all transaction calls are
94
+ # executed, or none are. This maintains the integrity of the store.
95
+ #
96
+ # Other code in the block (including even calls to #path and PStore.new) is
97
+ # executed immediately, not deferred.
98
+ #
99
+ # The transaction block:
100
+ #
101
+ # * May not contain a nested call to #transaction.
102
+ # * Is the only context where methods that read from or write to the store are
103
+ # allowed.
104
+ #
105
+ # As seen above, changes in a transaction are made automatically when the block
106
+ # exits. The block may be exited early by calling method #commit or #abort.
107
+ #
108
+ # * Method #commit triggers the update to the store and exits the block:
109
+ #
110
+ # example_store do |store|
111
+ # store.transaction do
112
+ # store.keys # => [:foo, :bar, :baz]
113
+ # store[:bat] = 3
114
+ # store.commit
115
+ # fail 'Cannot get here'
116
+ # end
117
+ # store.transaction do
118
+ # # Update was completed.
119
+ # store.keys # => [:foo, :bar, :baz, :bat]
120
+ # end
121
+ # end
122
+ #
123
+ # * Method #abort discards the update to the store and exits the block:
124
+ #
125
+ # example_store do |store|
126
+ # store.transaction do
127
+ # store.keys # => [:foo, :bar, :baz]
128
+ # store[:bat] = 3
129
+ # store.abort
130
+ # fail 'Cannot get here'
131
+ # end
132
+ # store.transaction do
133
+ # # Update was not completed.
134
+ # store.keys # => [:foo, :bar, :baz]
135
+ # end
136
+ # end
137
+ #
138
+ # ### Read-Only Transactions
139
+ #
140
+ # By default, a transaction allows both reading from and writing to the store:
141
+ #
142
+ # store.transaction do
143
+ # # Read-write transaction.
144
+ # # Any code except a call to #transaction is allowed here.
145
+ # end
146
+ #
147
+ # If argument `read_only` is passed as `true`, only reading is allowed:
148
+ #
149
+ # store.transaction(true) do
150
+ # # Read-only transaction:
151
+ # # Calls to #transaction, #[]=, and #delete are not allowed here.
152
+ # end
153
+ #
154
+ # ## Hierarchical Values
155
+ #
156
+ # The value for an entry may be a simple object (as seen above). It may also be
157
+ # a hierarchy of objects nested to any depth:
158
+ #
159
+ # deep_store = PStore.new('deep.store')
160
+ # deep_store.transaction do
161
+ # array_of_hashes = [{}, {}, {}]
162
+ # deep_store[:array_of_hashes] = array_of_hashes
163
+ # deep_store[:array_of_hashes] # => [{}, {}, {}]
164
+ # hash_of_arrays = {foo: [], bar: [], baz: []}
165
+ # deep_store[:hash_of_arrays] = hash_of_arrays
166
+ # deep_store[:hash_of_arrays] # => {:foo=>[], :bar=>[], :baz=>[]}
167
+ # deep_store[:hash_of_arrays][:foo].push(:bat)
168
+ # deep_store[:hash_of_arrays] # => {:foo=>[:bat], :bar=>[], :baz=>[]}
169
+ # end
170
+ #
171
+ # And recall that you can use [dig methods](rdoc-ref:dig_methods.rdoc) in a
172
+ # returned hierarchy of objects.
173
+ #
174
+ # ## Working with the Store
175
+ #
176
+ # ### Creating a Store
177
+ #
178
+ # Use method PStore.new to create a store. The new store creates or opens its
179
+ # containing file:
180
+ #
181
+ # store = PStore.new('t.store')
182
+ #
183
+ # ### Modifying the Store
184
+ #
185
+ # Use method #[]= to update or create an entry:
186
+ #
187
+ # example_store do |store|
188
+ # store.transaction do
189
+ # store[:foo] = 1 # Update.
190
+ # store[:bam] = 1 # Create.
191
+ # end
192
+ # end
193
+ #
194
+ # Use method #delete to remove an entry:
195
+ #
196
+ # example_store do |store|
197
+ # store.transaction do
198
+ # store.delete(:foo)
199
+ # store[:foo] # => nil
200
+ # end
201
+ # end
202
+ #
203
+ # ### Retrieving Values
204
+ #
205
+ # Use method #fetch (allows default) or #[] (defaults to `nil`) to retrieve an
206
+ # entry:
207
+ #
208
+ # example_store do |store|
209
+ # store.transaction do
210
+ # store[:foo] # => 0
211
+ # store[:nope] # => nil
212
+ # store.fetch(:baz) # => 2
213
+ # store.fetch(:nope, nil) # => nil
214
+ # store.fetch(:nope) # Raises exception.
215
+ # end
216
+ # end
217
+ #
218
+ # ### Querying the Store
219
+ #
220
+ # Use method #key? to determine whether a given key exists:
221
+ #
222
+ # example_store do |store|
223
+ # store.transaction do
224
+ # store.key?(:foo) # => true
225
+ # end
226
+ # end
227
+ #
228
+ # Use method #keys to retrieve keys:
229
+ #
230
+ # example_store do |store|
231
+ # store.transaction do
232
+ # store.keys # => [:foo, :bar, :baz]
233
+ # end
234
+ # end
235
+ #
236
+ # Use method #path to retrieve the path to the store's underlying file; this
237
+ # method may be called from outside a transaction block:
238
+ #
239
+ # store = PStore.new('t.store')
240
+ # store.path # => "t.store"
241
+ #
242
+ # ## Transaction Safety
243
+ #
244
+ # For transaction safety, see:
245
+ #
246
+ # * Optional argument `thread_safe` at method PStore.new.
247
+ # * Attribute #ultra_safe.
248
+ #
249
+ # Needless to say, if you're storing valuable data with PStore, then you should
250
+ # backup the PStore file from time to time.
251
+ #
252
+ # ## An Example Store
16
253
  #
17
254
  # require "pstore"
18
255
  #
19
- # # a mock wiki object...
256
+ # # A mock wiki object.
20
257
  # class WikiPage
21
- # def initialize( page_name, author, contents )
258
+ #
259
+ # attr_reader :page_name
260
+ #
261
+ # def initialize(page_name, author, contents)
22
262
  # @page_name = page_name
23
263
  # @revisions = Array.new
24
- #
25
264
  # add_revision(author, contents)
26
265
  # end
27
266
  #
28
- # attr_reader :page_name
29
- #
30
- # def add_revision( author, contents )
31
- # @revisions << { :created => Time.now,
32
- # :author => author,
33
- # :contents => contents }
267
+ # def add_revision(author, contents)
268
+ # @revisions << {created: Time.now,
269
+ # author: author,
270
+ # contents: contents}
34
271
  # end
35
272
  #
36
273
  # def wiki_page_references
37
274
  # [@page_name] + @revisions.last[:contents].scan(/\b(?:[A-Z]+[a-z]+){2,}/)
38
275
  # end
39
276
  #
40
- # # ...
41
277
  # end
42
278
  #
43
- # # create a new page...
44
- # home_page = WikiPage.new( "HomePage", "James Edward Gray II",
45
- # "A page about the JoysOfDocumentation..." )
279
+ # # Create a new wiki page.
280
+ # home_page = WikiPage.new("HomePage", "James Edward Gray II",
281
+ # "A page about the JoysOfDocumentation..." )
46
282
  #
47
- # # then we want to update page data and the index together, or not at all...
48
283
  # wiki = PStore.new("wiki_pages.pstore")
49
- # wiki.transaction do # begin transaction; do all of this or none of it
50
- # # store page...
284
+ # # Update page data and the index together, or not at all.
285
+ # wiki.transaction do
286
+ # # Store page.
51
287
  # wiki[home_page.page_name] = home_page
52
- # # ensure that an index has been created...
288
+ # # Create page index.
53
289
  # wiki[:wiki_index] ||= Array.new
54
- # # update wiki index...
290
+ # # Update wiki index.
55
291
  # wiki[:wiki_index].push(*home_page.wiki_page_references)
56
- # end # commit changes to wiki data store file
57
- #
58
- # ### Some time later... ###
292
+ # end
59
293
  #
60
- # # read wiki data...
61
- # wiki.transaction(true) do # begin read-only transaction, no changes allowed
62
- # wiki.roots.each do |data_root_name|
63
- # p data_root_name
64
- # p wiki[data_root_name]
294
+ # # Read wiki data, setting argument read_only to true.
295
+ # wiki.transaction(true) do
296
+ # wiki.keys.each do |key|
297
+ # puts key
298
+ # puts wiki[key]
65
299
  # end
66
300
  # end
67
301
  #
68
- # ## Transaction modes
69
- #
70
- # By default, file integrity is only ensured as long as the operating system
71
- # (and the underlying hardware) doesn't raise any unexpected I/O errors. If an
72
- # I/O error occurs while PStore is writing to its file, then the file will
73
- # become corrupted.
74
- #
75
- # You can prevent this by setting *pstore.ultra_safe = true*. However, this
76
- # results in a minor performance loss, and only works on platforms that support
77
- # atomic file renames. Please consult the documentation for `ultra_safe` for
78
- # details.
79
- #
80
- # Needless to say, if you're storing valuable data with PStore, then you should
81
- # backup the PStore files from time to time.
82
- #
83
302
  class PStore
84
- public
85
-
86
303
  # <!--
87
304
  # rdoc-file=lib/pstore.rb
88
- # - [](name)
305
+ # - [](key)
89
306
  # -->
90
- # Retrieves a value from the PStore file data, by *name*. The hierarchy of Ruby
91
- # objects stored under that root *name* will be returned.
307
+ # Returns the value for the given `key` if the key exists. `nil` otherwise; if
308
+ # not `nil`, the returned value is an object or a hierarchy of objects:
309
+ #
310
+ # example_store do |store|
311
+ # store.transaction do
312
+ # store[:foo] # => 0
313
+ # store[:nope] # => nil
314
+ # end
315
+ # end
316
+ #
317
+ # Returns `nil` if there is no such key.
92
318
  #
93
- # **WARNING**: This method is only valid in a PStore#transaction. It will
94
- # raise PStore::Error if called at any other time.
319
+ # See also [Hierarchical Values](rdoc-ref:PStore@Hierarchical+Values).
320
+ #
321
+ # Raises an exception if called outside a transaction block.
95
322
  #
96
323
  def []: (untyped name) -> untyped
97
324
 
98
325
  # <!--
99
326
  # rdoc-file=lib/pstore.rb
100
- # - []=(name, value)
327
+ # - []=(key, value)
101
328
  # -->
102
- # Stores an individual Ruby object or a hierarchy of Ruby objects in the data
103
- # store file under the root *name*. Assigning to a *name* already in the data
104
- # store clobbers the old data.
105
- #
106
- # ## Example:
329
+ # Creates or replaces the value for the given `key`:
107
330
  #
108
- # require "pstore"
331
+ # example_store do |store|
332
+ # temp.transaction do
333
+ # temp[:bat] = 3
334
+ # end
335
+ # end
109
336
  #
110
- # store = PStore.new("data_file.pstore")
111
- # store.transaction do # begin transaction
112
- # # load some data into the store...
113
- # store[:single_object] = "My data..."
114
- # store[:obj_hierarchy] = { "Kev Jackson" => ["rational.rb", "pstore.rb"],
115
- # "James Gray" => ["erb.rb", "pstore.rb"] }
116
- # end # commit changes to data store file
337
+ # See also [Hierarchical Values](rdoc-ref:PStore@Hierarchical+Values).
117
338
  #
118
- # **WARNING**: This method is only valid in a PStore#transaction and it cannot
119
- # be read-only. It will raise PStore::Error if called at any other time.
339
+ # Raises an exception if called outside a transaction block.
120
340
  #
121
341
  def []=: (untyped name, untyped value) -> untyped
122
342
 
@@ -124,24 +344,10 @@ class PStore
124
344
  # rdoc-file=lib/pstore.rb
125
345
  # - abort()
126
346
  # -->
127
- # Ends the current PStore#transaction, discarding any changes to the data store.
128
- #
129
- # ## Example:
130
- #
131
- # require "pstore"
132
- #
133
- # store = PStore.new("data_file.pstore")
134
- # store.transaction do # begin transaction
135
- # store[:one] = 1 # this change is not applied, see below...
136
- # store[:two] = 2 # this change is not applied, see below...
347
+ # Exits the current transaction block, discarding any changes specified in the
348
+ # [transaction block](rdoc-ref:PStore@The+Transaction+Block).
137
349
  #
138
- # store.abort # end transaction here, discard all changes
139
- #
140
- # store[:three] = 3 # this change is never reached
141
- # end
142
- #
143
- # **WARNING**: This method is only valid in a PStore#transaction. It will
144
- # raise PStore::Error if called at any other time.
350
+ # Raises an exception if called outside a transaction block.
145
351
  #
146
352
  def abort: () -> untyped
147
353
 
@@ -149,51 +355,50 @@ class PStore
149
355
  # rdoc-file=lib/pstore.rb
150
356
  # - commit()
151
357
  # -->
152
- # Ends the current PStore#transaction, committing any changes to the data store
153
- # immediately.
154
- #
155
- # ## Example:
156
- #
157
- # require "pstore"
158
- #
159
- # store = PStore.new("data_file.pstore")
160
- # store.transaction do # begin transaction
161
- # # load some data into the store...
162
- # store[:one] = 1
163
- # store[:two] = 2
164
- #
165
- # store.commit # end transaction here, committing changes
358
+ # Exits the current transaction block, committing any changes specified in the
359
+ # [transaction block](rdoc-ref:PStore@The+Transaction+Block).
166
360
  #
167
- # store[:three] = 3 # this change is never reached
168
- # end
169
- #
170
- # **WARNING**: This method is only valid in a PStore#transaction. It will
171
- # raise PStore::Error if called at any other time.
361
+ # Raises an exception if called outside a transaction block.
172
362
  #
173
363
  def commit: () -> nil
174
364
 
175
365
  # <!--
176
366
  # rdoc-file=lib/pstore.rb
177
- # - delete(name)
367
+ # - delete(key)
178
368
  # -->
179
- # Removes an object hierarchy from the data store, by *name*.
369
+ # Removes and returns the value at `key` if it exists:
370
+ #
371
+ # example_store do |store|
372
+ # store.transaction do
373
+ # store[:bat] = 3
374
+ # store.delete(:bat)
375
+ # end
376
+ # end
180
377
  #
181
- # **WARNING**: This method is only valid in a PStore#transaction and it cannot
182
- # be read-only. It will raise PStore::Error if called at any other time.
378
+ # Returns `nil` if there is no such key.
379
+ #
380
+ # Raises an exception if called outside a transaction block.
183
381
  #
184
382
  def delete: (untyped name) -> untyped
185
383
 
186
384
  # <!--
187
385
  # rdoc-file=lib/pstore.rb
188
- # - fetch(name, default=PStore::Error)
386
+ # - fetch(key, default=PStore::Error)
189
387
  # -->
190
- # This method is just like PStore#[], save that you may also provide a *default*
191
- # value for the object. In the event the specified *name* is not found in the
192
- # data store, your *default* will be returned instead. If you do not specify a
193
- # default, PStore::Error will be raised if the object is not found.
388
+ # Like #[], except that it accepts a default value for the store. If the `key`
389
+ # does not exist:
390
+ #
391
+ # * Raises an exception if `default` is `PStore::Error`.
392
+ # * Returns the value of `default` otherwise:
194
393
  #
195
- # **WARNING**: This method is only valid in a PStore#transaction. It will
196
- # raise PStore::Error if called at any other time.
394
+ # example_store do |store|
395
+ # store.transaction do
396
+ # store.fetch(:nope, nil) # => nil
397
+ # store.fetch(:nope) # Raises an exception.
398
+ # end
399
+ # end
400
+ #
401
+ # Raises an exception if called outside a transaction block.
197
402
  #
198
403
  def fetch: (untyped name, ?untyped default) -> untyped
199
404
 
@@ -201,18 +406,16 @@ class PStore
201
406
  # rdoc-file=lib/pstore.rb
202
407
  # - path()
203
408
  # -->
204
- # Returns the path to the data store file.
409
+ # Returns the string file path used to create the store:
410
+ #
411
+ # store.path # => "flat.store"
205
412
  #
206
413
  def path: () -> untyped
207
414
 
208
415
  # <!--
209
416
  # rdoc-file=lib/pstore.rb
210
- # - root?(name)
417
+ # - root?(key)
211
418
  # -->
212
- # Returns true if the supplied *name* is currently in the data store.
213
- #
214
- # **WARNING**: This method is only valid in a PStore#transaction. It will
215
- # raise PStore::Error if called at any other time.
216
419
  #
217
420
  def root?: (untyped name) -> bool
218
421
 
@@ -220,10 +423,6 @@ class PStore
220
423
  # rdoc-file=lib/pstore.rb
221
424
  # - roots()
222
425
  # -->
223
- # Returns the names of all object hierarchies currently in the store.
224
- #
225
- # **WARNING**: This method is only valid in a PStore#transaction. It will
226
- # raise PStore::Error if called at any other time.
227
426
  #
228
427
  def roots: () -> Array[untyped]
229
428
 
@@ -231,44 +430,50 @@ class PStore
231
430
  # rdoc-file=lib/pstore.rb
232
431
  # - transaction(read_only = false) { |pstore| ... }
233
432
  # -->
234
- # Opens a new transaction for the data store. Code executed inside a block
235
- # passed to this method may read and write data to and from the data store file.
433
+ # Opens a transaction block for the store. See
434
+ # [Transactions](rdoc-ref:PStore@Transactions).
236
435
  #
237
- # At the end of the block, changes are committed to the data store
238
- # automatically. You may exit the transaction early with a call to either
239
- # PStore#commit or PStore#abort. See those methods for details about how
240
- # changes are handled. Raising an uncaught Exception in the block is equivalent
241
- # to calling PStore#abort.
436
+ # With argument `read_only` as `false`, the block may both read from and write
437
+ # to the store.
242
438
  #
243
- # If *read_only* is set to `true`, you will only be allowed to read from the
244
- # data store during the transaction and any attempts to change the data will
245
- # raise a PStore::Error.
439
+ # With argument `read_only` as `true`, the block may not include calls to
440
+ # #transaction, #[]=, or #delete.
246
441
  #
247
- # Note that PStore does not support nested transactions.
442
+ # Raises an exception if called within a transaction block.
248
443
  #
249
444
  def transaction: (?untyped read_only) -> untyped
250
445
 
251
446
  # <!-- rdoc-file=lib/pstore.rb -->
252
- # Whether PStore should do its best to prevent file corruptions, even when under
253
- # unlikely-to-occur error conditions such as out-of-space conditions and other
254
- # unusual OS filesystem errors. Setting this flag comes at the price in the form
255
- # of a performance loss.
447
+ # Whether PStore should do its best to prevent file corruptions, even when an
448
+ # unlikely error (such as memory-error or filesystem error) occurs:
256
449
  #
257
- # This flag only has effect on platforms on which file renames are atomic (e.g.
258
- # all POSIX platforms: Linux, MacOS X, FreeBSD, etc). The default value is
259
- # false.
450
+ # * `true`: changes are posted by creating a temporary file, writing the
451
+ # updated data to it, then renaming the file to the given #path. File
452
+ # integrity is maintained. Note: has effect only if the filesystem has
453
+ # atomic file rename (as do POSIX platforms Linux, MacOS, FreeBSD and
454
+ # others).
455
+ #
456
+ # * `false` (the default): changes are posted by rewinding the open file and
457
+ # writing the updated data. File integrity is maintained if the filesystem
458
+ # raises no unexpected I/O error; if such an error occurs during a write to
459
+ # the store, the file may become corrupted.
260
460
  #
261
461
  def ultra_safe: () -> untyped
262
462
 
263
463
  # <!-- rdoc-file=lib/pstore.rb -->
264
- # Whether PStore should do its best to prevent file corruptions, even when under
265
- # unlikely-to-occur error conditions such as out-of-space conditions and other
266
- # unusual OS filesystem errors. Setting this flag comes at the price in the form
267
- # of a performance loss.
464
+ # Whether PStore should do its best to prevent file corruptions, even when an
465
+ # unlikely error (such as memory-error or filesystem error) occurs:
466
+ #
467
+ # * `true`: changes are posted by creating a temporary file, writing the
468
+ # updated data to it, then renaming the file to the given #path. File
469
+ # integrity is maintained. Note: has effect only if the filesystem has
470
+ # atomic file rename (as do POSIX platforms Linux, MacOS, FreeBSD and
471
+ # others).
268
472
  #
269
- # This flag only has effect on platforms on which file renames are atomic (e.g.
270
- # all POSIX platforms: Linux, MacOS X, FreeBSD, etc). The default value is
271
- # false.
473
+ # * `false` (the default): changes are posted by rewinding the open file and
474
+ # writing the updated data. File integrity is maintained if the filesystem
475
+ # raises no unexpected I/O error; if such an error occurs during a write to
476
+ # the store, the file may become corrupted.
272
477
  #
273
478
  def ultra_safe=: (untyped) -> untyped
274
479
 
@@ -311,11 +516,20 @@ class PStore
311
516
  # rdoc-file=lib/pstore.rb
312
517
  # - new(file, thread_safe = false)
313
518
  # -->
314
- # To construct a PStore object, pass in the *file* path where you would like the
315
- # data to be stored.
519
+ # Returns a new PStore object.
520
+ #
521
+ # Argument `file` is the path to the file in which objects are to be stored; if
522
+ # the file exists, it should be one that was written by PStore.
523
+ #
524
+ # path = 't.store'
525
+ # store = PStore.new(path)
526
+ #
527
+ # A PStore object is
528
+ # [reentrant](https://en.wikipedia.org/wiki/Reentrancy_(computing)). If argument
529
+ # `thread_safe` is given as `true`, the object is also thread-safe (at the cost
530
+ # of a small performance penalty):
316
531
  #
317
- # PStore objects are always reentrant. But if *thread_safe* is set to true, then
318
- # it will become thread-safe at the cost of a minor performance hit.
532
+ # store = PStore.new(path, true)
319
533
  #
320
534
  def initialize: (untyped file, ?boolish thread_safe) -> untyped
321
535
 
@@ -0,0 +1,12 @@
1
+ %a{annotate:rdoc:skip}
2
+ class Object
3
+ # <!--
4
+ # rdoc-file=ext/psych/lib/psych/core_ext.rb
5
+ # - to_yaml(options = {})
6
+ # -->
7
+ # Convert an object to YAML. See Psych.dump for more information on the
8
+ # available `options`.
9
+ #
10
+ def to_yaml: (?indentation: Integer, ?line_width: Integer, ?canonical: bool, ?header: bool) -> String
11
+ | [IO] (IO, ?indentation: Integer, ?line_width: Integer, ?canonical: bool, ?header: bool) -> IO
12
+ end