rbs 3.3.2 → 3.4.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -5
  3. data/.github/workflows/ruby.yml +7 -8
  4. data/.github/workflows/typecheck.yml +37 -0
  5. data/CHANGELOG.md +50 -0
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +11 -11
  8. data/Steepfile +2 -2
  9. data/core/array.rbs +19 -49
  10. data/core/basic_object.rbs +2 -2
  11. data/core/comparable.rbs +17 -8
  12. data/core/complex.rbs +82 -43
  13. data/core/data.rbs +2 -4
  14. data/core/dir.rbs +635 -295
  15. data/core/enumerable.rbs +11 -18
  16. data/core/enumerator.rbs +37 -31
  17. data/core/errors.rbs +4 -0
  18. data/core/false_class.rbs +34 -15
  19. data/core/fiber.rbs +23 -0
  20. data/core/file.rbs +329 -120
  21. data/core/float.rbs +17 -32
  22. data/core/gc.rbs +17 -11
  23. data/core/hash.rbs +22 -44
  24. data/core/integer.rbs +82 -113
  25. data/core/io/buffer.rbs +90 -47
  26. data/core/io.rbs +39 -116
  27. data/core/kernel.rbs +442 -489
  28. data/core/match_data.rbs +55 -56
  29. data/core/module.rbs +45 -1
  30. data/core/nil_class.rbs +98 -35
  31. data/core/numeric.rbs +22 -32
  32. data/core/object_space/weak_key_map.rbs +102 -0
  33. data/core/process.rbs +1242 -655
  34. data/core/ractor.rbs +139 -120
  35. data/core/range.rbs +100 -4
  36. data/core/rational.rbs +0 -4
  37. data/core/rbs/unnamed/argf.rbs +16 -8
  38. data/core/rbs/unnamed/env_class.rbs +0 -24
  39. data/core/refinement.rbs +8 -0
  40. data/core/regexp.rbs +1149 -598
  41. data/core/ruby_vm.rbs +126 -12
  42. data/core/rubygems/platform.rbs +9 -0
  43. data/core/rubygems/rubygems.rbs +1 -1
  44. data/core/rubygems/version.rbs +5 -1
  45. data/core/set.rbs +20 -22
  46. data/core/signal.rbs +4 -4
  47. data/core/string.rbs +283 -230
  48. data/core/string_io.rbs +2 -14
  49. data/core/struct.rbs +404 -24
  50. data/core/symbol.rbs +1 -19
  51. data/core/thread.rbs +29 -12
  52. data/core/time.rbs +227 -104
  53. data/core/trace_point.rbs +2 -5
  54. data/core/true_class.rbs +54 -21
  55. data/core/warning.rbs +14 -11
  56. data/docs/data_and_struct.md +29 -0
  57. data/docs/syntax.md +3 -5
  58. data/docs/tools.md +1 -0
  59. data/ext/rbs_extension/lexer.c +643 -559
  60. data/ext/rbs_extension/lexer.re +5 -1
  61. data/ext/rbs_extension/parser.c +12 -3
  62. data/ext/rbs_extension/unescape.c +7 -47
  63. data/lib/rbs/cli/diff.rb +4 -1
  64. data/lib/rbs/cli/validate.rb +280 -0
  65. data/lib/rbs/cli.rb +2 -194
  66. data/lib/rbs/collection/config.rb +5 -6
  67. data/lib/rbs/collection/sources/git.rb +1 -1
  68. data/lib/rbs/collection.rb +1 -0
  69. data/lib/rbs/diff.rb +7 -4
  70. data/lib/rbs/errors.rb +11 -0
  71. data/lib/rbs/test/errors.rb +4 -1
  72. data/lib/rbs/test/guaranteed.rb +2 -3
  73. data/lib/rbs/test/type_check.rb +15 -10
  74. data/lib/rbs/test.rb +3 -3
  75. data/lib/rbs/types.rb +29 -0
  76. data/lib/rbs/unit_test/convertibles.rb +176 -0
  77. data/lib/rbs/unit_test/spy.rb +136 -0
  78. data/lib/rbs/unit_test/type_assertions.rb +341 -0
  79. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  80. data/lib/rbs/unit_test.rb +6 -0
  81. data/lib/rbs/version.rb +1 -1
  82. data/sig/cli/validate.rbs +43 -0
  83. data/sig/diff.rbs +3 -1
  84. data/sig/errors.rbs +8 -0
  85. data/sig/rbs.rbs +1 -1
  86. data/sig/test/errors.rbs +52 -0
  87. data/sig/test/guranteed.rbs +9 -0
  88. data/sig/test/type_check.rbs +19 -0
  89. data/sig/test.rbs +82 -0
  90. data/sig/types.rbs +6 -1
  91. data/sig/unit_test/convertibles.rbs +154 -0
  92. data/sig/unit_test/spy.rbs +28 -0
  93. data/sig/unit_test/type_assertions.rbs +194 -0
  94. data/sig/unit_test/with_aliases.rbs +136 -0
  95. data/stdlib/base64/0/base64.rbs +307 -45
  96. data/stdlib/bigdecimal/0/big_decimal.rbs +35 -15
  97. data/stdlib/coverage/0/coverage.rbs +2 -2
  98. data/stdlib/csv/0/csv.rbs +25 -55
  99. data/stdlib/date/0/date.rbs +1 -43
  100. data/stdlib/date/0/date_time.rbs +1 -13
  101. data/stdlib/delegate/0/delegator.rbs +186 -0
  102. data/stdlib/delegate/0/kernel.rbs +47 -0
  103. data/stdlib/delegate/0/simple_delegator.rbs +98 -0
  104. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -1
  105. data/stdlib/erb/0/erb.rbs +2 -2
  106. data/stdlib/fileutils/0/fileutils.rbs +0 -19
  107. data/stdlib/io-console/0/io-console.rbs +12 -1
  108. data/stdlib/ipaddr/0/ipaddr.rbs +2 -1
  109. data/stdlib/json/0/json.rbs +320 -81
  110. data/stdlib/logger/0/logger.rbs +9 -5
  111. data/stdlib/monitor/0/monitor.rbs +78 -0
  112. data/stdlib/net-http/0/net-http.rbs +1880 -543
  113. data/stdlib/objspace/0/objspace.rbs +19 -13
  114. data/stdlib/openssl/0/openssl.rbs +508 -127
  115. data/stdlib/optparse/0/optparse.rbs +25 -11
  116. data/stdlib/pathname/0/pathname.rbs +1 -1
  117. data/stdlib/pp/0/pp.rbs +2 -5
  118. data/stdlib/prettyprint/0/prettyprint.rbs +2 -2
  119. data/stdlib/pstore/0/pstore.rbs +2 -4
  120. data/stdlib/rdoc/0/comment.rbs +1 -2
  121. data/stdlib/resolv/0/resolv.rbs +4 -2
  122. data/stdlib/socket/0/socket.rbs +2 -2
  123. data/stdlib/socket/0/unix_socket.rbs +2 -2
  124. data/stdlib/strscan/0/string_scanner.rbs +3 -2
  125. data/stdlib/tempfile/0/tempfile.rbs +1 -1
  126. data/stdlib/uri/0/common.rbs +245 -123
  127. metadata +23 -4
  128. data/lib/rbs/test/spy.rb +0 -6
