rbs 1.0.6 → 1.1.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +2 -2
  3. data/CHANGELOG.md +37 -0
  4. data/Rakefile +3 -2
  5. data/Steepfile +2 -0
  6. data/bin/rbs-prof +1 -1
  7. data/core/array.rbs +8 -4
  8. data/core/thread.rbs +14 -1
  9. data/lib/rbs.rb +3 -0
  10. data/lib/rbs/ancestor_graph.rb +90 -0
  11. data/lib/rbs/char_scanner.rb +20 -0
  12. data/lib/rbs/definition_builder.rb +38 -20
  13. data/lib/rbs/definition_builder/method_builder.rb +14 -0
  14. data/lib/rbs/environment.rb +42 -5
  15. data/lib/rbs/environment_walker.rb +4 -4
  16. data/lib/rbs/errors.rb +32 -17
  17. data/lib/rbs/parser.rb +437 -416
  18. data/lib/rbs/parser.y +29 -16
  19. data/lib/rbs/test/type_check.rb +7 -3
  20. data/lib/rbs/version.rb +1 -1
  21. data/sig/ancestor_graph.rbs +40 -0
  22. data/sig/char_scanner.rbs +9 -0
  23. data/sig/definition_builder.rbs +5 -1
  24. data/sig/environment.rbs +22 -2
  25. data/sig/environment_walker.rbs +39 -0
  26. data/sig/errors.rbs +42 -17
  27. data/sig/method_builder.rbs +2 -0
  28. data/sig/parser.rbs +11 -4
  29. data/sig/polyfill.rbs +0 -14
  30. data/stdlib/cgi/0/core.rbs +595 -0
  31. data/stdlib/rubygems/0/basic_specification.rbs +3 -0
  32. data/stdlib/rubygems/0/config_file.rbs +3 -0
  33. data/stdlib/rubygems/0/dependency_installer.rbs +5 -0
  34. data/stdlib/rubygems/0/installer.rbs +3 -0
  35. data/stdlib/rubygems/0/path_support.rbs +3 -0
  36. data/stdlib/rubygems/0/platform.rbs +3 -0
  37. data/stdlib/rubygems/0/request_set.rbs +7 -0
  38. data/stdlib/rubygems/0/requirement.rbs +3 -0
  39. data/stdlib/rubygems/0/rubygems.rbs +710 -0
  40. data/stdlib/rubygems/0/source_list.rbs +2 -0
  41. data/stdlib/rubygems/0/specification.rbs +3 -0
  42. data/stdlib/rubygems/0/stream_ui.rbs +3 -0
  43. data/stdlib/rubygems/0/uninstaller.rbs +3 -0
  44. data/stdlib/rubygems/0/version.rbs +228 -0
  45. data/stdlib/strscan/0/string_scanner.rbs +582 -0
  46. metadata +23 -2
@@ -66,6 +66,8 @@ module RBS
66
66
  def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition, accessibility: Methods::Definition::accessibility) -> void
67
67
 
68
68
  def each_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
69
+
70
+ def update: (env: Environment, except: _Each[TypeName]) -> MethodBuilder
69
71
  end
70
72
  end
71
73
  end
data/sig/parser.rbs CHANGED
@@ -1,6 +1,6 @@
1
1
  module RBS
2
2
  class Parser
3
- class SyntaxError < StandardError
3
+ class SyntaxError < ParsingError
4
4
  attr_reader token_str: String
5
5
  attr_reader error_value: untyped
6
6
  attr_reader value_stack: untyped?
@@ -8,7 +8,14 @@ module RBS
8
8
  def initialize: (token_str: String, error_value: untyped, ?value_stack: untyped?) -> void
9
9
  end
10
10
 
11
- class SemanticsError < StandardError
11
+ class LexerError < ParsingError
12
+ attr_reader input: String
13
+ attr_reader location: Location
14
+
15
+ def initialize: (input: String, location: Location) -> void
16
+ end
17
+
18
+ class SemanticsError < ParsingError
12
19
  attr_reader subject: untyped
13
20
  attr_reader location: Location
14
21
  attr_reader original_message: String
@@ -17,9 +24,9 @@ module RBS
17
24
  end
18
25
 
19
26
  def self.parse_method_type: (String | Buffer, ?variables: Array[Symbol], ?eof_re: Regexp?) -> MethodType
