ruby-lsp 0.0.3 → 0.0.4

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +6 -0
  3. data/.rubocop.yml +16 -0
  4. data/CHANGELOG.md +13 -0
  5. data/Gemfile +8 -5
  6. data/Gemfile.lock +55 -10
  7. data/README.md +40 -0
  8. data/VERSION +1 -1
  9. data/bin/tapioca +29 -0
  10. data/dev.yml +3 -0
  11. data/exe/ruby-lsp +19 -4
  12. data/lib/internal.rb +7 -0
  13. data/lib/ruby-lsp.rb +1 -0
  14. data/lib/ruby_lsp/cli.rb +12 -5
  15. data/lib/ruby_lsp/document.rb +37 -14
  16. data/lib/ruby_lsp/handler.rb +78 -23
  17. data/lib/ruby_lsp/requests/base_request.rb +11 -0
  18. data/lib/ruby_lsp/requests/code_actions.rb +1 -0
  19. data/lib/ruby_lsp/requests/diagnostics.rb +1 -0
  20. data/lib/ruby_lsp/requests/document_highlight.rb +96 -0
  21. data/lib/ruby_lsp/requests/document_symbol.rb +1 -10
  22. data/lib/ruby_lsp/requests/folding_ranges.rb +3 -2
  23. data/lib/ruby_lsp/requests/formatting.rb +2 -1
  24. data/lib/ruby_lsp/requests/rubocop_request.rb +1 -0
  25. data/lib/ruby_lsp/requests/selection_ranges.rb +1 -0
  26. data/lib/ruby_lsp/requests/semantic_highlighting.rb +17 -3
  27. data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +1 -0
  28. data/lib/ruby_lsp/requests/support/selection_range.rb +1 -0
  29. data/lib/ruby_lsp/requests/support/semantic_token_encoder.rb +12 -1
  30. data/lib/ruby_lsp/requests/support/syntax_error_diagnostic.rb +1 -0
  31. data/lib/ruby_lsp/requests.rb +2 -0
  32. data/lib/ruby_lsp/store.rb +19 -3
  33. data/rakelib/check_docs.rake +4 -1
  34. data/ruby-lsp.gemspec +1 -0
  35. data/sorbet/config +4 -0
  36. data/sorbet/rbi/.rubocop.yml +8 -0
  37. data/sorbet/rbi/gems/ansi@1.5.0.rbi +338 -0
  38. data/sorbet/rbi/gems/ast@2.4.2.rbi +522 -0
  39. data/sorbet/rbi/gems/builder@3.2.4.rbi +418 -0
  40. data/sorbet/rbi/gems/coderay@1.1.3.rbi +8 -0
  41. data/sorbet/rbi/gems/debug@1.5.0.rbi +1273 -0
  42. data/sorbet/rbi/gems/diff-lcs@1.5.0.rbi +867 -0
  43. data/sorbet/rbi/gems/io-console@0.5.11.rbi +8 -0
  44. data/sorbet/rbi/gems/irb@1.4.1.rbi +376 -0
  45. data/sorbet/rbi/gems/language_server-protocol@3.16.0.3.rbi +7325 -0
  46. data/sorbet/rbi/gems/method_source@1.0.0.rbi +8 -0
  47. data/sorbet/rbi/gems/minitest-reporters@1.5.0.rbi +612 -0
  48. data/sorbet/rbi/gems/minitest@5.15.0.rbi +994 -0
  49. data/sorbet/rbi/gems/parallel@1.22.1.rbi +163 -0
  50. data/sorbet/rbi/gems/parser@3.1.2.0.rbi +3968 -0
  51. data/sorbet/rbi/gems/prettier_print@0.1.0.rbi +734 -0
  52. data/sorbet/rbi/gems/pry@0.14.1.rbi +8 -0
  53. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +227 -0
  54. data/sorbet/rbi/gems/rake@13.0.6.rbi +1853 -0
  55. data/sorbet/rbi/gems/rbi@0.0.14.rbi +2337 -0
  56. data/sorbet/rbi/gems/regexp_parser@2.5.0.rbi +1854 -0
  57. data/sorbet/rbi/gems/reline@0.3.1.rbi +1274 -0
  58. data/sorbet/rbi/gems/rexml@3.2.5.rbi +3852 -0
  59. data/sorbet/rbi/gems/rubocop-ast@1.18.0.rbi +4180 -0
  60. data/sorbet/rbi/gems/rubocop-minitest@0.20.0.rbi +1369 -0
  61. data/sorbet/rbi/gems/rubocop-rake@0.6.0.rbi +246 -0
  62. data/sorbet/rbi/gems/rubocop-shopify@2.6.0.rbi +8 -0
  63. data/sorbet/rbi/gems/rubocop-sorbet@0.6.8.rbi +652 -0
  64. data/sorbet/rbi/gems/rubocop@1.30.0.rbi +36729 -0
  65. data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +732 -0
  66. data/sorbet/rbi/gems/spoom@1.1.11.rbi +1600 -0
  67. data/sorbet/rbi/gems/syntax_tree@2.7.1.rbi +6777 -0
  68. data/sorbet/rbi/gems/tapioca@0.8.1.rbi +1972 -0
  69. data/sorbet/rbi/gems/thor@1.2.1.rbi +2921 -0
  70. data/sorbet/rbi/gems/unicode-display_width@2.1.0.rbi +27 -0
  71. data/sorbet/rbi/gems/unparser@0.6.5.rbi +2789 -0
  72. data/sorbet/rbi/gems/webrick@1.7.0.rbi +1779 -0
  73. data/sorbet/rbi/gems/yard-sorbet@0.6.1.rbi +289 -0
  74. data/sorbet/rbi/gems/yard@0.9.27.rbi +13048 -0
  75. data/sorbet/rbi/shims/fiddle.rbi +4 -0
  76. data/sorbet/rbi/shims/hash.rbi +6 -0
  77. data/sorbet/rbi/shims/rdoc.rbi +4 -0
  78. data/sorbet/tapioca/config.yml +13 -0
  79. data/sorbet/tapioca/require.rb +7 -0
  80. metadata +64 -2