@@ -1,42 +1,215 @@
1
1
  # <!-- rdoc-file=lib/base64.rb -->
2
- # The Base64 module provides for the encoding (#encode64, #strict_encode64,
3
- # #urlsafe_encode64) and decoding (#decode64, #strict_decode64,
4
- # #urlsafe_decode64) of binary data using a Base64 representation.
2
+ # Module Base64 provides methods for:
5
3
  #
6
- # ## Example
4
+ # * Encoding a binary string (containing non-ASCII characters) as a string of
5
+ # printable ASCII characters.
6
+ # * Decoding such an encoded string.
7
7
  #
8
- # A simple encoding and decoding.
9
8
  #
10
- # require "base64"
9
+ # Base64 is commonly used in contexts where binary data is not allowed or
10
+ # supported:
11
11
  #
12
- # enc = Base64.encode64('Send reinforcements')
13
- # # -> "U2VuZCByZWluZm9yY2VtZW50cw==\n"
14
- # plain = Base64.decode64(enc)
15
- # # -> "Send reinforcements"
12
+ # * Images in HTML or CSS files, or in URLs.
13
+ # * Email attachments.
16
14
  #
17
- # The purpose of using base64 to encode data is that it translates any binary
18
- # data into purely printable characters.
15
+ #
16
+ # A Base64-encoded string is about one-third larger that its source. See the
17
+ # [Wikipedia article](https://en.wikipedia.org/wiki/Base64) for more
18
+ # information.
19
+ #
20
+ # This module provides three pairs of encode/decode methods. Your choices among
21
+ # these methods should depend on:
22
+ #
23
+ # * Which character set is to be used for encoding and decoding.
24
+ # * Whether "padding" is to be used.
25
+ # * Whether encoded strings are to contain newlines.
26
+ #
27
+ #
28
+ # Note: Examples on this page assume that the including program has executed:
29
+ #
30
+ # require 'base64'
31
+ #
32
+ # ## Encoding Character Sets
33
+ #
34
+ # A Base64-encoded string consists only of characters from a 64-character set:
35
+ #
36
+ # * `('A'..'Z')`.
37
+ # * `('a'..'z')`.
38
+ # * `('0'..'9')`.
39
+ # * `=`, the 'padding' character.
40
+ # * Either:
41
+ # * `%w[+ /]`:
42
+ # [RFC-2045-compliant](https://datatracker.ietf.org/doc/html/rfc2045);
43
+ # *not* safe for URLs.
44
+ # * `%w[- _]`:
45
+ # [RFC-4648-compliant](https://datatracker.ietf.org/doc/html/rfc4648);
46
+ # safe for URLs.
47
+ #
48
+ #
49
+ #
50
+ # If you are working with Base64-encoded strings that will come from or be put
51
+ # into URLs, you should choose this encoder-decoder pair of RFC-4648-compliant
52
+ # methods:
53
+ #
54
+ # * Base64.urlsafe_encode64 and Base64.urlsafe_decode64.
55
+ #
56
+ #
57
+ # Otherwise, you may choose any of the pairs in this module, including the pair
58
+ # above, or the RFC-2045-compliant pairs:
59
+ #
60
+ # * Base64.encode64 and Base64.decode64.
61
+ # * Base64.strict_encode64 and Base64.strict_decode64.
62
+ #
63
+ #
64
+ # ## Padding
65
+ #
66
+ # Base64-encoding changes a triplet of input bytes into a quartet of output
67
+ # characters.
68
+ #
69
+ # **Padding in Encode Methods**
70
+ #
71
+ # Padding -- extending an encoded string with zero, one, or two trailing `=`
72
+ # characters -- is performed by methods Base64.encode64, Base64.strict_encode64,
73
+ # and, by default, Base64.urlsafe_encode64:
74
+ #
75
+ # Base64.encode64('s') # => "cw==\n"
76
+ # Base64.strict_encode64('s') # => "cw=="
77
+ # Base64.urlsafe_encode64('s') # => "cw=="
78
+ # Base64.urlsafe_encode64('s', padding: false) # => "cw"
79
+ #
80
+ # When padding is performed, the encoded string is always of length *4n*, where
81
+ # `n` is a non-negative integer:
82
+ #
83
+ # * Input bytes of length *3n* generate unpadded output characters of length
84
+ # *4n*:
85
+ #
86
+ # # n = 1: 3 bytes => 4 characters.
87
+ # Base64.strict_encode64('123') # => "MDEy"
88
+ # # n = 2: 6 bytes => 8 characters.
89
+ # Base64.strict_encode64('123456') # => "MDEyMzQ1"
90
+ #
91
+ # * Input bytes of length *3n+1* generate padded output characters of length
92
+ # *4(n+1)*, with two padding characters at the end:
93
+ #
94
+ # # n = 1: 4 bytes => 8 characters.
95
+ # Base64.strict_encode64('1234') # => "MDEyMw=="
96
+ # # n = 2: 7 bytes => 12 characters.
97
+ # Base64.strict_encode64('1234567') # => "MDEyMzQ1Ng=="
98
+ #
99
+ # * Input bytes of length *3n+2* generate padded output characters of length
100
+ # *4(n+1)*, with one padding character at the end:
101
+ #
102
+ # # n = 1: 5 bytes => 8 characters.
103
+ # Base64.strict_encode64('12345') # => "MDEyMzQ="
104
+ # # n = 2: 8 bytes => 12 characters.
105
+ # Base64.strict_encode64('12345678') # => "MDEyMzQ1Njc="
106
+ #
107
+ #
108
+ # When padding is suppressed, for a positive integer *n*:
109
+ #
110
+ # * Input bytes of length *3n* generate unpadded output characters of length
111
+ # *4n*:
112
+ #
113
+ # # n = 1: 3 bytes => 4 characters.
114
+ # Base64.urlsafe_encode64('123', padding: false) # => "MDEy"
115
+ # # n = 2: 6 bytes => 8 characters.
116
+ # Base64.urlsafe_encode64('123456', padding: false) # => "MDEyMzQ1"
117
+ #
118
+ # * Input bytes of length *3n+1* generate unpadded output characters of length
119
+ # *4n+2*, with two padding characters at the end:
120
+ #
121
+ # # n = 1: 4 bytes => 6 characters.
122
+ # Base64.urlsafe_encode64('1234', padding: false) # => "MDEyMw"
123
+ # # n = 2: 7 bytes => 10 characters.
124
+ # Base64.urlsafe_encode64('1234567', padding: false) # => "MDEyMzQ1Ng"
125
+ #
126
+ # * Input bytes of length *3n+2* generate unpadded output characters of length
127
+ # *4n+3*, with one padding character at the end:
128
+ #
129
+ # # n = 1: 5 bytes => 7 characters.
130
+ # Base64.urlsafe_encode64('12345', padding: false) # => "MDEyMzQ"
131
+ # # m = 2: 8 bytes => 11 characters.
132
+ # Base64.urlsafe_encode64('12345678', padding: false) # => "MDEyMzQ1Njc"
133
+ #
134
+ #
135
+ # **Padding in Decode Methods**
136
+ #
137
+ # All of the Base64 decode methods support (but do not require) padding.
138
+ #
139
+ # Method Base64.decode64 does not check the size of the padding:
140
+ #
141
+ # Base64.decode64("MDEyMzQ1Njc") # => "01234567"
142
+ # Base64.decode64("MDEyMzQ1Njc=") # => "01234567"
143
+ # Base64.decode64("MDEyMzQ1Njc==") # => "01234567"
144
+ #
145
+ # Method Base64.strict_decode64 strictly enforces padding size:
146
+ #
147
+ # Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError
148
+ # Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567"
149
+ # Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError
150
+ #
151
+ # Method Base64.urlsafe_decode64 allows padding in `str`, which if present, must
152
+ # be correct: see [Padding](Base64.html#module-Base64-label-Padding), above:
153
+ #
154
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567"
155
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567"
156
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError.
157
+ #
158
+ # ## Newlines
159
+ #
160
+ # An encoded string returned by Base64.encode64 or Base64.urlsafe_encode64 has
161
+ # an embedded newline character after each 60-character sequence, and, if
162
+ # non-empty, at the end:
163
+ #
164
+ # # No newline if empty.
165
+ # encoded = Base64.encode64("\x00" * 0)
166
+ # encoded.index("\n") # => nil
167
+ #
168
+ # # Newline at end of short output.
169
+ # encoded = Base64.encode64("\x00" * 1)
170
+ # encoded.size # => 4
171
+ # encoded.index("\n") # => 4
172
+ #
173
+ # # Newline at end of longer output.
174
+ # encoded = Base64.encode64("\x00" * 45)
175
+ # encoded.size # => 60
176
+ # encoded.index("\n") # => 60
177
+ #
178
+ # # Newlines embedded and at end of still longer output.
179
+ # encoded = Base64.encode64("\x00" * 46)
180
+ # encoded.size # => 65
181
+ # encoded.rindex("\n") # => 65
182
+ # encoded.split("\n").map {|s| s.size } # => [60, 4]
183
+ #
184
+ # The string to be encoded may itself contain newlines, which are encoded as
185
+ # Base64:
186
+ #
187
+ # # Base64.encode64("\n\n\n") # => "CgoK\n"
188
+ # s = "This is line 1\nThis is line 2\n"
189
+ # Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n"
19
190
  #