20
-
27
+
21
28
  def self.parse_type: (String | Buffer, ?variables: Array[Symbol], ?eof_re: Regexp?) -> Types::t
22
-
29
+
23
30
  def self.parse_signature: (String | Buffer, ?eof_re: Regexp?) -> Array[AST::Declarations::t]
24
31
  end
25
32
  end
data/sig/polyfill.rbs CHANGED
@@ -3,20 +3,6 @@ module Kernel
3
3
  end
4
4
 
5
5
  module Gem
6
- class Version
7
- def self.correct?: (String) -> bool
8
-
9
- def self.create: (String?) -> instance?
10
-
11
- include Comparable
12
-
13
- def prerelease?: () -> bool
14
-
15
- def release: () -> self
16
-
17
- def version: () -> String
18
- end
19
-
20
6
  class Specification
21
7
  attr_reader version (): Version
22
8
 
@@ -0,0 +1,595 @@
1
+ # ## Overview
2
+ #
3
+ # The Common Gateway Interface (CGI) is a simple protocol for passing an HTTP
4
+ # request from a web server to a standalone program, and returning the output to
5
+ # the web browser. Basically, a CGI program is called with the parameters of
6
+ # the request passed in either in the environment (GET) or via $stdin (POST),
7
+ # and everything it prints to $stdout is returned to the client.
8
+ #
9
+ # This file holds the CGI class. This class provides functionality for
10
+ # retrieving HTTP request parameters, managing cookies, and generating HTML
11
+ # output.
12
+ #
13
+ # The file CGI::Session provides session management functionality; see that
14
+ # class for more details.
15
+ #
16
+ # See http://www.w3.org/CGI/ for more information on the CGI protocol.
17
+ #
18
+ # ## Introduction
19
+ #
20
+ # CGI is a large class, providing several categories of methods, many of which
21
+ # are mixed in from other modules. Some of the documentation is in this class,
22
+ # some in the modules CGI::QueryExtension and CGI::HtmlExtension. See
23
+ # CGI::Cookie for specific information on handling cookies, and cgi/session.rb
24
+ # (CGI::Session) for information on sessions.
25
+ #
26
+ # For queries, CGI provides methods to get at environmental variables,
27
+ # parameters, cookies, and multipart request data. For responses, CGI provides
28
+ # methods for writing output and generating HTML.
29
+ #
30
+ # Read on for more details. Examples are provided at the bottom.
31
+ #
32
+ # ## Queries
33
+ #
34
+ # The CGI class dynamically mixes in parameter and cookie-parsing functionality,
35
+ # environmental variable access, and support for parsing multipart requests
36
+ # (including uploaded files) from the CGI::QueryExtension module.
37
+ #
38
+ # ### Environmental Variables
39
+ #
40
+ # The standard CGI environmental variables are available as read-only attributes
41
+ # of a CGI object. The following is a list of these variables:
42
+ #
43
+ # AUTH_TYPE HTTP_HOST REMOTE_IDENT
44
+ # CONTENT_LENGTH HTTP_NEGOTIATE REMOTE_USER
45
+ # CONTENT_TYPE HTTP_PRAGMA REQUEST_METHOD
46
+ # GATEWAY_INTERFACE HTTP_REFERER SCRIPT_NAME
47
+ # HTTP_ACCEPT HTTP_USER_AGENT SERVER_NAME
48
+ # HTTP_ACCEPT_CHARSET PATH_INFO SERVER_PORT
49
+ # HTTP_ACCEPT_ENCODING PATH_TRANSLATED SERVER_PROTOCOL
50
+ # HTTP_ACCEPT_LANGUAGE QUERY_STRING SERVER_SOFTWARE
51
+ # HTTP_CACHE_CONTROL REMOTE_ADDR
52
+ # HTTP_FROM REMOTE_HOST
53
+ #
54
+ # For each of these variables, there is a corresponding attribute with the same
55
+ # name, except all lower case and without a preceding HTTP_. `content_length`
56
+ # and `server_port` are integers; the rest are strings.
57
+ #
58
+ # ### Parameters
59
+ #
60
+ # The method #params() returns a hash of all parameters in the request as
61
+ # name/value-list pairs, where the value-list is an Array of one or more values.
62
+ # The CGI object itself also behaves as a hash of parameter names to values,
63
+ # but only returns a single value (as a String) for each parameter name.
64
+ #
65
+ # For instance, suppose the request contains the parameter "favourite_colours"
66
+ # with the multiple values "blue" and "green". The following behavior would
67
+ # occur:
68
+ #
69
+ # cgi.params["favourite_colours"] # => ["blue", "green"]
70
+ # cgi["favourite_colours"] # => "blue"
71
+ #
72
+ # If a parameter does not exist, the former method will return an empty array,
73
+ # the latter an empty string. The simplest way to test for existence of a
74
+ # parameter is by the #has_key? method.
75
+ #
76
+ # ### Cookies
77
+ #
78
+ # HTTP Cookies are automatically parsed from the request. They are available
79
+ # from the #cookies() accessor, which returns a hash from cookie name to
80
+ # CGI::Cookie object.
81
+ #
82
+ # ### Multipart requests
83
+ #
84
+ # If a request's method is POST and its content type is multipart/form-data,
85
+ # then it may contain uploaded files. These are stored by the QueryExtension
86
+ # module in the parameters of the request. The parameter name is the name
87
+ # attribute of the file input field, as usual. However, the value is not a
88
+ # string, but an IO object, either an IOString for small files, or a Tempfile
89
+ # for larger ones. This object also has the additional singleton methods:
90
+ #
91
+ # #local_path()
92
+ # : the path of the uploaded file on the local filesystem
93
+ # #original_filename()
94
+ # : the name of the file on the client computer
95
+ # #content_type()
96
+ # : the content type of the file
97
+ #
98
+ #
99
+ # ## Responses
100
+ #
101
+ # The CGI class provides methods for sending header and content output to the
102
+ # HTTP client, and mixes in methods for programmatic HTML generation from
103
+ # CGI::HtmlExtension and CGI::TagMaker modules. The precise version of HTML to
104
+ # use for HTML generation is specified at object creation time.
105
+ #
106
+ # ### Writing output
107
+ #
108
+ # The simplest way to send output to the HTTP client is using the #out() method.
109
+ # This takes the HTTP headers as a hash parameter, and the body content via a
110
+ # block. The headers can be generated as a string using the #http_header()
111
+ # method. The output stream can be written directly to using the #print()
112
+ # method.
113
+ #
114
+ # ### Generating HTML
115
+ #
116
+ # Each HTML element has a corresponding method for generating that element as a
117
+ # String. The name of this method is the same as that of the element, all
118
+ # lowercase. The attributes of the element are passed in as a hash, and the
119
+ # body as a no-argument block that evaluates to a String. The HTML generation
120
+ # module knows which elements are always empty, and silently drops any passed-in
121
+ # body. It also knows which elements require matching closing tags and which
122
+ # don't. However, it does not know what attributes are legal for which
123
+ # elements.
124
+ #
125
+ # There are also some additional HTML generation methods mixed in from the
126
+ # CGI::HtmlExtension module. These include individual methods for the different
127
+ # types of form inputs, and methods for elements that commonly take particular
128
+ # attributes where the attributes can be directly specified as arguments, rather
129
+ # than via a hash.
130
+ #
131
+ # ### Utility HTML escape and other methods like a function.
132
+ #
133
+ # There are some utility tool defined in cgi/util.rb . And when include, you can
134
+ # use utility methods like a function.
135
+ #
136
+ # ## Examples of use
137
+ #
138
+ # ### Get form values
139
+ #
140
+ # require "cgi"
141
+ # cgi = CGI.new
142
+ # value = cgi['field_name'] # <== value string for 'field_name'
143
+ # # if not 'field_name' included, then return "".
144
+ # fields = cgi.keys # <== array of field names
145
+ #
146
+ # # returns true if form has 'field_name'
147
+ # cgi.has_key?('field_name')
148
+ # cgi.has_key?('field_name')
149
+ # cgi.include?('field_name')
150
+ #
151
+ # CAUTION! [cgi]('field_name') returned an Array with the old cgi.rb(included in
152
+ # Ruby 1.6)
153
+ #
154
+ # ### Get form values as hash
155
+ #
156
+ # require "cgi"
157
+ # cgi = CGI.new
158
+ # params = cgi.params
159
+ #
160
+ # cgi.params is a hash.
161
+ #
162
+ # cgi.params['new_field_name'] = ["value"] # add new param
163
+ # cgi.params['field_name'] = ["new_value"] # change value
164
+ # cgi.params.delete('field_name') # delete param
165
+ # cgi.params.clear # delete all params
166
+ #
167
+ # ### Save form values to file
168
+ #
169
+ # require "pstore"
170
+ # db = PStore.new("query.db")
171
+ # db.transaction do
172
+ # db["params"] = cgi.params
173
+ # end
174
+ #
175
+ # ### Restore form values from file
176
+ #
177
+ # require "pstore"
178
+ # db = PStore.new("query.db")
179
+ # db.transaction do
180
+ # cgi.params = db["params"]
181
+ # end
182
+ #
183
+ # ### Get multipart form values
184
+ #
185
+ # require "cgi"
186
+ # cgi = CGI.new
187
+ # value = cgi['field_name'] # <== value string for 'field_name'
188
+ # value.read # <== body of value
189
+ # value.local_path # <== path to local file of value
190
+ # value.original_filename # <== original filename of value
191
+ # value.content_type # <== content_type of value
192
+ #
193
+ # and value has StringIO or Tempfile class methods.
194
+ #
195
+ # ### Get cookie values
196
+ #
197
+ # require "cgi"
198
+ # cgi = CGI.new
199
+ # values = cgi.cookies['name'] # <== array of 'name'
200
+ # # if not 'name' included, then return [].
201
+ # names = cgi.cookies.keys # <== array of cookie names
202
+ #
203
+ # and cgi.cookies is a hash.
204
+ #
205
+ # ### Get cookie objects
206
+ #
207
+ # require "cgi"
208
+ # cgi = CGI.new
209
+ # for name, cookie in cgi.cookies
210
+ # cookie.expires = Time.now + 30
211
+ # end
212
+ # cgi.out("cookie" => cgi.cookies) {"string"}
213
+ #
214
+ # cgi.cookies # { "name1" => cookie1, "name2" => cookie2, ... }
215
+ #
216
+ # require "cgi"
217
+ # cgi = CGI.new
218
+ # cgi.cookies['name'].expires = Time.now + 30
219
+ # cgi.out("cookie" => cgi.cookies['name']) {"string"}
220
+ #
221
+ # ### Print http header and html string to $DEFAULT_OUTPUT ($>)
222
+ #
223
+ # require "cgi"
224
+ # cgi = CGI.new("html4") # add HTML generation methods
225
+ # cgi.out do
226
+ # cgi.html do
227
+ # cgi.head do
228
+ # cgi.title { "TITLE" }
229
+ # end +
230
+ # cgi.body do
231
+ # cgi.form("ACTION" => "uri") do
232
+ # cgi.p do
233
+ # cgi.textarea("get_text") +
234
+ # cgi.br +
235
+ # cgi.submit
236
+ # end
237
+ # end +
238
+ # cgi.pre do
239
+ # CGI.escapeHTML(
240
+ # "params: #{cgi.params.inspect}\n" +
241
+ # "cookies: #{cgi.cookies.inspect}\n" +
242
+ # ENV.collect do |key, value|
243
+ # "#{key} --> #{value}\n"
244
+ # end.join("")
245
+ # )
246
+ # end
247
+ # end
248
+ # end
249
+ # end
250
+ #
251
+ # # add HTML generation methods
252
+ # CGI.new("html3") # html3.2
253
+ # CGI.new("html4") # html4.01 (Strict)
254
+ # CGI.new("html4Tr") # html4.01 Transitional
255
+ # CGI.new("html4Fr") # html4.01 Frameset
256
+ # CGI.new("html5") # html5
257
+ #
258
+ # ### Some utility methods
259
+ #
260
+ # require 'cgi/util'
261
+ # CGI.escapeHTML('Usage: foo "bar" <baz>')
262
+ #
263
+ # ### Some utility methods like a function
264
+ #
265
+ # require 'cgi/util'
266
+ # include CGI::Util
267
+ # escapeHTML('Usage: foo "bar" <baz>')
268
+ # h('Usage: foo "bar" <baz>') # alias
269
+ class CGI
270
+ # Create a new CGI instance.
271
+ #
272
+ # `tag_maker`
273
+ # : This is the same as using the `options_hash` form with the value `{
274
+ # :tag_maker => tag_maker }` Note that it is recommended to use the
275
+ # `options_hash` form, since it also allows you specify the charset you will
276
+ # accept.
277
+ # `options_hash`
278
+ # : A Hash that recognizes three options:
279
+ #
280
+ # `:accept_charset`
281
+ # : specifies encoding of received query string. If omitted,
282
+ # `@@accept_charset` is used. If the encoding is not valid, a
283
+ # CGI::InvalidEncoding will be raised.
284
+ #
285
+ # Example. Suppose `@@accept_charset` is "UTF-8"
286
+ #
287
+ # when not specified:
288
+ #
289
+ # cgi=CGI.new # @accept_charset # => "UTF-8"
290
+ #
291
+ # when specified as "EUC-JP":
292
+ #
293
+ # cgi=CGI.new(:accept_charset => "EUC-JP") # => "EUC-JP"
294
+ #
295
+ # `:tag_maker`
296
+ # : String that specifies which version of the HTML generation methods to
297
+ # use. If not specified, no HTML generation methods will be loaded.
298
+ #
299
+ # The following values are supported:
300
+ #
301
+ # "html3"
302
+ # : HTML 3.x
303
+ # "html4"
304
+ # : HTML 4.0
305
+ # "html4Tr"
306
+ # : HTML 4.0 Transitional
307
+ # "html4Fr"
308
+ # : HTML 4.0 with Framesets
309
+ # "html5"
310
+ # : HTML 5
311
+ #
312
+ #
313
+ # `:max_multipart_length`
314
+ # : Specifies maximum length of multipart data. Can be an Integer scalar
315
+ # or a lambda, that will be evaluated when the request is parsed. This
316
+ # allows more complex logic to be set when determining whether to accept
317
+ # multipart data (e.g. consult a registered users upload allowance)
318
+ #
319
+ # Default is 128 * 1024 * 1024 bytes
320
+ #
321
+ # cgi=CGI.new(:max_multipart_length => 268435456) # simple scalar
322
+ #
323
+ # cgi=CGI.new(:max_multipart_length => -> {check_filesystem}) # lambda
324
+ #
325
+ #
326
+ # `block`
327
+ # : If provided, the block is called when an invalid encoding is encountered.
328
+ # For example:
329
+ #
330
+ # encoding_errors={}
331
+ # cgi=CGI.new(:accept_charset=>"EUC-JP") do |name,value|
332
+ # encoding_errors[name] = value
333
+ # end
334
+ #
335
+ #
336
+ # Finally, if the CGI object is not created in a standard CGI call environment
337
+ # (that is, it can't locate REQUEST_METHOD in its environment), then it will run
338
+ # in "offline" mode. In this mode, it reads its parameters from the command
339
+ # line or (failing that) from standard input. Otherwise, cookies and other
340
+ # parameters are parsed automatically from the standard CGI locations, which
341
+ # varies according to the REQUEST_METHOD.
342
+ #
343
+ def initialize: (?String tag_maker) ?{ (String name, String value) -> void } -> void
344
+ | (Hash[Symbol, untyped] options_hash) ?{ (String name, String value) -> void } -> void
345
+
346
+ attr_reader accept_charset: String
347
+
348
+ # Return the accept character set for all new CGI instances.
349
+ #
350
+ def self.accept_charset: () -> String
351
+
352
+ # Set the accept character set for all new CGI instances.
353
+ #
354
+ def self.accept_charset=: (String accept_charset) -> String
355
+
356
+ # Parse an HTTP query string into a hash of key=>value pairs.
357
+ #
358
+ # params = CGI.parse("query_string")
359
+ # # {"name1" => ["value1", "value2", ...],
360
+ # # "name2" => ["value1", "value2", ...], ... }
361
+ #
362
+ def self.parse: (String query) -> Hash[String, String | Array[String]]
363
+
364
+ public
365
+
366
+ # This method is an alias for #http_header, when HTML5 tag maker is inactive.
367
+ #
368
+ # NOTE: use #http_header to create HTTP header blocks, this alias is only
369
+ # provided for backwards compatibility.
370
+ #
371
+ # Using #header with the HTML5 tag maker will create a <header> element.
372
+ #
373
+ alias header http_header
374
+
375
+ # Create an HTTP header block as a string.
376
+ #
377
+ # Includes the empty line that ends the header block.
378
+ #
379
+ # `content_type_string`
380
+ # : If this form is used, this string is the `Content-Type`
381
+ # `headers_hash`
382
+ # : A Hash of header values. The following header keys are recognized:
383
+ #
384
+ # type
385
+ # : The Content-Type header. Defaults to "text/html"
386
+ # charset
387
+ # : The charset of the body, appended to the Content-Type header.
388
+ # nph
389
+ # : A boolean value. If true, prepend protocol string and status code,
390
+ # and date; and sets default values for "server" and "connection" if not
391
+ # explicitly set.
392
+ # status
393
+ # : The HTTP status code as a String, returned as the Status header. The
394
+ # values are:
395
+ #
396
+ # OK
397
+ # : 200 OK
398
+ # PARTIAL_CONTENT
399
+ # : 206 Partial Content
400
+ # MULTIPLE_CHOICES
401
+ # : 300 Multiple Choices
402
+ # MOVED
403
+ # : 301 Moved Permanently
404
+ # REDIRECT
405
+ # : 302 Found
406
+ # NOT_MODIFIED
407
+ # : 304 Not Modified
408
+ # BAD_REQUEST
409
+ # : 400 Bad Request
410
+ # AUTH_REQUIRED
411
+ # : 401 Authorization Required
412
+ # FORBIDDEN
413
+ # : 403 Forbidden
414
+ # NOT_FOUND
415
+ # : 404 Not Found
416
+ # METHOD_NOT_ALLOWED
417
+ # : 405 Method Not Allowed
418
+ # NOT_ACCEPTABLE
419
+ # : 406 Not Acceptable
420
+ # LENGTH_REQUIRED
421
+ # : 411 Length Required
422
+ # PRECONDITION_FAILED
423
+ # : 412 Precondition Failed
424
+ # SERVER_ERROR
425
+ # : 500 Internal Server Error
426
+ # NOT_IMPLEMENTED
427
+ # : 501 Method Not Implemented
428
+ # BAD_GATEWAY
429
+ # : 502 Bad Gateway
430
+ # VARIANT_ALSO_VARIES
431
+ # : 506 Variant Also Negotiates
432
+ #
433
+ #
434
+ # server
435
+ # : The server software, returned as the Server header.
436
+ # connection
437
+ # : The connection type, returned as the Connection header (for instance,
438
+ # "close".
439
+ # length
440
+ # : The length of the content that will be sent, returned as the
441
+ # Content-Length header.
442
+ # language
443
+ # : The language of the content, returned as the Content-Language header.
444
+ # expires
445
+ # : The time on which the current content expires, as a `Time` object,
446
+ # returned as the Expires header.
447
+ # cookie
448
+ # : A cookie or cookies, returned as one or more Set-Cookie headers. The
449
+ # value can be the literal string of the cookie; a CGI::Cookie object;
450
+ # an Array of literal cookie strings or Cookie objects; or a hash all of
451
+ # whose values are literal cookie strings or Cookie objects.
452
+ #
453
+ # These cookies are in addition to the cookies held in the
454
+ # @output_cookies field.
455
+ #
456
+ #
457
+ # Other headers can also be set; they are appended as key: value.
458
+ #
459
+ #
460
+ # Examples:
461
+ #
462
+ # http_header
463
+ # # Content-Type: text/html
464
+ #
465
+ # http_header("text/plain")
466
+ # # Content-Type: text/plain
467
+ #
468
+ # http_header("nph" => true,
469
+ # "status" => "OK", # == "200 OK"
470
+ # # "status" => "200 GOOD",
471
+ # "server" => ENV['SERVER_SOFTWARE'],
472
+ # "connection" => "close",
473
+ # "type" => "text/html",
474
+ # "charset" => "iso-2022-jp",
475
+ # # Content-Type: text/html; charset=iso-2022-jp
476
+ # "length" => 103,
477
+ # "language" => "ja",
478
+ # "expires" => Time.now + 30,
479
+ # "cookie" => [cookie1, cookie2],
480
+ # "my_header1" => "my_value",
481
+ # "my_header2" => "my_value")
482
+ #
483
+ # This method does not perform charset conversion.
484
+ #
485
+ def http_header: (?String options) -> String
486
+ | (?Hash[String | Symbol, untyped] header_hash) -> String
487
+
488
+ def nph?: () -> boolish
489
+
490
+ # Print an HTTP header and body to $DEFAULT_OUTPUT ($>)
491
+ #
492
+ # `content_type_string`
493
+ # : If a string is passed, it is assumed to be the content type.
494
+ # `headers_hash`
495
+ # : This is a Hash of headers, similar to that used by #http_header.
496
+ # `block`
497
+ # : A block is required and should evaluate to the body of the response.
498
+ #
499
+ #
500
+ # `Content-Length` is automatically calculated from the size of the String
501
+ # returned by the content block.
502
+ #
503
+ # If `ENV['REQUEST_METHOD'] == "HEAD"`, then only the header is output (the
504
+ # content block is still required, but it is ignored).
505
+ #
506
+ # If the charset is "iso-2022-jp" or "euc-jp" or "shift_jis" then the content is
507
+ # converted to this charset, and the language is set to "ja".
508
+ #
509
+ # Example:
510
+ #
511
+ # cgi = CGI.new
512
+ # cgi.out{ "string" }
513
+ # # Content-Type: text/html
514
+ # # Content-Length: 6
515
+ # #
516
+ # # string
517
+ #
518
+ # cgi.out("text/plain") { "string" }
519
+ # # Content-Type: text/plain
520
+ # # Content-Length: 6
521
+ # #
522
+ # # string
523
+ #
524
+ # cgi.out("nph" => true,
525
+ # "status" => "OK", # == "200 OK"
526
+ # "server" => ENV['SERVER_SOFTWARE'],
527
+ # "connection" => "close",
528
+ # "type" => "text/html",
529
+ # "charset" => "iso-2022-jp",
530
+ # # Content-Type: text/html; charset=iso-2022-jp
531
+ # "language" => "ja",
532
+ # "expires" => Time.now + (3600 * 24 * 30),
533
+ # "cookie" => [cookie1, cookie2],
534
+ # "my_header1" => "my_value",
535
+ # "my_header2" => "my_value") { "string" }
536
+ # # HTTP/1.1 200 OK
537
+ # # Date: Sun, 15 May 2011 17:35:54 GMT
538
+ # # Server: Apache 2.2.0
539
+ # # Connection: close
540
+ # # Content-Type: text/html; charset=iso-2022-jp
541
+ # # Content-Length: 6
542
+ # # Content-Language: ja
543
+ # # Expires: Tue, 14 Jun 2011 17:35:54 GMT
544
+ # # Set-Cookie: foo
545
+ # # Set-Cookie: bar
546
+ # # my_header1: my_value
547
+ # # my_header2: my_value
548
+ # #
549
+ # # string
550
+ #
551
+ def out: (?String content_type_string) { () -> String } -> void
552
+ | (Hash[String | Symbol, untyped] headers_hash) { () -> String } -> void
553
+
554
+ # Print an argument or list of arguments to the default output stream
555
+ #
556
+ # cgi = CGI.new
557
+ # cgi.print # default: cgi.print == $DEFAULT_OUTPUT.print
558
+ #
559
+ def print: (*String options) -> void
560
+
561
+ private
562
+
563
+ # Synonym for $stdin.
564
+ #
565
+ def stdinput: () -> ::IO
566
+
567
+ # Synonym for $stdout.
568
+ #
569
+ def stdoutput: () -> ::IO
570
+ end
571
+
572
+ # String for carriage return
573
+ CGI::CR: String
574
+
575
+ # Standard internet newline sequence
576
+ CGI::EOL: String
577
+
578
+ # HTTP status codes.
579
+ CGI::HTTP_STATUS: Hash[String, String]
580
+
581
+ # String for linefeed
582
+ CGI::LF: String
583
+
584
+ # Maximum number of request parameters when multipart
585
+ CGI::MAX_MULTIPART_COUNT: Integer
586
+
587
+ # Whether processing will be required in binary vs text
588
+ CGI::NEEDS_BINMODE: bool
589
+
590
+ # Path separators in different environments.
591
+ CGI::PATH_SEPARATOR: Hash[String, String]
592
+
593
+ CGI::REVISION: String
594
+
595
+ CGI::VERSION: String