@@ -0,0 +1,1779 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `webrick` gem.
5
+ # Please instead update this file by running `bin/tapioca gem webrick`.
6
+
7
+ # AccessLog provides logging to various files in various formats.
8
+ #
9
+ # Multiple logs may be written to at the same time:
10
+ #
11
+ # access_log = [
12
+ # [$stderr, WEBrick::AccessLog::COMMON_LOG_FORMAT],
13
+ # [$stderr, WEBrick::AccessLog::REFERER_LOG_FORMAT],
14
+ # ]
15
+ #
16
+ # server = WEBrick::HTTPServer.new :AccessLog => access_log
17
+ #
18
+ # Custom log formats may be defined. WEBrick::AccessLog provides a subset
19
+ # of the formatting from Apache's mod_log_config
20
+ # http://httpd.apache.org/docs/mod/mod_log_config.html#formats. See
21
+ # AccessLog::setup_params for a list of supported options
22
+ module WEBrick::AccessLog
23
+ private
24
+
25
+ # Escapes control characters in +data+
26
+ def escape(data); end
27
+
28
+ # Formats +params+ according to +format_string+ which is described in
29
+ # setup_params.
30
+ def format(format_string, params); end
31
+
32
+ # This format specification is a subset of mod_log_config of Apache:
33
+ #
34
+ # %a:: Remote IP address
35
+ # %b:: Total response size
36
+ # %e{variable}:: Given variable in ENV
37
+ # %f:: Response filename
38
+ # %h:: Remote host name
39
+ # %{header}i:: Given request header
40
+ # %l:: Remote logname, always "-"
41
+ # %m:: Request method
42
+ # %{attr}n:: Given request attribute from <tt>req.attributes</tt>
43
+ # %{header}o:: Given response header
44
+ # %p:: Server's request port
45
+ # %{format}p:: The canonical port of the server serving the request or the
46
+ # actual port or the client's actual port. Valid formats are
47
+ # canonical, local or remote.
48
+ # %q:: Request query string
49
+ # %r:: First line of the request
50
+ # %s:: Request status
51
+ # %t:: Time the request was received
52
+ # %T:: Time taken to process the request
53
+ # %u:: Remote user from auth
54
+ # %U:: Unparsed URI
55
+ # %%:: Literal %
56
+ def setup_params(config, req, res); end
57
+
58
+ class << self
59
+ # Escapes control characters in +data+
60
+ def escape(data); end
61
+
62
+ # Formats +params+ according to +format_string+ which is described in
63
+ # setup_params.
64
+ def format(format_string, params); end
65
+
66
+ # This format specification is a subset of mod_log_config of Apache:
67
+ #
68
+ # %a:: Remote IP address
69
+ # %b:: Total response size
70
+ # %e{variable}:: Given variable in ENV
71
+ # %f:: Response filename
72
+ # %h:: Remote host name
73
+ # %{header}i:: Given request header
74
+ # %l:: Remote logname, always "-"
75
+ # %m:: Request method
76
+ # %{attr}n:: Given request attribute from <tt>req.attributes</tt>
77
+ # %{header}o:: Given response header
78
+ # %p:: Server's request port
79
+ # %{format}p:: The canonical port of the server serving the request or the
80
+ # actual port or the client's actual port. Valid formats are
81
+ # canonical, local or remote.
82
+ # %q:: Request query string
83
+ # %r:: First line of the request
84
+ # %s:: Request status
85
+ # %t:: Time the request was received
86
+ # %T:: Time taken to process the request
87
+ # %u:: Remote user from auth
88
+ # %U:: Unparsed URI
89
+ # %%:: Literal %
90
+ def setup_params(config, req, res); end
91
+ end
92
+ end
93
+
94
+ # A generic logging class
95
+ class WEBrick::BasicLog
96
+ # Initializes a new logger for +log_file+ that outputs messages at +level+
97
+ # or higher. +log_file+ can be a filename, an IO-like object that
98
+ # responds to #<< or nil which outputs to $stderr.
99
+ #
100
+ # If no level is given INFO is chosen by default
101
+ #
102
+ # @return [BasicLog] a new instance of BasicLog
103
+ def initialize(log_file = T.unsafe(nil), level = T.unsafe(nil)); end
104
+
105
+ # Synonym for log(INFO, obj.to_s)
106
+ def <<(obj); end
107
+
108
+ # Closes the logger (also closes the log device associated to the logger)
109
+ def close; end
110
+
111
+ # Shortcut for logging a DEBUG message
112
+ def debug(msg); end
113
+
114
+ # Will the logger output DEBUG messages?
115
+ #
116
+ # @return [Boolean]
117
+ def debug?; end
118
+
119
+ # Shortcut for logging an ERROR message
120
+ def error(msg); end
121
+
122
+ # Will the logger output ERROR messages?
123
+ #
124
+ # @return [Boolean]
125
+ def error?; end
126
+
127
+ # Shortcut for logging a FATAL message
128
+ def fatal(msg); end
129
+
130
+ # Will the logger output FATAL messages?
131
+ #
132
+ # @return [Boolean]
133
+ def fatal?; end
134
+
135
+ # Shortcut for logging an INFO message
136
+ def info(msg); end
137
+
138
+ # Will the logger output INFO messages?
139
+ #
140
+ # @return [Boolean]
141
+ def info?; end
142
+
143
+ # log-level, messages above this level will be logged
144
+ def level; end
145
+
146
+ # log-level, messages above this level will be logged
147
+ def level=(_arg0); end
148
+
149
+ # Logs +data+ at +level+ if the given level is above the current log
150
+ # level.
151
+ def log(level, data); end
152
+
153
+ # Shortcut for logging a WARN message
154
+ def warn(msg); end
155
+
156
+ # Will the logger output WARN messages?
157
+ #
158
+ # @return [Boolean]
159
+ def warn?; end
160
+
161
+ private
162
+
163
+ # Formats +arg+ for the logger
164
+ #
165
+ # * If +arg+ is an Exception, it will format the error message and
166
+ # the back trace.
167
+ # * If +arg+ responds to #to_str, it will return it.
168
+ # * Otherwise it will return +arg+.inspect.
169
+ def format(arg); end
170
+ end
171
+
172
+ # --
173
+ # Updates WEBrick::GenericServer with SSL functionality
174
+ class WEBrick::GenericServer
175
+ # Creates a new generic server from +config+. The default configuration
176
+ # comes from +default+.
177
+ #
178
+ # @return [GenericServer] a new instance of GenericServer
179
+ def initialize(config = T.unsafe(nil), default = T.unsafe(nil)); end
180
+
181
+ # Retrieves +key+ from the configuration
182
+ def [](key); end
183
+
184
+ # The server configuration
185
+ def config; end
186
+
187
+ # Updates +listen+ to enable SSL when the SSL configuration is active.
188
+ def listen(address, port); end
189
+
190
+ # Sockets listening for connections.
191
+ def listeners; end
192
+
193
+ # The server logger. This is independent from the HTTP access log.
194
+ def logger; end
195
+
196
+ # You must subclass GenericServer and implement \#run which accepts a TCP
197
+ # client socket
198
+ def run(sock); end
199
+
200
+ # Shuts down the server and all listening sockets. New listeners must be
201
+ # provided to restart the server.
202
+ def shutdown; end
203
+
204
+ # Starts the server and runs the +block+ for each connection. This method
205
+ # does not return until the server is stopped from a signal handler or
206
+ # another thread using #stop or #shutdown.
207
+ #
208
+ # If the block raises a subclass of StandardError the exception is logged
209
+ # and ignored. If an IOError or Errno::EBADF exception is raised the
210
+ # exception is ignored. If an Exception subclass is raised the exception
211
+ # is logged and re-raised which stops the server.
212
+ #
213
+ # To completely shut down a server call #shutdown from ensure:
214
+ #
215
+ # server = WEBrick::GenericServer.new
216
+ # # or WEBrick::HTTPServer.new
217
+ #
218
+ # begin
219
+ # server.start
220
+ # ensure
221
+ # server.shutdown
222
+ # end
223
+ #
224
+ # @raise [ServerError]
225
+ def start(&block); end
226
+
227
+ # The server status. One of :Stop, :Running or :Shutdown
228
+ def status; end
229
+
230
+ # Stops the server from accepting new connections.
231
+ def stop; end
232
+
233
+ # Tokens control the number of outstanding clients. The
234
+ # <code>:MaxClients</code> configuration sets this.
235
+ def tokens; end
236
+
237
+ private
238
+
239
+ # Accepts a TCP client socket from the TCP server socket +svr+ and returns
240
+ # the client socket.
241
+ def accept_client(svr); end
242
+
243
+ def alarm_shutdown_pipe; end
244
+
245
+ # Calls the callback +callback_name+ from the configuration with +args+
246
+ def call_callback(callback_name, *args); end
247
+
248
+ def cleanup_listener; end
249
+ def cleanup_shutdown_pipe(shutdown_pipe); end
250
+ def setup_shutdown_pipe; end
251
+
252
+ # Starts a server thread for the client socket +sock+ that runs the given
253
+ # +block+.
254
+ #
255
+ # Sets the socket to the <code>:WEBrickSocket</code> thread local variable
256
+ # in the thread.
257
+ #
258
+ # If any errors occur in the block they are logged and handled.
259
+ def start_thread(sock, &block); end
260
+ end
261
+
262
+ module WEBrick::HTMLUtils
263
+ private
264
+
265
+ # Escapes &, ", > and < in +string+
266
+ def escape(string); end
267
+
268
+ class << self
269
+ # Escapes &, ", > and < in +string+
270
+ def escape(string); end
271
+ end
272
+ end
273
+
274
+ # HTTPAuth provides both basic and digest authentication.
275
+ #
276
+ # To enable authentication for requests in WEBrick you will need a user
277
+ # database and an authenticator. To start, here's an Htpasswd database for
278
+ # use with a DigestAuth authenticator:
279
+ #
280
+ # config = { :Realm => 'DigestAuth example realm' }
281
+ #
282
+ # htpasswd = WEBrick::HTTPAuth::Htpasswd.new 'my_password_file'
283
+ # htpasswd.auth_type = WEBrick::HTTPAuth::DigestAuth
284
+ # htpasswd.set_passwd config[:Realm], 'username', 'password'
285
+ # htpasswd.flush
286
+ #
287
+ # The +:Realm+ is used to provide different access to different groups
288
+ # across several resources on a server. Typically you'll need only one
289
+ # realm for a server.
290
+ #
291
+ # This database can be used to create an authenticator:
292
+ #
293
+ # config[:UserDB] = htpasswd
294
+ #
295
+ # digest_auth = WEBrick::HTTPAuth::DigestAuth.new config
296
+ #
297
+ # To authenticate a request call #authenticate with a request and response
298
+ # object in a servlet:
299
+ #
300
+ # def do_GET req, res
301
+ # @authenticator.authenticate req, res
302
+ # end
303
+ #
304
+ # For digest authentication the authenticator must not be created every
305
+ # request, it must be passed in as an option via WEBrick::HTTPServer#mount.
306
+ module WEBrick::HTTPAuth
307
+ private
308
+
309
+ def _basic_auth(req, res, realm, req_field, res_field, err_type, block); end
310
+
311
+ # Simple wrapper for providing basic authentication for a request. When
312
+ # called with a request +req+, response +res+, authentication +realm+ and
313
+ # +block+ the block will be called with a +username+ and +password+. If
314
+ # the block returns true the request is allowed to continue, otherwise an
315
+ # HTTPStatus::Unauthorized error is raised.
316
+ def basic_auth(req, res, realm, &block); end
317
+
318
+ # Simple wrapper for providing basic authentication for a proxied request.
319
+ # When called with a request +req+, response +res+, authentication +realm+
320
+ # and +block+ the block will be called with a +username+ and +password+.
321
+ # If the block returns true the request is allowed to continue, otherwise
322
+ # an HTTPStatus::ProxyAuthenticationRequired error is raised.
323
+ def proxy_basic_auth(req, res, realm, &block); end
324
+
325
+ class << self
326
+ def _basic_auth(req, res, realm, req_field, res_field, err_type, block); end
327
+
328
+ # Simple wrapper for providing basic authentication for a request. When
329
+ # called with a request +req+, response +res+, authentication +realm+ and
330
+ # +block+ the block will be called with a +username+ and +password+. If
331
+ # the block returns true the request is allowed to continue, otherwise an
332
+ # HTTPStatus::Unauthorized error is raised.
333
+ def basic_auth(req, res, realm, &block); end
334
+
335
+ # Simple wrapper for providing basic authentication for a proxied request.
336
+ # When called with a request +req+, response +res+, authentication +realm+
337
+ # and +block+ the block will be called with a +username+ and +password+.
338
+ # If the block returns true the request is allowed to continue, otherwise
339
+ # an HTTPStatus::ProxyAuthenticationRequired error is raised.
340
+ def proxy_basic_auth(req, res, realm, &block); end
341
+ end
342
+ end
343
+
344
+ # Module providing generic support for both Digest and Basic
345
+ # authentication schemes.
346
+ module WEBrick::HTTPAuth::Authenticator
347
+ # The logger for this authenticator
348
+ def logger; end
349
+
350
+ # The realm this authenticator covers
351
+ def realm; end
352
+
353
+ # The user database for this authenticator
354
+ def userdb; end
355
+
356
+ private
357
+
358
+ # Initializes the authenticator from +config+
359
+ def check_init(config); end
360
+
361
+ # Ensures +req+ has credentials that can be authenticated.
362
+ def check_scheme(req); end
363
+
364
+ def error(fmt, *args); end
365
+ def info(fmt, *args); end
366
+ def log(meth, fmt, *args); end
367
+ end
368
+
369
+ WEBrick::HTTPAuth::Authenticator::AuthException = WEBrick::HTTPStatus::Unauthorized
370
+
371
+ # Basic Authentication for WEBrick
372
+ #
373
+ # Use this class to add basic authentication to a WEBrick servlet.
374
+ #
375
+ # Here is an example of how to set up a BasicAuth:
376
+ #
377
+ # config = { :Realm => 'BasicAuth example realm' }
378
+ #
379
+ # htpasswd = WEBrick::HTTPAuth::Htpasswd.new 'my_password_file', password_hash: :bcrypt
380
+ # htpasswd.set_passwd config[:Realm], 'username', 'password'
381
+ # htpasswd.flush
382
+ #
383
+ # config[:UserDB] = htpasswd
384
+ #
385
+ # basic_auth = WEBrick::HTTPAuth::BasicAuth.new config
386
+ class WEBrick::HTTPAuth::BasicAuth
387
+ include ::WEBrick::HTTPAuth::Authenticator
388
+
389
+ # Creates a new BasicAuth instance.
390
+ #
391
+ # See WEBrick::Config::BasicAuth for default configuration entries
392
+ #
393
+ # You must supply the following configuration entries:
394
+ #
395
+ # :Realm:: The name of the realm being protected.
396
+ # :UserDB:: A database of usernames and passwords.
397
+ # A WEBrick::HTTPAuth::Htpasswd instance should be used.
398
+ #
399
+ # @return [BasicAuth] a new instance of BasicAuth
400
+ def initialize(config, default = T.unsafe(nil)); end
401
+
402
+ # Authenticates a +req+ and returns a 401 Unauthorized using +res+ if
403
+ # the authentication was not correct.
404
+ def authenticate(req, res); end
405
+
406
+ # Returns a challenge response which asks for authentication information
407
+ #
408
+ # @raise [@auth_exception]
409
+ def challenge(req, res); end
410
+
411
+ # Returns the value of attribute logger.
412
+ def logger; end
413
+
414
+ # Returns the value of attribute realm.
415
+ def realm; end
416
+
417
+ # Returns the value of attribute userdb.
418
+ def userdb; end
419
+
420
+ class << self
421
+ # Used by UserDB to create a basic password entry
422
+ def make_passwd(realm, user, pass); end
423
+ end
424
+ end
425
+
426
+ # RFC 2617 Digest Access Authentication for WEBrick
427
+ #
428
+ # Use this class to add digest authentication to a WEBrick servlet.
429
+ #
430
+ # Here is an example of how to set up DigestAuth:
431
+ #
432
+ # config = { :Realm => 'DigestAuth example realm' }
433
+ #
434
+ # htdigest = WEBrick::HTTPAuth::Htdigest.new 'my_password_file'
435
+ # htdigest.set_passwd config[:Realm], 'username', 'password'
436
+ # htdigest.flush
437
+ #
438
+ # config[:UserDB] = htdigest
439
+ #
440
+ # digest_auth = WEBrick::HTTPAuth::DigestAuth.new config
441
+ #
442
+ # When using this as with a servlet be sure not to create a new DigestAuth
443
+ # object in the servlet's #initialize. By default WEBrick creates a new
444
+ # servlet instance for every request and the DigestAuth object must be
445
+ # used across requests.
446
+ class WEBrick::HTTPAuth::DigestAuth
447
+ include ::WEBrick::HTTPAuth::Authenticator
448
+
449
+ # Creates a new DigestAuth instance. Be sure to use the same DigestAuth
450
+ # instance for multiple requests as it saves state between requests in
451
+ # order to perform authentication.
452
+ #
453
+ # See WEBrick::Config::DigestAuth for default configuration entries
454
+ #
455
+ # You must supply the following configuration entries:
456
+ #
457
+ # :Realm:: The name of the realm being protected.
458
+ # :UserDB:: A database of usernames and passwords.
459
+ # A WEBrick::HTTPAuth::Htdigest instance should be used.
460
+ #
461
+ # @return [DigestAuth] a new instance of DigestAuth
462
+ def initialize(config, default = T.unsafe(nil)); end
463
+
464
+ # Digest authentication algorithm
465
+ def algorithm; end
466
+
467
+ # Authenticates a +req+ and returns a 401 Unauthorized using +res+ if
468
+ # the authentication was not correct.
469
+ def authenticate(req, res); end
470
+
471
+ # Returns a challenge response which asks for authentication information
472
+ #
473
+ # @raise [@auth_exception]
474
+ def challenge(req, res, stale = T.unsafe(nil)); end
475
+
476
+ # Quality of protection. RFC 2617 defines "auth" and "auth-int"
477
+ def qop; end
478
+
479
+ private
480
+
481
+ def _authenticate(req, res); end
482
+ def check_nonce(req, auth_req); end
483
+ def check_opaque(opaque_struct, req, auth_req); end
484
+ def check_uri(req, auth_req); end
485
+ def generate_next_nonce(req); end
486
+ def generate_opaque(req); end
487
+ def hexdigest(*args); end
488
+ def split_param_value(string); end
489
+
490
+ class << self
491
+ # Used by UserDB to create a digest password entry
492
+ def make_passwd(realm, user, pass); end
493
+ end
494
+ end
495
+
496
+ # Htdigest accesses apache-compatible digest password files. Passwords are
497
+ # matched to a realm where they are valid. For security, the path for a
498
+ # digest password database should be stored outside of the paths available
499
+ # to the HTTP server.
500
+ #
501
+ # Htdigest is intended for use with WEBrick::HTTPAuth::DigestAuth and
502
+ # stores passwords using cryptographic hashes.
503
+ #
504
+ # htpasswd = WEBrick::HTTPAuth::Htdigest.new 'my_password_file'
505
+ # htpasswd.set_passwd 'my realm', 'username', 'password'
506
+ # htpasswd.flush
507
+ class WEBrick::HTTPAuth::Htdigest
508
+ include ::WEBrick::HTTPAuth::UserDB
509
+
510
+ # Open a digest password database at +path+
511
+ #
512
+ # @return [Htdigest] a new instance of Htdigest
513
+ def initialize(path); end
514
+
515
+ # Removes a password from the database for +user+ in +realm+.
516
+ def delete_passwd(realm, user); end
517
+
518
+ # Iterate passwords in the database.
519
+ def each; end
520
+
521
+ # Flush the password database. If +output+ is given the database will
522
+ # be written there instead of to the original path.
523
+ def flush(output = T.unsafe(nil)); end
524
+
525
+ # Retrieves a password from the database for +user+ in +realm+. If
526
+ # +reload_db+ is true the database will be reloaded first.
527
+ def get_passwd(realm, user, reload_db); end
528
+
529
+ # Reloads passwords from the database
530
+ def reload; end
531
+
532
+ # Sets a password in the database for +user+ in +realm+ to +pass+.
533
+ def set_passwd(realm, user, pass); end
534
+ end
535
+
536
+ # Htgroup accesses apache-compatible group files. Htgroup can be used to
537
+ # provide group-based authentication for users. Currently Htgroup is not
538
+ # directly integrated with any authenticators in WEBrick. For security,
539
+ # the path for a digest password database should be stored outside of the
540
+ # paths available to the HTTP server.
541
+ #
542
+ # Example:
543
+ #
544
+ # htgroup = WEBrick::HTTPAuth::Htgroup.new 'my_group_file'
545
+ # htgroup.add 'superheroes', %w[spiderman batman]
546
+ #
547
+ # htgroup.members('superheroes').include? 'magneto' # => false
548
+ class WEBrick::HTTPAuth::Htgroup
549
+ # Open a group database at +path+
550
+ #
551
+ # @return [Htgroup] a new instance of Htgroup
552
+ def initialize(path); end
553
+
554
+ # Add an Array of +members+ to +group+
555
+ def add(group, members); end
556
+
557
+ # Flush the group database. If +output+ is given the database will be
558
+ # written there instead of to the original path.
559
+ def flush(output = T.unsafe(nil)); end
560
+
561
+ # Retrieve the list of members from +group+
562
+ def members(group); end
563
+
564
+ # Reload groups from the database
565
+ def reload; end
566
+ end
567
+
568
+ # Htpasswd accesses apache-compatible password files. Passwords are
569
+ # matched to a realm where they are valid. For security, the path for a
570
+ # password database should be stored outside of the paths available to the
571
+ # HTTP server.
572
+ #
573
+ # Htpasswd is intended for use with WEBrick::HTTPAuth::BasicAuth.
574
+ #
575
+ # To create an Htpasswd database with a single user:
576
+ #
577
+ # htpasswd = WEBrick::HTTPAuth::Htpasswd.new 'my_password_file'
578
+ # htpasswd.set_passwd 'my realm', 'username', 'password'
579
+ # htpasswd.flush
580
+ class WEBrick::HTTPAuth::Htpasswd
581
+ include ::WEBrick::HTTPAuth::UserDB
582
+
583
+ # Open a password database at +path+
584
+ #
585
+ # @return [Htpasswd] a new instance of Htpasswd
586
+ def initialize(path, password_hash: T.unsafe(nil)); end
587
+
588
+ # Removes a password from the database for +user+ in +realm+.
589
+ def delete_passwd(realm, user); end
590
+
591
+ # Iterate passwords in the database.
592
+ def each; end
593
+
594
+ # Flush the password database. If +output+ is given the database will
595
+ # be written there instead of to the original path.
596
+ def flush(output = T.unsafe(nil)); end
597
+
598
+ # Retrieves a password from the database for +user+ in +realm+. If
599
+ # +reload_db+ is true the database will be reloaded first.
600
+ def get_passwd(realm, user, reload_db); end
601
+
602
+ # Reload passwords from the database
603
+ def reload; end
604
+
605
+ # Sets a password in the database for +user+ in +realm+ to +pass+.
606
+ def set_passwd(realm, user, pass); end
607
+ end
608
+
609
+ WEBrick::HTTPAuth::ProxyAuthenticator::AuthException = WEBrick::HTTPStatus::ProxyAuthenticationRequired
610
+
611
+ # Basic authentication for proxy servers. See BasicAuth for details.
612
+ class WEBrick::HTTPAuth::ProxyBasicAuth < ::WEBrick::HTTPAuth::BasicAuth
613
+ include ::WEBrick::HTTPAuth::ProxyAuthenticator
614
+ end
615
+
616
+ # Digest authentication for proxy servers. See DigestAuth for details.
617
+ class WEBrick::HTTPAuth::ProxyDigestAuth < ::WEBrick::HTTPAuth::DigestAuth
618
+ include ::WEBrick::HTTPAuth::ProxyAuthenticator
619
+
620
+ private
621
+
622
+ def check_uri(req, auth_req); end
623
+ end
624
+
625
+ # User database mixin for HTTPAuth. This mixin dispatches user record
626
+ # access to the underlying auth_type for this database.
627
+ module WEBrick::HTTPAuth::UserDB
628
+ # The authentication type.
629
+ #
630
+ # WEBrick::HTTPAuth::BasicAuth or WEBrick::HTTPAuth::DigestAuth are
631
+ # built-in.
632
+ def auth_type; end
633
+
634
+ # The authentication type.
635
+ #
636
+ # WEBrick::HTTPAuth::BasicAuth or WEBrick::HTTPAuth::DigestAuth are
637
+ # built-in.
638
+ def auth_type=(_arg0); end
639
+
640
+ # Retrieves a password in +realm+ for +user+ for the auth_type of this
641
+ # database. +reload_db+ is a dummy value.
642
+ def get_passwd(realm, user, reload_db = T.unsafe(nil)); end
643
+
644
+ # Creates an obscured password in +realm+ with +user+ and +password+
645
+ # using the auth_type of this database.
646
+ def make_passwd(realm, user, pass); end
647
+
648
+ # Sets a password in +realm+ with +user+ and +password+ for the
649
+ # auth_type of this database.
650
+ def set_passwd(realm, user, pass); end
651
+ end
652
+
653
+ # --
654
+ # Adds SSL functionality to WEBrick::HTTPRequest
655
+ class WEBrick::HTTPRequest
656
+ # Creates a new HTTP request. WEBrick::Config::HTTP is the default
657
+ # configuration.
658
+ #
659
+ # @return [HTTPRequest] a new instance of HTTPRequest
660
+ def initialize(config); end
661
+
662
+ # Retrieves +header_name+
663
+ def [](header_name); end
664
+
665
+ # The Accept header value
666
+ def accept; end
667
+
668
+ # The Accept-Charset header value
669
+ def accept_charset; end
670
+
671
+ # The Accept-Encoding header value
672
+ def accept_encoding; end
673
+
674
+ # The Accept-Language header value
675
+ def accept_language; end
676
+
677
+ # The socket address of the server
678
+ def addr; end
679
+
680
+ # Hash of request attributes
681
+ def attributes; end
682
+
683
+ # Returns the request body.
684
+ def body(&block); end
685
+
686
+ # Prepares the HTTPRequest object for use as the
687
+ # source for IO.copy_stream
688
+ def body_reader; end
689
+
690
+ # The content-length header
691
+ def content_length; end
692
+
693
+ # The content-type header
694
+ def content_type; end
695
+
696
+ # Generate HTTP/1.1 100 continue response if the client expects it,
697
+ # otherwise does nothing.
698
+ def continue; end
699
+
700
+ # The parsed request cookies
701
+ def cookies; end
702
+
703
+ # Iterates over the request headers
704
+ def each; end
705
+
706
+ # Consumes any remaining body and updates keep-alive status
707
+ def fixup; end
708
+
709
+ # The parsed header of the request
710
+ def header; end
711
+
712
+ # The host this request is for
713
+ def host; end
714
+
715
+ # The HTTP version of the request
716
+ def http_version; end
717
+
718
+ # Is this a keep-alive connection?
719
+ def keep_alive; end
720
+
721
+ # Should the connection this request was made on be kept alive?
722
+ #
723
+ # @return [Boolean]
724
+ def keep_alive?; end
725
+
726
+ # This method provides the metavariables defined by the revision 3
727
+ # of "The WWW Common Gateway Interface Version 1.1"
728
+ # To browse the current document of CGI Version 1.1, see below:
729
+ # http://tools.ietf.org/html/rfc3875
730
+ def meta_vars; end
731
+
732
+ # Parses a request from +socket+. This is called internally by
733
+ # WEBrick::HTTPServer.
734
+ def parse(socket = T.unsafe(nil)); end
735
+
736
+ # The request path
737
+ def path; end
738
+
739
+ # The path info (CGI variable)
740
+ def path_info; end
741
+
742
+ # The path info (CGI variable)
743
+ def path_info=(_arg0); end
744
+
745
+ # The socket address of the client
746
+ def peeraddr; end
747
+
748
+ # The port this request is for
749
+ def port; end
750
+
751
+ # Request query as a Hash
752
+ def query; end
753
+
754
+ # The query from the URI of the request
755
+ def query_string; end
756
+
757
+ # The query from the URI of the request
758
+ def query_string=(_arg0); end
759
+
760
+ # The raw header of the request
761
+ def raw_header; end
762
+
763
+ # for IO.copy_stream.
764
+ def readpartial(size, buf = T.unsafe(nil)); end
765
+
766
+ # The client's IP address
767
+ def remote_ip; end
768
+
769
+ # The complete request line such as:
770
+ #
771
+ # GET / HTTP/1.1
772
+ def request_line; end
773
+
774
+ # The request method, GET, POST, PUT, etc.
775
+ def request_method; end
776
+
777
+ # The local time this request was received
778
+ def request_time; end
779
+
780
+ # The parsed URI of the request
781
+ def request_uri; end
782
+
783
+ # The script name (CGI variable)
784
+ def script_name; end
785
+
786
+ # The script name (CGI variable)
787
+ def script_name=(_arg0); end
788
+
789
+ # The server name this request is for
790
+ def server_name; end
791
+
792
+ # Is this an SSL request?
793
+ #
794
+ # @return [Boolean]
795
+ def ssl?; end
796
+
797
+ def to_s; end
798
+
799
+ # The unparsed URI of the request
800
+ def unparsed_uri; end
801
+
802
+ # The remote user (CGI variable)
803
+ def user; end
804
+
805
+ # The remote user (CGI variable)
806
+ def user=(_arg0); end
807
+
808
+ private
809
+
810
+ def _read_data(io, method, *arg); end
811
+ def parse_query; end
812
+ def parse_uri(str, scheme = T.unsafe(nil)); end
813
+ def read_body(socket, block); end
814
+ def read_chunk_size(socket); end
815
+ def read_chunked(socket, block); end
816
+ def read_data(io, size); end
817
+ def read_header(socket); end
818
+ def read_line(io, size = T.unsafe(nil)); end
819
+
820
+ # @raise [HTTPStatus::EOFError]
821
+ def read_request_line(socket); end
822
+
823
+ # It's said that all X-Forwarded-* headers will contain more than one
824
+ # (comma-separated) value if the original request already contained one of
825
+ # these headers. Since we could use these values as Host header, we choose
826
+ # the initial(first) value. (apr_table_mergen() adds new value after the
827
+ # existing value with ", " prefix)
828
+ def setup_forwarded_info; end
829
+ end
830
+
831
+ # same as Mongrel, Thin and Puma
832
+ WEBrick::HTTPRequest::MAX_HEADER_LENGTH = T.let(T.unsafe(nil), Integer)
833
+
834
+ # An HTTP response. This is filled in by the service or do_* methods of a
835
+ # WEBrick HTTP Servlet.
836
+ class WEBrick::HTTPResponse
837
+ # Creates a new HTTP response object. WEBrick::Config::HTTP is the
838
+ # default configuration.
839
+ #
840
+ # @return [HTTPResponse] a new instance of HTTPResponse
841
+ def initialize(config); end
842
+
843
+ # Retrieves the response header +field+
844
+ def [](field); end
845
+
846
+ # Sets the response header +field+ to +value+
847
+ def []=(field, value); end
848
+
849
+ # Body may be:
850
+ # * a String;
851
+ # * an IO-like object that responds to +#read+ and +#readpartial+;
852
+ # * a Proc-like object that responds to +#call+.
853
+ #
854
+ # In the latter case, either #chunked= should be set to +true+,
855
+ # or <code>header['content-length']</code> explicitly provided.
856
+ # Example:
857
+ #
858
+ # server.mount_proc '/' do |req, res|
859
+ # res.chunked = true
860
+ # # or
861
+ # # res.header['content-length'] = 10
862
+ # res.body = proc { |out| out.write(Time.now.to_s) }
863
+ # end
864
+ def body; end
865
+
866
+ # Body may be:
867
+ # * a String;
868
+ # * an IO-like object that responds to +#read+ and +#readpartial+;
869
+ # * a Proc-like object that responds to +#call+.
870
+ #
871
+ # In the latter case, either #chunked= should be set to +true+,
872
+ # or <code>header['content-length']</code> explicitly provided.
873
+ # Example:
874
+ #
875
+ # server.mount_proc '/' do |req, res|
876
+ # res.chunked = true
877
+ # # or
878
+ # # res.header['content-length'] = 10
879
+ # res.body = proc { |out| out.write(Time.now.to_s) }
880
+ # end
881
+ def body=(_arg0); end
882
+
883
+ # Enables chunked transfer encoding.
884
+ def chunked=(val); end
885
+
886
+ # Will this response body be returned using chunked transfer-encoding?
887
+ #
888
+ # @return [Boolean]
889
+ def chunked?; end
890
+
891
+ # Configuration for this response
892
+ def config; end
893
+
894
+ # The content-length header
895
+ def content_length; end
896
+
897
+ # Sets the content-length header to +len+
898
+ def content_length=(len); end
899
+
900
+ # The content-type header
901
+ def content_type; end
902
+
903
+ # Sets the content-type header to +type+
904
+ def content_type=(type); end
905
+
906
+ # Response cookies
907
+ def cookies; end
908
+
909
+ # Iterates over each header in the response
910
+ def each; end
911
+
912
+ # Filename of the static file in this response. Only used by the
913
+ # FileHandler servlet.
914
+ def filename; end
915
+
916
+ # Filename of the static file in this response. Only used by the
917
+ # FileHandler servlet.
918
+ def filename=(_arg0); end
919
+
920
+ # Response header
921
+ def header; end
922
+
923
+ # HTTP Response version
924
+ def http_version; end
925
+
926
+ # Is this a keep-alive response?
927
+ def keep_alive; end
928
+
929
+ # Is this a keep-alive response?
930
+ def keep_alive=(_arg0); end
931
+
932
+ # Will this response's connection be kept alive?
933
+ #
934
+ # @return [Boolean]
935
+ def keep_alive?; end
936
+
937
+ def make_body_tempfile; end
938
+
939
+ # Response reason phrase ("OK")
940
+ def reason_phrase; end
941
+
942
+ # Response reason phrase ("OK")
943
+ def reason_phrase=(_arg0); end
944
+
945
+ def remove_body_tempfile; end
946
+
947
+ # Request HTTP version for this response
948
+ def request_http_version; end
949
+
950
+ # Request HTTP version for this response
951
+ def request_http_version=(_arg0); end
952
+
953
+ # Request method for this response
954
+ def request_method; end
955
+
956
+ # Request method for this response
957
+ def request_method=(_arg0); end
958
+
959
+ # Request URI for this response
960
+ def request_uri; end
961
+
962
+ # Request URI for this response
963
+ def request_uri=(_arg0); end
964
+
965
+ # Sends the body on +socket+
966
+ def send_body(socket); end
967
+
968
+ # Sends the headers on +socket+
969
+ def send_header(socket); end
970
+
971
+ # Sends the response on +socket+
972
+ def send_response(socket); end
973
+
974
+ # Bytes sent in this response
975
+ def sent_size; end
976
+
977
+ # Creates an error page for exception +ex+ with an optional +backtrace+
978
+ def set_error(ex, backtrace = T.unsafe(nil)); end
979
+
980
+ # Redirects to +url+ with a WEBrick::HTTPStatus::Redirect +status+.
981
+ #
982
+ # Example:
983
+ #
984
+ # res.set_redirect WEBrick::HTTPStatus::TemporaryRedirect
985
+ def set_redirect(status, url); end
986
+
987
+ # Sets up the headers for sending
988
+ def setup_header; end
989
+
990
+ # Response status code (200)
991
+ def status; end
992
+
993
+ # Sets the response's status to the +status+ code
994
+ def status=(status); end
995
+
996
+ # The response's HTTP status line
997
+ def status_line; end
998
+
999
+ private
1000
+
1001
+ # preserved for compatibility with some 3rd-party handlers
1002
+ def _write_data(socket, data); end
1003
+
1004
+ def check_header(header_value); end
1005
+
1006
+ # :stopdoc:
1007
+ def error_body(backtrace, ex, host, port); end
1008
+
1009
+ def send_body_io(socket); end
1010
+ def send_body_proc(socket); end
1011
+ def send_body_string(socket); end
1012
+ end
1013
+
1014
+ class WEBrick::HTTPResponse::ChunkedWrapper
1015
+ # @return [ChunkedWrapper] a new instance of ChunkedWrapper
1016
+ def initialize(socket, resp); end
1017
+
1018
+ def <<(*buf); end
1019
+ def write(buf); end
1020
+ end
1021
+
1022
+ # An HTTP Server
1023
+ class WEBrick::HTTPServer < ::WEBrick::GenericServer
1024
+ # Creates a new HTTP server according to +config+
1025
+ #
1026
+ # An HTTP server uses the following attributes:
1027
+ #
1028
+ # :AccessLog:: An array of access logs. See WEBrick::AccessLog
1029
+ # :BindAddress:: Local address for the server to bind to
1030
+ # :DocumentRoot:: Root path to serve files from
1031
+ # :DocumentRootOptions:: Options for the default HTTPServlet::FileHandler
1032
+ # :HTTPVersion:: The HTTP version of this server
1033
+ # :Port:: Port to listen on
1034
+ # :RequestCallback:: Called with a request and response before each
1035
+ # request is serviced.
1036
+ # :RequestTimeout:: Maximum time to wait between requests
1037
+ # :ServerAlias:: Array of alternate names for this server for virtual
1038
+ # hosting
1039
+ # :ServerName:: Name for this server for virtual hosting
1040
+ #
1041
+ # @return [HTTPServer] a new instance of HTTPServer
1042
+ def initialize(config = T.unsafe(nil), default = T.unsafe(nil)); end
1043
+
1044
+ # Logs +req+ and +res+ in the access logs. +config+ is used for the
1045
+ # server name.
1046
+ def access_log(config, req, res); end
1047
+
1048
+ # Creates the HTTPRequest used when handling the HTTP
1049
+ # request. Can be overridden by subclasses.
1050
+ def create_request(with_webrick_config); end
1051
+
1052
+ # Creates the HTTPResponse used when handling the HTTP
1053
+ # request. Can be overridden by subclasses.
1054
+ def create_response(with_webrick_config); end
1055
+
1056
+ # The default OPTIONS request handler says GET, HEAD, POST and OPTIONS
1057
+ # requests are allowed.
1058
+ def do_OPTIONS(req, res); end
1059
+
1060
+ # Finds the appropriate virtual host to handle +req+
1061
+ def lookup_server(req); end
1062
+
1063
+ # Mounts +servlet+ on +dir+ passing +options+ to the servlet at creation
1064
+ # time
1065
+ def mount(dir, servlet, *options); end
1066
+
1067
+ # Mounts +proc+ or +block+ on +dir+ and calls it with a
1068
+ # WEBrick::HTTPRequest and WEBrick::HTTPResponse
1069
+ #
1070
+ # @raise [HTTPServerError]
1071
+ def mount_proc(dir, proc = T.unsafe(nil), &block); end
1072
+
1073
+ # Processes requests on +sock+
1074
+ def run(sock); end
1075
+
1076
+ # Finds a servlet for +path+
1077
+ def search_servlet(path); end
1078
+
1079
+ # Services +req+ and fills in +res+
1080
+ #
1081
+ # @raise [HTTPStatus::NotFound]
1082
+ def service(req, res); end
1083
+
1084
+ # Unmounts +dir+
1085
+ def umount(dir); end
1086
+
1087
+ # Unmounts +dir+
1088
+ def unmount(dir); end
1089
+
1090
+ # Adds +server+ as a virtual host.
1091
+ def virtual_host(server); end
1092
+ end
1093
+
1094
+ # Mount table for the path a servlet is mounted on in the directory space
1095
+ # of the server. Users of WEBrick can only access this indirectly via
1096
+ # WEBrick::HTTPServer#mount, WEBrick::HTTPServer#unmount and
1097
+ # WEBrick::HTTPServer#search_servlet
1098
+ class WEBrick::HTTPServer::MountTable
1099
+ # @return [MountTable] a new instance of MountTable
1100
+ def initialize; end
1101
+
1102
+ def [](dir); end
1103
+ def []=(dir, val); end
1104
+ def delete(dir); end
1105
+ def scan(path); end
1106
+
1107
+ private
1108
+
1109
+ def compile; end
1110
+ def normalize(dir); end
1111
+ end
1112
+
1113
+ # AbstractServlet allows HTTP server modules to be reused across multiple
1114
+ # servers and allows encapsulation of functionality.
1115
+ #
1116
+ # By default a servlet will respond to GET, HEAD (through an alias to GET)
1117
+ # and OPTIONS requests.
1118
+ #
1119
+ # By default a new servlet is initialized for every request. A servlet
1120
+ # instance can be reused by overriding ::get_instance in the
1121
+ # AbstractServlet subclass.
1122
+ #
1123
+ # == A Simple Servlet
1124
+ #
1125
+ # class Simple < WEBrick::HTTPServlet::AbstractServlet
1126
+ # def do_GET request, response
1127
+ # status, content_type, body = do_stuff_with request
1128
+ #
1129
+ # response.status = status
1130
+ # response['Content-Type'] = content_type
1131
+ # response.body = body
1132
+ # end
1133
+ #
1134
+ # def do_stuff_with request
1135
+ # return 200, 'text/plain', 'you got a page'
1136
+ # end
1137
+ # end
1138
+ #
1139
+ # This servlet can be mounted on a server at a given path:
1140
+ #
1141
+ # server.mount '/simple', Simple
1142
+ #
1143
+ # == Servlet Configuration
1144
+ #
1145
+ # Servlets can be configured via initialize. The first argument is the
1146
+ # HTTP server the servlet is being initialized for.
1147
+ #
1148
+ # class Configurable < Simple
1149
+ # def initialize server, color, size
1150
+ # super server
1151
+ # @color = color
1152
+ # @size = size
1153
+ # end
1154
+ #
1155
+ # def do_stuff_with request
1156
+ # content = "<p " \
1157
+ # %q{style="color: #{@color}; font-size: #{@size}"} \
1158
+ # ">Hello, World!"
1159
+ #
1160
+ # return 200, "text/html", content
1161
+ # end
1162
+ # end
1163
+ #
1164
+ # This servlet must be provided two arguments at mount time:
1165
+ #
1166
+ # server.mount '/configurable', Configurable, 'red', '2em'
1167
+ class WEBrick::HTTPServlet::AbstractServlet
1168
+ # Initializes a new servlet for +server+ using +options+ which are
1169
+ # stored as-is in +@options+. +@logger+ is also provided.
1170
+ #
1171
+ # @return [AbstractServlet] a new instance of AbstractServlet
1172
+ def initialize(server, *options); end
1173
+
1174
+ # Raises a NotFound exception
1175
+ #
1176
+ # @raise [HTTPStatus::NotFound]
1177
+ def do_GET(req, res); end
1178
+
1179
+ # Dispatches to do_GET
1180
+ def do_HEAD(req, res); end
1181
+
1182
+ # Returns the allowed HTTP request methods
1183
+ def do_OPTIONS(req, res); end
1184
+
1185
+ # Dispatches to a +do_+ method based on +req+ if such a method is
1186
+ # available. (+do_GET+ for a GET request). Raises a MethodNotAllowed
1187
+ # exception if the method is not implemented.
1188
+ def service(req, res); end
1189
+
1190
+ private
1191
+
1192
+ # Redirects to a path ending in /
1193
+ def redirect_to_directory_uri(req, res); end
1194
+
1195
+ class << self
1196
+ # Factory for servlet instances that will handle a request from +server+
1197
+ # using +options+ from the mount point. By default a new servlet
1198
+ # instance is created for every call.
1199
+ def get_instance(server, *options); end
1200
+ end
1201
+ end
1202
+
1203
+ # Servlet for handling CGI scripts
1204
+ #
1205
+ # Example:
1206
+ #
1207
+ # server.mount('/cgi/my_script', WEBrick::HTTPServlet::CGIHandler,
1208
+ # '/path/to/my_script')
1209
+ class WEBrick::HTTPServlet::CGIHandler < ::WEBrick::HTTPServlet::AbstractServlet
1210
+ # Creates a new CGI script servlet for the script at +name+
1211
+ #
1212
+ # @return [CGIHandler] a new instance of CGIHandler
1213
+ def initialize(server, name); end
1214
+
1215
+ # :stopdoc:
1216
+ #
1217
+ # @raise [HTTPStatus::InternalServerError]
1218
+ def do_GET(req, res); end
1219
+
1220
+ # :stopdoc:
1221
+ #
1222
+ # @raise [HTTPStatus::InternalServerError]
1223
+ def do_POST(req, res); end
1224
+ end
1225
+
1226
+ WEBrick::HTTPServlet::CGIHandler::CGIRunnerArray = T.let(T.unsafe(nil), Array)
1227
+
1228
+ # Servlet for serving a single file. You probably want to use the
1229
+ # FileHandler servlet instead as it handles directories and fancy indexes.
1230
+ #
1231
+ # Example:
1232
+ #
1233
+ # server.mount('/my_page.txt', WEBrick::HTTPServlet::DefaultFileHandler,
1234
+ # '/path/to/my_page.txt')
1235
+ #
1236
+ # This servlet handles If-Modified-Since and Range requests.
1237
+ class WEBrick::HTTPServlet::DefaultFileHandler < ::WEBrick::HTTPServlet::AbstractServlet
1238
+ # Creates a DefaultFileHandler instance for the file at +local_path+.
1239
+ #
1240
+ # @return [DefaultFileHandler] a new instance of DefaultFileHandler
1241
+ def initialize(server, local_path); end
1242
+
1243
+ # :stopdoc:
1244
+ def do_GET(req, res); end
1245
+
1246
+ def make_partial_content(req, res, filename, filesize); end
1247
+
1248
+ # returns a lambda for webrick/httpresponse.rb send_body_proc
1249
+ def multipart_body(body, parts, boundary, mtype, filesize); end
1250
+
1251
+ # @return [Boolean]
1252
+ def not_modified?(req, res, mtime, etag); end
1253
+
1254
+ def prepare_range(range, filesize); end
1255
+ end
1256
+
1257
+ # ERBHandler evaluates an ERB file and returns the result. This handler
1258
+ # is automatically used if there are .rhtml files in a directory served by
1259
+ # the FileHandler.
1260
+ #
1261
+ # ERBHandler supports GET and POST methods.
1262
+ #
1263
+ # The ERB file is evaluated with the local variables +servlet_request+ and
1264
+ # +servlet_response+ which are a WEBrick::HTTPRequest and
1265
+ # WEBrick::HTTPResponse respectively.
1266
+ #
1267
+ # Example .rhtml file:
1268
+ #
1269
+ # Request to <%= servlet_request.request_uri %>
1270
+ #
1271
+ # Query params <%= servlet_request.query.inspect %>
1272
+ class WEBrick::HTTPServlet::ERBHandler < ::WEBrick::HTTPServlet::AbstractServlet
1273
+ # Creates a new ERBHandler on +server+ that will evaluate and serve the
1274
+ # ERB file +name+
1275
+ #
1276
+ # @return [ERBHandler] a new instance of ERBHandler
1277
+ def initialize(server, name); end
1278
+
1279
+ # Handles GET requests
1280
+ def do_GET(req, res); end
1281
+
1282
+ # Handles GET requests
1283
+ #
1284
+ # Handles POST requests
1285
+ def do_POST(req, res); end
1286
+
1287
+ private
1288
+
1289
+ # Evaluates +erb+ providing +servlet_request+ and +servlet_response+ as
1290
+ # local variables.
1291
+ def evaluate(erb, servlet_request, servlet_response); end
1292
+ end
1293
+
1294
+ # Serves a directory including fancy indexing and a variety of other
1295
+ # options.
1296
+ #
1297
+ # Example:
1298
+ #
1299
+ # server.mount('/assets', WEBrick::HTTPServlet::FileHandler,
1300
+ # '/path/to/assets')
1301
+ class WEBrick::HTTPServlet::FileHandler < ::WEBrick::HTTPServlet::AbstractServlet
1302
+ # Creates a FileHandler servlet on +server+ that serves files starting
1303
+ # at directory +root+
1304
+ #
1305
+ # +options+ may be a Hash containing keys from
1306
+ # WEBrick::Config::FileHandler or +true+ or +false+.
1307
+ #
1308
+ # If +options+ is true or false then +:FancyIndexing+ is enabled or
1309
+ # disabled respectively.
1310
+ #
1311
+ # @return [FileHandler] a new instance of FileHandler
1312
+ def initialize(server, root, options = T.unsafe(nil), default = T.unsafe(nil)); end
1313
+
1314
+ def do_GET(req, res); end
1315
+ def do_OPTIONS(req, res); end
1316
+ def do_POST(req, res); end
1317
+ def service(req, res); end
1318
+
1319
+ # :stopdoc:
1320
+ def set_filesystem_encoding(str); end
1321
+
1322
+ private
1323
+
1324
+ def call_callback(callback_name, req, res); end
1325
+ def check_filename(req, res, name); end
1326
+
1327
+ # @raise [HTTPStatus::NotFound]
1328
+ def exec_handler(req, res); end
1329
+
1330
+ def get_handler(req, res); end
1331
+
1332
+ # @return [Boolean]
1333
+ def nondisclosure_name?(name); end
1334
+
1335
+ def prevent_directory_traversal(req, res); end
1336
+ def search_file(req, res, basename); end
1337
+ def search_index_file(req, res); end
1338
+ def set_dir_list(req, res); end
1339
+ def set_filename(req, res); end
1340
+ def shift_path_info(req, res, path_info, base = T.unsafe(nil)); end
1341
+
1342
+ # @return [Boolean]
1343
+ def trailing_pathsep?(path); end
1344
+
1345
+ # @return [Boolean]
1346
+ def windows_ambiguous_name?(name); end
1347
+
1348
+ class << self
1349
+ # Allow custom handling of requests for files with +suffix+ by class
1350
+ # +handler+
1351
+ def add_handler(suffix, handler); end
1352
+
1353
+ # Remove custom handling of requests for files with +suffix+
1354
+ def remove_handler(suffix); end
1355
+ end
1356
+ end
1357
+
1358
+ # This module is used to manager HTTP status codes.
1359
+ #
1360
+ # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for more
1361
+ # information.
1362
+ module WEBrick::HTTPStatus
1363
+ private
1364
+
1365
+ # Is +code+ a client error status?
1366
+ #
1367
+ # @return [Boolean]
1368
+ def client_error?(code); end
1369
+
1370
+ # Is +code+ an error status?
1371
+ #
1372
+ # @return [Boolean]
1373
+ def error?(code); end
1374
+
1375
+ # Is +code+ an informational status?
1376
+ #
1377
+ # @return [Boolean]
1378
+ def info?(code); end
1379
+
1380
+ # Returns the description corresponding to the HTTP status +code+
1381
+ #
1382
+ # WEBrick::HTTPStatus.reason_phrase 404
1383
+ # => "Not Found"
1384
+ def reason_phrase(code); end
1385
+
1386
+ # Is +code+ a redirection status?
1387
+ #
1388
+ # @return [Boolean]
1389
+ def redirect?(code); end
1390
+
1391
+ # Is +code+ a server error status?
1392
+ #
1393
+ # @return [Boolean]
1394
+ def server_error?(code); end
1395
+
1396
+ # Is +code+ a successful status?
1397
+ #
1398
+ # @return [Boolean]
1399
+ def success?(code); end
1400
+
1401
+ class << self
1402
+ # Returns the status class corresponding to +code+
1403
+ #
1404
+ # WEBrick::HTTPStatus[302]
1405
+ # => WEBrick::HTTPStatus::NotFound
1406
+ def [](code); end
1407
+
1408
+ # Is +code+ a client error status?
1409
+ #
1410
+ # @return [Boolean]
1411
+ def client_error?(code); end
1412
+
1413
+ # Is +code+ an error status?
1414
+ #
1415
+ # @return [Boolean]
1416
+ def error?(code); end
1417
+
1418
+ # Is +code+ an informational status?
1419
+ #
1420
+ # @return [Boolean]
1421
+ def info?(code); end
1422
+
1423
+ # Returns the description corresponding to the HTTP status +code+
1424
+ #
1425
+ # WEBrick::HTTPStatus.reason_phrase 404
1426
+ # => "Not Found"
1427
+ def reason_phrase(code); end
1428
+
1429
+ # Is +code+ a redirection status?
1430
+ #
1431
+ # @return [Boolean]
1432
+ def redirect?(code); end
1433
+
1434
+ # Is +code+ a server error status?
1435
+ #
1436
+ # @return [Boolean]
1437
+ def server_error?(code); end
1438
+
1439
+ # Is +code+ a successful status?
1440
+ #
1441
+ # @return [Boolean]
1442
+ def success?(code); end
1443
+ end
1444
+ end
1445
+
1446
+ # Root of the HTTP status class hierarchy
1447
+ class WEBrick::HTTPStatus::Status < ::StandardError
1448
+ # Returns the HTTP status code
1449
+ def code; end
1450
+
1451
+ # Returns the HTTP status description
1452
+ def reason_phrase; end
1453
+
1454
+ # Returns the HTTP status code
1455
+ def to_i; end
1456
+
1457
+ class << self
1458
+ def code; end
1459
+ def reason_phrase; end
1460
+ end
1461
+ end
1462
+
1463
+ # HTTPUtils provides utility methods for working with the HTTP protocol.
1464
+ #
1465
+ # This module is generally used internally by WEBrick
1466
+ module WEBrick::HTTPUtils
1467
+ private
1468
+
1469
+ def _escape(str, regex); end
1470
+
1471
+ # :stopdoc:
1472
+ def _make_regex(str); end
1473
+
1474
+ def _make_regex!(str); end
1475
+ def _unescape(str, regex); end
1476
+
1477
+ # Removes quotes and escapes from +str+
1478
+ def dequote(str); end
1479
+
1480
+ # Escapes HTTP reserved and unwise characters in +str+
1481
+ def escape(str); end
1482
+
1483
+ # Escapes 8 bit characters in +str+
1484
+ def escape8bit(str); end
1485
+
1486
+ # Escapes form reserved characters in +str+
1487
+ def escape_form(str); end
1488
+
1489
+ # Escapes path +str+
1490
+ def escape_path(str); end
1491
+
1492
+ # Loads Apache-compatible mime.types in +file+.
1493
+ def load_mime_types(file); end
1494
+
1495
+ # Returns the mime type of +filename+ from the list in +mime_tab+. If no
1496
+ # mime type was found application/octet-stream is returned.
1497
+ def mime_type(filename, mime_tab); end
1498
+
1499
+ # Normalizes a request path. Raises an exception if the path cannot be
1500
+ # normalized.
1501
+ def normalize_path(path); end
1502
+
1503
+ # Parses form data in +io+ with the given +boundary+
1504
+ def parse_form_data(io, boundary); end
1505
+
1506
+ # Parses an HTTP header +raw+ into a hash of header fields with an Array
1507
+ # of values.
1508
+ def parse_header(raw); end
1509
+
1510
+ # Parses the query component of a URI in +str+
1511
+ def parse_query(str); end
1512
+
1513
+ # Parses q values in +value+ as used in Accept headers.
1514
+ def parse_qvalues(value); end
1515
+
1516
+ # Parses a Range header value +ranges_specifier+
1517
+ def parse_range_header(ranges_specifier); end
1518
+
1519
+ # Quotes and escapes quotes in +str+
1520
+ def quote(str); end
1521
+
1522
+ # Splits a header value +str+ according to HTTP specification.
1523
+ def split_header_value(str); end
1524
+
1525
+ # Unescapes HTTP reserved and unwise characters in +str+
1526
+ def unescape(str); end
1527
+
1528
+ # Unescapes form reserved characters in +str+
1529
+ def unescape_form(str); end
1530
+
1531
+ class << self
1532
+ def _escape(str, regex); end
1533
+
1534
+ # :stopdoc:
1535
+ def _make_regex(str); end
1536
+
1537
+ def _make_regex!(str); end
1538
+ def _unescape(str, regex); end
1539
+
1540
+ # Removes quotes and escapes from +str+
1541
+ def dequote(str); end
1542
+
1543
+ # Escapes HTTP reserved and unwise characters in +str+
1544
+ def escape(str); end
1545
+
1546
+ # Escapes 8 bit characters in +str+
1547
+ def escape8bit(str); end
1548
+
1549
+ # Escapes form reserved characters in +str+
1550
+ def escape_form(str); end
1551
+
1552
+ # Escapes path +str+
1553
+ def escape_path(str); end
1554
+
1555
+ # Loads Apache-compatible mime.types in +file+.
1556
+ def load_mime_types(file); end
1557
+
1558
+ # Returns the mime type of +filename+ from the list in +mime_tab+. If no
1559
+ # mime type was found application/octet-stream is returned.
1560
+ def mime_type(filename, mime_tab); end
1561
+
1562
+ # Normalizes a request path. Raises an exception if the path cannot be
1563
+ # normalized.
1564
+ def normalize_path(path); end
1565
+
1566
+ # Parses form data in +io+ with the given +boundary+
1567
+ def parse_form_data(io, boundary); end
1568
+
1569
+ # Parses an HTTP header +raw+ into a hash of header fields with an Array
1570
+ # of values.
1571
+ def parse_header(raw); end
1572
+
1573
+ # Parses the query component of a URI in +str+
1574
+ def parse_query(str); end
1575
+
1576
+ # Parses q values in +value+ as used in Accept headers.
1577
+ def parse_qvalues(value); end
1578
+
1579
+ # Parses a Range header value +ranges_specifier+
1580
+ def parse_range_header(ranges_specifier); end
1581
+
1582
+ # Quotes and escapes quotes in +str+
1583
+ def quote(str); end
1584
+
1585
+ # Splits a header value +str+ according to HTTP specification.
1586
+ def split_header_value(str); end
1587
+
1588
+ # Unescapes HTTP reserved and unwise characters in +str+
1589
+ def unescape(str); end
1590
+
1591
+ # Unescapes form reserved characters in +str+
1592
+ def unescape_form(str); end
1593
+ end
1594
+ end
1595
+
1596
+ # Stores multipart form data. FormData objects are created when
1597
+ # WEBrick::HTTPUtils.parse_form_data is called.
1598
+ class WEBrick::HTTPUtils::FormData < ::String
1599
+ # Creates a new FormData object.
1600
+ #
1601
+ # +args+ is an Array of form data entries. One FormData will be created
1602
+ # for each entry.
1603
+ #
1604
+ # This is called by WEBrick::HTTPUtils.parse_form_data for you
1605
+ #
1606
+ # @return [FormData] a new instance of FormData
1607
+ def initialize(*args); end
1608
+
1609
+ # Adds +str+ to this FormData which may be the body, a header or a
1610
+ # header entry.
1611
+ #
1612
+ # This is called by WEBrick::HTTPUtils.parse_form_data for you
1613
+ def <<(str); end
1614
+
1615
+ # Retrieves the header at the first entry in +key+
1616
+ def [](*key); end
1617
+
1618
+ # Adds +data+ at the end of the chain of entries
1619
+ #
1620
+ # This is called by WEBrick::HTTPUtils.parse_form_data for you.
1621
+ def append_data(data); end
1622
+
1623
+ # Yields each entry in this FormData
1624
+ def each_data; end
1625
+
1626
+ # The filename of the form data part
1627
+ def filename; end
1628
+
1629
+ # The filename of the form data part
1630
+ def filename=(_arg0); end
1631
+
1632
+ # Returns all the FormData as an Array
1633
+ def list; end
1634
+
1635
+ # The name of the form data part
1636
+ def name; end
1637
+
1638
+ # The name of the form data part
1639
+ def name=(_arg0); end
1640
+
1641
+ def next_data=(_arg0); end
1642
+
1643
+ # Returns all the FormData as an Array
1644
+ #
1645
+ # A FormData will behave like an Array
1646
+ def to_ary; end
1647
+
1648
+ # This FormData's body
1649
+ def to_s; end
1650
+
1651
+ protected
1652
+
1653
+ def next_data; end
1654
+ end
1655
+
1656
+ module WEBrick::Utils
1657
+ private
1658
+
1659
+ # Creates TCP server sockets bound to +address+:+port+ and returns them.
1660
+ #
1661
+ # It will create IPV4 and IPV6 sockets on all interfaces.
1662
+ def create_listeners(address, port); end
1663
+
1664
+ # The server hostname
1665
+ def getservername; end
1666
+
1667
+ # Generates a random string of length +len+
1668
+ def random_string(len); end
1669
+
1670
+ # Sets the close on exec flag for +io+
1671
+ def set_close_on_exec(io); end
1672
+
1673
+ # Sets IO operations on +io+ to be non-blocking
1674
+ def set_non_blocking(io); end
1675
+
1676
+ # Changes the process's uid and gid to the ones of +user+
1677
+ def su(user); end
1678
+
1679
+ # Executes the passed block and raises +exception+ if execution takes more
1680
+ # than +seconds+.
1681
+ #
1682
+ # If +seconds+ is zero or nil, simply executes the block
1683
+ def timeout(seconds, exception = T.unsafe(nil)); end
1684
+
1685
+ class << self
1686
+ # Creates TCP server sockets bound to +address+:+port+ and returns them.
1687
+ #
1688
+ # It will create IPV4 and IPV6 sockets on all interfaces.
1689
+ def create_listeners(address, port); end
1690
+
1691
+ # The server hostname
1692
+ def getservername; end
1693
+
1694
+ # Generates a random string of length +len+
1695
+ def random_string(len); end
1696
+
1697
+ # Sets the close on exec flag for +io+
1698
+ def set_close_on_exec(io); end
1699
+
1700
+ # Sets IO operations on +io+ to be non-blocking
1701
+ def set_non_blocking(io); end
1702
+
1703
+ # Changes the process's uid and gid to the ones of +user+
1704
+ def su(user); end
1705
+
1706
+ # Executes the passed block and raises +exception+ if execution takes more
1707
+ # than +seconds+.
1708
+ #
1709
+ # If +seconds+ is zero or nil, simply executes the block
1710
+ def timeout(seconds, exception = T.unsafe(nil)); end
1711
+ end
1712
+ end
1713
+
1714
+ # Class used to manage timeout handlers across multiple threads.
1715
+ #
1716
+ # Timeout handlers should be managed by using the class methods which are
1717
+ # synchronized.
1718
+ #
1719
+ # id = TimeoutHandler.register(10, Timeout::Error)
1720
+ # begin
1721
+ # sleep 20
1722
+ # puts 'foo'
1723
+ # ensure
1724
+ # TimeoutHandler.cancel(id)
1725
+ # end
1726
+ #
1727
+ # will raise Timeout::Error
1728
+ #
1729
+ # id = TimeoutHandler.register(10, Timeout::Error)
1730
+ # begin
1731
+ # sleep 5
1732
+ # puts 'foo'
1733
+ # ensure
1734
+ # TimeoutHandler.cancel(id)
1735
+ # end
1736
+ #
1737
+ # will print 'foo'
1738
+ class WEBrick::Utils::TimeoutHandler
1739
+ include ::Singleton
1740
+ extend ::Singleton::SingletonClassMethods
1741
+
1742
+ # Creates a new TimeoutHandler. You should use ::register and ::cancel
1743
+ # instead of creating the timeout handler directly.
1744
+ #
1745
+ # @return [TimeoutHandler] a new instance of TimeoutHandler
1746
+ def initialize; end
1747
+
1748
+ # Cancels the timeout handler +id+
1749
+ def cancel(thread, id); end
1750
+
1751
+ # Interrupts the timeout handler +id+ and raises +exception+
1752
+ def interrupt(thread, id, exception); end
1753
+
1754
+ # Registers a new timeout handler
1755
+ #
1756
+ # +time+:: Timeout in seconds
1757
+ # +exception+:: Exception to raise when timeout elapsed
1758
+ def register(thread, time, exception); end
1759
+
1760
+ def terminate; end
1761
+
1762
+ private
1763
+
1764
+ def watch; end
1765
+ def watcher; end
1766
+
1767
+ class << self
1768
+ # Cancels the timeout handler +id+
1769
+ def cancel(id); end
1770
+
1771
+ # Registers a new timeout handler
1772
+ #
1773
+ # +time+:: Timeout in seconds
1774
+ # +exception+:: Exception to raise when timeout elapsed
1775
+ def register(seconds, exception); end
1776
+
1777
+ def terminate; end
1778
+ end
1779
+ end