20
191
  module Base64
21
192
  # <!--
22
193
  # rdoc-file=lib/base64.rb
23
194
  # - decode64(str)
24
195
  # -->
25
- # Returns the Base64-decoded version of `str`. This method complies with RFC
26
- # 2045. Characters outside the base alphabet are ignored.
196
+ # Returns a string containing the decoding of an RFC-2045-compliant
197
+ # Base64-encoded string `str`:
27
198
  #
28
- # require 'base64'
29
- # str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' +
30
- # 'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' +
31
- # 'ZSB0aHJlZQpBbmQgc28gb24uLi4K'
32
- # puts Base64.decode64(str)
199
+ # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n"
200
+ # Base64.decode64(s) # => "This is line 1\nThis is line 2\n"
33
201
  #
34
- # *Generates:*
202
+ # Non-Base64 characters in `str` are ignored; see [Encoding Character
203
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: these
204
+ # include newline characters and characters `-` and `/`:
35
205
  #
36
- # This is line one
37
- # This is line two
38
- # This is line three
39
- # And so on...
206
+ # Base64.decode64("\x00\n-_") # => ""
207
+ #
208
+ # Padding in `str` (even if incorrect) is ignored:
209
+ #
210
+ # Base64.decode64("MDEyMzQ1Njc") # => "01234567"
211
+ # Base64.decode64("MDEyMzQ1Njc=") # => "01234567"
212
+ # Base64.decode64("MDEyMzQ1Njc==") # => "01234567"
40
213
  #
41
214
  def self?.decode64: (String str) -> String
42
215
 
@@ -44,16 +217,34 @@ module Base64
44
217
  # rdoc-file=lib/base64.rb
45
218
  # - encode64(bin)
46
219
  # -->
47
- # Returns the Base64-encoded version of `bin`. This method complies with RFC
48
- # 2045. Line feeds are added to every 60 encoded characters.
220
+ # Returns a string containing the RFC-2045-compliant Base64-encoding of `bin`.
221
+ #
222
+ # Per RFC 2045, the returned string may contain the URL-unsafe characters `+` or
223
+ # `/`; see [Encoding Character
224
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above:
225
+ #
226
+ # Base64.encode64("\xFB\xEF\xBE") # => "++++\n"
227
+ # Base64.encode64("\xFF\xFF\xFF") # => "////\n"
228
+ #
229
+ # The returned string may include padding; see
230
+ # [Padding](Base64.html#module-Base64-label-Padding) above.
49
231
  #
50
- # require 'base64'
51
- # Base64.encode64("Now is the time for all good coders\nto learn Ruby")
232
+ # Base64.encode64('*') # => "Kg==\n"
52
233
  #
53
- # *Generates:*
234
+ # The returned string ends with a newline character, and if sufficiently long
235
+ # will have one or more embedded newline characters; see
236
+ # [Newlines](Base64.html#module-Base64-label-Newlines) above:
54
237
  #
55
- # Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g
56
- # UnVieQ==
238
+ # Base64.encode64('*') # => "Kg==\n"
239
+ # Base64.encode64('*' * 46)
240
+ # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq\nKg==\n"
241
+ #
242
+ # The string to be encoded may itself contain newlines, which will be encoded as
243
+ # ordinary Base64:
244
+ #
245
+ # Base64.encode64("\n\n\n") # => "CgoK\n"
246
+ # s = "This is line 1\nThis is line 2\n"
247
+ # Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n"
57
248
  #
58
249
  def self?.encode64: (String bin) -> String
59
250
 
@@ -61,9 +252,25 @@ module Base64
61
252
  # rdoc-file=lib/base64.rb
62
253
  # - strict_decode64(str)
63
254
  # -->
64
- # Returns the Base64-decoded version of `str`. This method complies with RFC
65
- # 4648. ArgumentError is raised if `str` is incorrectly padded or contains
66
- # non-alphabet characters. Note that CR or LF are also rejected.
255
+ # Returns a string containing the decoding of an RFC-2045-compliant
256
+ # Base64-encoded string `str`:
257
+ #
258
+ # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK"
259
+ # Base64.strict_decode64(s) # => "This is line 1\nThis is line 2\n"
260
+ #
261
+ # Non-Base64 characters in `str` not allowed; see [Encoding Character
262
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: these
263
+ # include newline characters and characters `-` and `/`:
264
+ #
265
+ # Base64.strict_decode64("\n") # Raises ArgumentError
266
+ # Base64.strict_decode64('-') # Raises ArgumentError
267
+ # Base64.strict_decode64('_') # Raises ArgumentError
268
+ #
269
+ # Padding in `str`, if present, must be correct:
270
+ #
271
+ # Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError
272
+ # Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567"
273
+ # Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError
67
274
  #
68
275
  def self?.strict_decode64: (String str) -> String
69
276
 
@@ -71,8 +278,33 @@ module Base64
71
278
  # rdoc-file=lib/base64.rb
72
279
  # - strict_encode64(bin)
73
280
  # -->
74
- # Returns the Base64-encoded version of `bin`. This method complies with RFC
75
- # 4648. No line feeds are added.
281
+ # Returns a string containing the RFC-2045-compliant Base64-encoding of `bin`.
282
+ #
283
+ # Per RFC 2045, the returned string may contain the URL-unsafe characters `+` or
284
+ # `/`; see [Encoding Character
285
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above:
286
+ #
287
+ # Base64.strict_encode64("\xFB\xEF\xBE") # => "++++\n"
288
+ # Base64.strict_encode64("\xFF\xFF\xFF") # => "////\n"
289
+ #
290
+ # The returned string may include padding; see
291
+ # [Padding](Base64.html#module-Base64-label-Padding) above.
292
+ #
293
+ # Base64.strict_encode64('*') # => "Kg==\n"
294
+ #
295
+ # The returned string will have no newline characters, regardless of its length;
296
+ # see [Newlines](Base64.html#module-Base64-label-Newlines) above:
297
+ #
298
+ # Base64.strict_encode64('*') # => "Kg=="
299
+ # Base64.strict_encode64('*' * 46)
300
+ # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg=="
301
+ #
302
+ # The string to be encoded may itself contain newlines, which will be encoded as
303
+ # ordinary Base64:
304
+ #
305
+ # Base64.strict_encode64("\n\n\n") # => "CgoK"
306
+ # s = "This is line 1\nThis is line 2\n"
307
+ # Base64.strict_encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK"
76
308
  #
77
309
  def self?.strict_encode64: (String bin) -> String
78
310
 
@@ -80,12 +312,21 @@ module Base64
80
312
  # rdoc-file=lib/base64.rb
81
313
  # - urlsafe_decode64(str)
82
314
  # -->
83
- # Returns the Base64-decoded version of `str`. This method complies with ``Base
84
- # 64 Encoding with URL and Filename Safe Alphabet'' in RFC 4648. The alphabet
85
- # uses '-' instead of '+' and '_' instead of '/'.
315
+ # Returns the decoding of an RFC-4648-compliant Base64-encoded string `str`:
316
+ #
317
+ # `str` may not contain non-Base64 characters; see [Encoding Character
318
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above:
86
319
  #
87
- # The padding character is optional. This method accepts both correctly-padded
88
- # and unpadded input. Note that it still rejects incorrectly-padded input.
320
+ # Base64.urlsafe_decode64('+') # Raises ArgumentError.
321
+ # Base64.urlsafe_decode64('/') # Raises ArgumentError.
322
+ # Base64.urlsafe_decode64("\n") # Raises ArgumentError.
323
+ #
324
+ # Padding in `str`, if present, must be correct: see
325
+ # [Padding](Base64.html#module-Base64-label-Padding), above:
326
+ #
327
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567"
328
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567"
329
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError.
89
330
  #
90
331
  def self?.urlsafe_decode64: (String str) -> String
91
332
 
@@ -93,10 +334,31 @@ module Base64
93
334
  # rdoc-file=lib/base64.rb
94
335
  # - urlsafe_encode64(bin, padding: true)
95
336
  # -->
96
- # Returns the Base64-encoded version of `bin`. This method complies with ``Base
97
- # 64 Encoding with URL and Filename Safe Alphabet'' in RFC 4648. The alphabet
98
- # uses '-' instead of '+' and '_' instead of '/'. Note that the result can still
99
- # contain '='. You can remove the padding by setting `padding` as false.
337
+ # Returns the RFC-4648-compliant Base64-encoding of `bin`.
338
+ #
339
+ # Per RFC 4648, the returned string will not contain the URL-unsafe characters
340
+ # `+` or `/`, but instead may contain the URL-safe characters `-` and `_`; see
341
+ # [Encoding Character
342
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above:
343
+ #
344
+ # Base64.urlsafe_encode64("\xFB\xEF\xBE") # => "----"
345
+ # Base64.urlsafe_encode64("\xFF\xFF\xFF") # => "____"
346
+ #
347
+ # By default, the returned string may have padding; see
348
+ # [Padding](Base64.html#module-Base64-label-Padding), above:
349
+ #
350
+ # Base64.urlsafe_encode64('*') # => "Kg=="
351
+ #
352
+ # Optionally, you can suppress padding:
353
+ #
354
+ # Base64.urlsafe_encode64('*', padding: false) # => "Kg"
355
+ #
356
+ # The returned string will have no newline characters, regardless of its length;
357
+ # see [Newlines](Base64.html#module-Base64-label-Newlines) above:
358
+ #
359
+ # Base64.urlsafe_encode64('*') # => "Kg=="
360
+ # Base64.urlsafe_encode64('*' * 46)
361
+ # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg=="
100
362
  #
101
363
  def self?.urlsafe_encode64: (String bin, ?padding: boolish) -> String
102
364
  end
@@ -122,7 +122,23 @@
122
122
  # (2/3r).to_d(3) # => 0.667e0
123
123
  # "0.5".to_d # => 0.5e0
124
124
  #
125
- # ## License
125
+ # ## Methods for Working with JSON
126
+ #
127
+ # * [::json_create](rdoc-ref:BigDecimal.json_create): Returns a new BigDecimal
128
+ # object constructed from the given object.
129
+ # * [#as_json](rdoc-ref:BigDecimal#as_json): Returns a 2-element hash
130
+ # representing `self`.
131
+ # * [#to_json](rdoc-ref:BigDecimal#to_json): Returns a JSON string
132
+ # representing `self`.
133
+ #
134
+ #
135
+ # These methods are provided by the [JSON gem](https://github.com/flori/json).
136
+ # To make these methods available:
137
+ #
138
+ # require 'json/add/bigdecimal'
139
+ #
140
+ # * ## License
141
+ #
126
142
  #
127
143
  # Copyright (C) 2002 by Shigeo Kobayashi <shigeo@tinyforest.gr.jp>.
128
144
  #
@@ -145,8 +161,12 @@ class BigDecimal < Numeric
145
161
 
146
162
  # <!--
147
163
  # rdoc-file=ext/bigdecimal/bigdecimal.c
148
- # - double_fig()
164
+ # - BigDecimal.double_fig -> integer
149
165
  # -->
166
+ # Returns the number of digits a Float object is allowed to have; the result is
167
+ # system-dependent:
168
+ #
169
+ # BigDecimal.double_fig # => 16
150
170
  #
151
171
  def self.double_fig: () -> Integer
152
172
 
@@ -1135,7 +1155,7 @@ class BigDecimal < Numeric
1135
1155
  # A space at the start of s returns positive values with a leading space.
1136
1156
  #
1137
1157
  # If s contains a number, a space is inserted after each group of that many
1138
- # fractional digits.
1158
+ # digits, starting from '.' and counting outwards.
1139
1159
  #
1140
1160
  # If s ends with an 'E', engineering notation (0.xxxxEnn) is used.
1141
1161
  #
@@ -1143,14 +1163,14 @@ class BigDecimal < Numeric
1143
1163
  #
1144
1164
  # Examples:
1145
1165
  #
1146
- # BigDecimal('-123.45678901234567890').to_s('5F')
1147
- # #=> '-123.45678 90123 45678 9'
1166
+ # BigDecimal('-1234567890123.45678901234567890').to_s('5F')
1167
+ # #=> '-123 45678 90123.45678 90123 45678 9'
1148
1168
  #
1149
- # BigDecimal('123.45678901234567890').to_s('+8F')
1150
- # #=> '+123.45678901 23456789'
1169
+ # BigDecimal('1234567890123.45678901234567890').to_s('+8F')
1170
+ # #=> '+12345 67890123.45678901 23456789'
1151
1171
  #
1152
- # BigDecimal('123.45678901234567890').to_s(' F')
1153
- # #=> ' 123.4567890123456789'
1172
+ # BigDecimal('1234567890123.45678901234567890').to_s(' F')
1173
+ # #=> ' 1234567890123.4567890123456789'
1154
1174
  #
1155
1175
  def to_s: (?String | int s) -> String
1156
1176
 
@@ -1383,7 +1403,7 @@ module Kernel
1383
1403
  # * Other type:
1384
1404
  #
1385
1405
  # * Raises an exception if keyword argument `exception` is `true`.
1386
- # * Returns `nil` if keyword argument `exception` is `true`.
1406
+ # * Returns `nil` if keyword argument `exception` is `false`.
1387
1407
  #
1388
1408
  #
1389
1409
  #
@@ -1406,7 +1426,7 @@ class Integer
1406
1426
  #
1407
1427
  # 42.to_d # => 0.42e2
1408
1428
  #
1409
- # See also BigDecimal::new.
1429
+ # See also Kernel.BigDecimal.
1410
1430
  #
1411
1431
  def to_d: () -> BigDecimal
1412
1432
 
@@ -1498,7 +1518,7 @@ class Float
1498
1518
  # 1.234.to_d # => 0.1234e1
1499
1519
  # 1.234.to_d(2) # => 0.12e1
1500
1520
  #
1501
- # See also BigDecimal::new.
1521
+ # See also Kernel.BigDecimal.
1502
1522
  #
1503
1523
  def to_d: (?Integer precision) -> BigDecimal
1504
1524
 
@@ -1579,7 +1599,7 @@ class String
1579
1599
  # "123.45e1".to_d # => 0.12345e4
1580
1600
  # "45.67 degrees".to_d # => 0.4567e2
1581
1601
  #
1582
- # See also BigDecimal::new.
1602
+ # See also Kernel.BigDecimal.
1583
1603
  #
1584
1604
  def to_d: () -> BigDecimal
1585
1605
  end
@@ -1600,7 +1620,7 @@ class Rational
1600
1620
  #
1601
1621
  # Rational(22, 7).to_d(3) # => 0.314e1
1602
1622
  #
1603
- # See also BigDecimal::new.
1623
+ # See also Kernel.BigDecimal.
1604
1624
  #
1605
1625
  def to_d: (Integer precision) -> BigDecimal
1606
1626
 
@@ -1685,7 +1705,7 @@ class Complex
1685
1705
  # Complex(0.1234567, 0).to_d(4) # => 0.1235e0
1686
1706
  # Complex(Rational(22, 7), 0).to_d(3) # => 0.314e1
1687
1707
  #
1688
- # See also BigDecimal::new.
1708
+ # See also Kernel.BigDecimal.
1689
1709
  #
1690
1710
  def to_d: (*untyped args) -> BigDecimal
1691
1711
 
@@ -245,8 +245,8 @@ module Coverage
245
245
  # -->
246
246
  # Returns true if coverage measurement is supported for the given mode.
247
247
  #
248
- # The mode should be one of the following symbols: `:lines`, `:branches`,
249
- # `:methods`, `:eval`.
248
+ # The mode should be one of the following symbols: `:lines`, `:oneshot_lines`,
249
+ # `:branches`, `:methods`, `:eval`.
250
250
  #
251
251
  # Example:
252
252
  #