webrick 1.8.2 → 1.9.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.
@@ -0,0 +1,255 @@
1
+ module WEBrick
2
+ #
3
+ # This module is used to manager HTTP status codes.
4
+ #
5
+ # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for more
6
+ # information.
7
+ module HTTPStatus
8
+ #
9
+ # Root of the HTTP status class hierarchy
10
+ class Status < StandardError
11
+ attr_reader self.code: Integer
12
+
13
+ attr_reader self.reason_phrase: String
14
+
15
+ # Returns the HTTP status code
16
+ def code: () -> Integer
17
+
18
+ # Returns the HTTP status description
19
+ def reason_phrase: () -> String
20
+
21
+ alias to_i code
22
+ end
23
+
24
+ # Root of the HTTP info statuses
25
+ class Info < Status
26
+ end
27
+
28
+ # Root of the HTTP success statuses
29
+ class Success < Status
30
+ end
31
+
32
+ # Root of the HTTP redirect statuses
33
+ class Redirect < Status
34
+ end
35
+
36
+ # Root of the HTTP error statuses
37
+ class Error < Status
38
+ end
39
+
40
+ # Root of the HTTP client error statuses
41
+ class ClientError < Error
42
+ end
43
+
44
+ # Root of the HTTP server error statuses
45
+ class ServerError < Error
46
+ end
47
+
48
+ class EOFError < StandardError
49
+ end
50
+
51
+ # HTTP status codes and descriptions
52
+ StatusMessage: Hash[Integer, String]
53
+
54
+ # Maps a status code to the corresponding Status class
55
+ CodeToError: Hash[Integer, singleton(Status)]
56
+
57
+ # WEBrick::HTTPStatus::constants.grep(/\ARC_/).map{"#{_1}: #{WEBrick::HTTPStatus.const_get(_1)}"}
58
+
59
+ RC_CONTINUE: 100
60
+ RC_SWITCHING_PROTOCOLS: 101
61
+ RC_OK: 200
62
+ RC_CREATED: 201
63
+ RC_ACCEPTED: 202
64
+ RC_NON_AUTHORITATIVE_INFORMATION: 203
65
+ RC_NO_CONTENT: 204
66
+ RC_RESET_CONTENT: 205
67
+ RC_PARTIAL_CONTENT: 206
68
+ RC_MULTI_STATUS: 207
69
+ RC_MULTIPLE_CHOICES: 300
70
+ RC_MOVED_PERMANENTLY: 301
71
+ RC_FOUND: 302
72
+ RC_SEE_OTHER: 303
73
+ RC_NOT_MODIFIED: 304
74
+ RC_USE_PROXY: 305
75
+ RC_TEMPORARY_REDIRECT: 307
76
+ RC_BAD_REQUEST: 400
77
+ RC_UNAUTHORIZED: 401
78
+ RC_PAYMENT_REQUIRED: 402
79
+ RC_FORBIDDEN: 403
80
+ RC_NOT_FOUND: 404
81
+ RC_METHOD_NOT_ALLOWED: 405
82
+ RC_NOT_ACCEPTABLE: 406
83
+ RC_PROXY_AUTHENTICATION_REQUIRED: 407
84
+ RC_REQUEST_TIMEOUT: 408
85
+ RC_CONFLICT: 409
86
+ RC_GONE: 410
87
+ RC_PRECONDITION_FAILED: 412
88
+ RC_LENGTH_REQUIRED: 411
89
+ RC_REQUEST_ENTITY_TOO_LARGE: 413
90
+ RC_REQUEST_URI_TOO_LARGE: 414
91
+ RC_UNSUPPORTED_MEDIA_TYPE: 415
92
+ RC_EXPECTATION_FAILED: 417
93
+ RC_UNPROCESSABLE_ENTITY: 422
94
+ RC_LOCKED: 423
95
+ RC_FAILED_DEPENDENCY: 424
96
+ RC_REQUEST_RANGE_NOT_SATISFIABLE: 416
97
+ RC_UPGRADE_REQUIRED: 426
98
+ RC_PRECONDITION_REQUIRED: 428
99
+ RC_TOO_MANY_REQUESTS: 429
100
+ RC_REQUEST_HEADER_FIELDS_TOO_LARGE: 431
101
+ RC_UNAVAILABLE_FOR_LEGAL_REASONS: 451
102
+ RC_INTERNAL_SERVER_ERROR: 500
103
+ RC_NOT_IMPLEMENTED: 501
104
+ RC_BAD_GATEWAY: 502
105
+ RC_SERVICE_UNAVAILABLE: 503
106
+ RC_GATEWAY_TIMEOUT: 504
107
+ RC_HTTP_VERSION_NOT_SUPPORTED: 505
108
+ RC_INSUFFICIENT_STORAGE: 507
109
+ RC_NETWORK_AUTHENTICATION_REQUIRED: 511
110
+
111
+ # WEBrick::HTTPStatus::CodeToError.each_value.map{"class #{_1.name.split(/::/).last} < #{_1.superclass.name.split(/::/).last}\nend"}
112
+
113
+ class Continue < Info
114
+ end
115
+ class SwitchingProtocols < Info
116
+ end
117
+ class OK < Success
118
+ end
119
+ class Created < Success
120
+ end
121
+ class Accepted < Success
122
+ end
123
+ class NonAuthoritativeInformation < Success
124
+ end
125
+ class NoContent < Success
126
+ end
127
+ class ResetContent < Success
128
+ end
129
+ class PartialContent < Success
130
+ end
131
+ class MultiStatus < Success
132
+ end
133
+ class MultipleChoices < Redirect
134
+ end
135
+ class MovedPermanently < Redirect
136
+ end
137
+ class Found < Redirect
138
+ end
139
+ class SeeOther < Redirect
140
+ end
141
+ class NotModified < Redirect
142
+ end
143
+ class UseProxy < Redirect
144
+ end
145
+ class TemporaryRedirect < Redirect
146
+ end
147
+ class BadRequest < ClientError
148
+ end
149
+ class Unauthorized < ClientError
150
+ end
151
+ class PaymentRequired < ClientError
152
+ end
153
+ class Forbidden < ClientError
154
+ end
155
+ class NotFound < ClientError
156
+ end
157
+ class MethodNotAllowed < ClientError
158
+ end
159
+ class NotAcceptable < ClientError
160
+ end
161
+ class ProxyAuthenticationRequired < ClientError
162
+ end
163
+ class RequestTimeout < ClientError
164
+ end
165
+ class Conflict < ClientError
166
+ end
167
+ class Gone < ClientError
168
+ end
169
+ class LengthRequired < ClientError
170
+ end
171
+ class PreconditionFailed < ClientError
172
+ end
173
+ class RequestEntityTooLarge < ClientError
174
+ end
175
+ class RequestURITooLarge < ClientError
176
+ end
177
+ class UnsupportedMediaType < ClientError
178
+ end
179
+ class RequestRangeNotSatisfiable < ClientError
180
+ end
181
+ class ExpectationFailed < ClientError
182
+ end
183
+ class UnprocessableEntity < ClientError
184
+ end
185
+ class Locked < ClientError
186
+ end
187
+ class FailedDependency < ClientError
188
+ end
189
+ class UpgradeRequired < ClientError
190
+ end
191
+ class PreconditionRequired < ClientError
192
+ end
193
+ class TooManyRequests < ClientError
194
+ end
195
+ class RequestHeaderFieldsTooLarge < ClientError
196
+ end
197
+ class UnavailableForLegalReasons < ClientError
198
+ end
199
+ class InternalServerError < ServerError
200
+ end
201
+ class NotImplemented < ServerError
202
+ end
203
+ class BadGateway < ServerError
204
+ end
205
+ class ServiceUnavailable < ServerError
206
+ end
207
+ class GatewayTimeout < ServerError
208
+ end
209
+ class HTTPVersionNotSupported < ServerError
210
+ end
211
+ class InsufficientStorage < ServerError
212
+ end
213
+ class NetworkAuthenticationRequired < ServerError
214
+ end
215
+
216
+ #
217
+ # Returns the description corresponding to the HTTP status +code+
218
+ #
219
+ # WEBrick::HTTPStatus.reason_phrase 404
220
+ # => "Not Found"
221
+ def self?.reason_phrase: (Integer code) -> String
222
+
223
+ #
224
+ # Is +code+ an informational status?
225
+ def self?.info?: (Integer code) -> bool
226
+
227
+ #
228
+ # Is +code+ a successful status?
229
+ def self?.success?: (Integer code) -> bool
230
+
231
+ #
232
+ # Is +code+ a redirection status?
233
+ def self?.redirect?: (Integer code) -> bool
234
+
235
+ #
236
+ # Is +code+ an error status?
237
+ def self?.error?: (Integer code) -> bool
238
+
239
+ #
240
+ # Is +code+ a client error status?
241
+ def self?.client_error?: (Integer code) -> bool
242
+
243
+ #
244
+ # Is +code+ a server error status?
245
+ def self?.server_error?: (Integer code) -> bool
246
+
247
+ #
248
+ # Returns the status class corresponding to +code+
249
+ #
250
+ # WEBrick::HTTPStatus[302]
251
+ # => WEBrick::HTTPStatus::NotFound
252
+ #
253
+ def self.[]: (Integer code) -> singleton(Status)
254
+ end
255
+ end
data/sig/httputils.rbs ADDED
@@ -0,0 +1,116 @@
1
+ module WEBrick
2
+ CR: String
3
+
4
+ LF: String
5
+
6
+ CRLF: String
7
+
8
+ module HTTPUtils
9
+ def self?.normalize_path: (String path) -> String
10
+
11
+ type mime_types = Hash[String, String]
12
+
13
+ DefaultMimeTypes: mime_types
14
+
15
+ def self?.load_mime_types: (string | _ToPath file) -> mime_types
16
+
17
+ def self?.mime_type: (String filename, mime_types mime_tab) -> String
18
+
19
+ class SplitHeader < Array[String]
20
+ def join: (?String separator) -> String
21
+ end
22
+
23
+ class CookieHeader < Array[String]
24
+ def join: (?String separator) -> String
25
+ end
26
+
27
+ HEADER_CLASSES: Hash[String, untyped]
28
+
29
+ def self?.parse_header: (String raw) -> Hash[String, Array[String]]
30
+
31
+ def self?.split_header_value: (String str) -> Array[String]
32
+
33
+ def self?.parse_range_header: (String? ranges_specifier) -> Array[Range[Integer]]?
34
+
35
+ def self?.parse_qvalues: (String? value) -> Array[String]
36
+
37
+ def self?.dequote: (String str) -> String
38
+
39
+ def self?.quote: (String str) -> String
40
+
41
+ class FormData < String
42
+ @raw_header: Array[String]
43
+
44
+ @header: Hash[String, Array[String]]
45
+
46
+ EmptyRawHeader: Array[String]
47
+
48
+ EmptyHeader: Hash[String, Array[String]]
49
+
50
+ attr_accessor name: String?
51
+
52
+ attr_accessor filename: String?
53
+
54
+ attr_accessor next_data: instance?
55
+
56
+ def initialize: (*String args) -> void
57
+
58
+ def []: (*String key) -> String
59
+ # following is as same as String#[]
60
+ | (int start, ?int length) -> String?
61
+ | (range[int?] range) -> String?
62
+ | (Regexp regexp, ?MatchData::capture backref) -> String?
63
+ | (String substring) -> String?
64
+
65
+ def <<: (String str) -> self
66
+
67
+ def append_data: (instance data) -> self
68
+
69
+ def each_data: () { (instance) -> void } -> void
70
+
71
+ def list: () -> Array[String]
72
+
73
+ alias to_ary list
74
+
75
+ def to_s: () -> String
76
+ end
77
+
78
+ def self?.parse_query: (String? str) -> Hash[String, FormData]
79
+
80
+ interface _EachLine
81
+ def each_line: () { (String) -> void } -> void
82
+ end
83
+
84
+ def self?.parse_form_data: (_EachLine? io, interned boundary) -> Hash[String, FormData]
85
+
86
+ def self?._make_regex: (String str) -> Regexp
87
+
88
+ def self?._make_regex!: (String str) -> Regexp
89
+
90
+ def self?._escape: (String str, Regexp regex) -> String
91
+
92
+ def self?._unescape: (String str, Regexp regex) -> String
93
+
94
+ UNESCAPED: Regexp
95
+
96
+ UNESCAPED_FORM: Regexp
97
+
98
+ NONASCII: Regexp
99
+
100
+ ESCAPED: Regexp
101
+
102
+ UNESCAPED_PCHAR: Regexp
103
+
104
+ def self?.escape: (String str) -> String
105
+
106
+ def self?.unescape: (String str) -> String
107
+
108
+ def self?.escape_form: (String str) -> String
109
+
110
+ def self?.unescape_form: (String str) -> String
111
+
112
+ def self?.escape_path: (String str) -> String
113
+
114
+ def self?.escape8bit: (String str) -> String
115
+ end
116
+ end
@@ -0,0 +1,17 @@
1
+ module WEBrick
2
+ class HTTPVersion
3
+ include Comparable
4
+
5
+ attr_accessor major: Integer
6
+
7
+ attr_accessor minor: Integer
8
+
9
+ def self.convert: (HTTPVersion | String version) -> instance
10
+
11
+ def initialize: (HTTPVersion | String version) -> void
12
+
13
+ def <=>: (HTTPVersion | String other) -> Integer?
14
+
15
+ def to_s: () -> String
16
+ end
17
+ end
data/sig/log.rbs ADDED
@@ -0,0 +1,93 @@
1
+ module WEBrick
2
+ class BasicLog
3
+ @log: IO?
4
+
5
+ @opened: TrueClass?
6
+
7
+ FATAL: 1
8
+
9
+ ERROR: 2
10
+
11
+ WARN: 3
12
+
13
+ INFO: 4
14
+
15
+ DEBUG: 5
16
+
17
+ # log-level, messages above this level will be logged
18
+ attr_accessor level: Integer
19
+
20
+ type log_file = (IO | String)?
21
+
22
+ def initialize: (?log_file log_file, ?Integer? level) -> void
23
+
24
+ #
25
+ # Closes the logger (also closes the log device associated to the logger)
26
+ def close: () -> void
27
+
28
+ def log: (Integer level, String data) -> IO?
29
+
30
+ #
31
+ # Synonym for log(INFO, obj.to_s)
32
+ def <<: (_ToS obj) -> IO?
33
+
34
+ type message = Exception | _ToStr | Object
35
+
36
+ # Shortcut for logging a FATAL message
37
+ def fatal: (message msg) -> IO?
38
+
39
+ # Shortcut for logging an ERROR message
40
+ def error: (message msg) -> IO?
41
+
42
+ # Shortcut for logging a WARN message
43
+ def warn: (message msg) -> IO?
44
+
45
+ # Shortcut for logging an INFO message
46
+ def info: (message msg) -> IO?
47
+
48
+ # Shortcut for logging a DEBUG message
49
+ def debug: (message msg) -> IO?
50
+
51
+ # Will the logger output FATAL messages?
52
+ def fatal?: () -> bool
53
+
54
+ # Will the logger output ERROR messages?
55
+ def error?: () -> bool
56
+
57
+ # Will the logger output WARN messages?
58
+ def warn?: () -> bool
59
+
60
+ # Will the logger output INFO messages?
61
+ def info?: () -> bool
62
+
63
+ # Will the logger output DEBUG messages?
64
+ def debug?: () -> bool
65
+
66
+ private
67
+
68
+ #
69
+ # Formats +arg+ for the logger
70
+ #
71
+ # * If +arg+ is an Exception, it will format the error message and
72
+ # the back trace.
73
+ # * If +arg+ responds to #to_str, it will return it.
74
+ # * Otherwise it will return +arg+.inspect.
75
+ def format: (message arg) -> String
76
+ end
77
+
78
+ class Log < BasicLog
79
+ # Format of the timestamp which is applied to each logged line. The
80
+ # default is <tt>"[%Y-%m-%d %H:%M:%S]"</tt>
81
+ attr_accessor time_format: String
82
+
83
+ #
84
+ # Same as BasicLog#initialize
85
+ #
86
+ # You can set the timestamp format through #time_format
87
+ def initialize: (?BasicLog::log_file log_file, ?Integer? level) -> void
88
+
89
+ #
90
+ # Same as BasicLog#log
91
+ def log: (Integer level, String data) -> IO?
92
+ end
93
+ end
data/sig/manifest.yaml ADDED
@@ -0,0 +1,8 @@
1
+ dependencies:
2
+ - name: digest
3
+ - name: erb
4
+ - name: openssl
5
+ - name: singleton
6
+ - name: socket
7
+ - name: tempfile
8
+ - name: uri
data/sig/server.rbs ADDED
@@ -0,0 +1,57 @@
1
+ module WEBrick
2
+ class ServerError < StandardError
3
+ end
4
+
5
+ class SimpleServer
6
+ def self.start: [T] () { () -> T } -> T
7
+ end
8
+
9
+ class Daemon
10
+ def self.start: () -> void
11
+ | [T] () { () -> T } -> T
12
+ end
13
+
14
+ class GenericServer
15
+ @shutdown_pipe: [IO, IO]?
16
+
17
+ attr_reader status: :Stop | :Running | :Shutdown
18
+
19
+ attr_reader config: Hash[Symbol, untyped]
20
+
21
+ attr_reader logger: BasicLog
22
+
23
+ attr_reader tokens: Thread::SizedQueue
24
+
25
+ attr_reader listeners: Array[TCPServer| OpenSSL::SSL::SSLServer]
26
+
27
+ def initialize: (?Hash[Symbol, untyped] config, ?Hash[Symbol, untyped] default) -> void
28
+
29
+ def []: (Symbol key) -> untyped
30
+
31
+ def listen: (String address, Integer port) -> void
32
+
33
+ def start: () { (TCPSocket) -> void } -> void
34
+
35
+ def stop: () -> void
36
+
37
+ def shutdown: () -> void
38
+
39
+ def run: (TCPSocket sock) -> void
40
+
41
+ private
42
+
43
+ def accept_client: (TCPServer svr) -> TCPSocket?
44
+
45
+ def start_thread: (TCPSocket sock) { (TCPSocket) -> void } -> Thread
46
+
47
+ def call_callback: (Symbol callback_name, *untyped args) -> untyped
48
+
49
+ def setup_shutdown_pipe: () -> [IO, IO]
50
+
51
+ def cleanup_shutdown_pipe: ([IO, IO]? shutdown_pipe) -> void
52
+
53
+ def alarm_shutdown_pipe: [T] () { (IO) -> T } -> T?
54
+
55
+ def cleanup_listener: () -> void
56
+ end
57
+ end
data/sig/ssl.rbs ADDED
@@ -0,0 +1,19 @@
1
+ module WEBrick
2
+ module Config
3
+ SSL: Hash[Symbol, untyped]
4
+ end
5
+
6
+ module Utils
7
+ def self?.create_self_signed_cert: (untyped bits, untyped cn, untyped comment) -> ::Array[untyped]
8
+ end
9
+
10
+ class GenericServer
11
+ @ssl_context: OpenSSL::SSL::SSLContext?
12
+
13
+ def ssl_context: () -> OpenSSL::SSL::SSLContext?
14
+
15
+ def setup_ssl_context: (Hash[Symbol, untyped] config) -> OpenSSL::SSL::SSLContext
16
+
17
+ def ssl_servername_callback: (untyped sslsocket, ?untyped? hostname) -> untyped
18
+ end
19
+ end
data/sig/utils.rbs ADDED
@@ -0,0 +1,122 @@
1
+ module WEBrick
2
+ module Utils
3
+ #
4
+ # Sets IO operations on +io+ to be non-blocking
5
+ def self?.set_non_blocking: (IO io) -> void
6
+
7
+ #
8
+ # Sets the close on exec flag for +io+
9
+ def self?.set_close_on_exec: (IO io) -> void
10
+
11
+ #
12
+ # Changes the process's uid and gid to the ones of +user+
13
+ def self?.su: (String user) -> void
14
+
15
+ #
16
+ # The server hostname
17
+ def self?.getservername: () -> String
18
+
19
+ #
20
+ # Creates TCP server sockets bound to +address+:+port+ and returns them.
21
+ #
22
+ # It will create IPV4 and IPV6 sockets on all interfaces.
23
+ def self?.create_listeners: (String host, Integer port) -> Array[TCPServer]
24
+
25
+ #
26
+ # Characters used to generate random strings
27
+ RAND_CHARS: String
28
+
29
+ #
30
+ # Generates a random string of length +len+
31
+ def self?.random_string: (Integer len) -> String
32
+
33
+ #
34
+ # Class used to manage timeout handlers across multiple threads.
35
+ #
36
+ # Timeout handlers should be managed by using the class methods which are
37
+ # synchronized.
38
+ #
39
+ # id = TimeoutHandler.register(10, Timeout::Error)
40
+ # begin
41
+ # sleep 20
42
+ # puts 'foo'
43
+ # ensure
44
+ # TimeoutHandler.cancel(id)
45
+ # end
46
+ #
47
+ # will raise Timeout::Error
48
+ #
49
+ # id = TimeoutHandler.register(10, Timeout::Error)
50
+ # begin
51
+ # sleep 5
52
+ # puts 'foo'
53
+ # ensure
54
+ # TimeoutHandler.cancel(id)
55
+ # end
56
+ #
57
+ # will print 'foo'
58
+ #
59
+ class TimeoutHandler
60
+ @queue: Thread::Queue
61
+
62
+ @watcher: Thread?
63
+
64
+ include Singleton
65
+
66
+ #
67
+ # Mutex used to synchronize access across threads
68
+ TimeoutMutex: Thread::Mutex
69
+
70
+ #
71
+ # Registers a new timeout handler
72
+ #
73
+ # +time+:: Timeout in seconds
74
+ # +exception+:: Exception to raise when timeout elapsed
75
+ def self.register: (Numeric seconds, singleton(Exception) exception) -> Integer
76
+
77
+ #
78
+ # Cancels the timeout handler +id+
79
+ def self.cancel: (Integer id) -> bool
80
+
81
+ def self.terminate: () -> Thread?
82
+
83
+ #
84
+ # Creates a new TimeoutHandler. You should use ::register and ::cancel
85
+ # instead of creating the timeout handler directly.
86
+ def initialize: () -> void
87
+
88
+ private
89
+
90
+ def watch: () -> bot
91
+
92
+ def watcher: () -> Thread
93
+
94
+ public
95
+
96
+ #
97
+ # Interrupts the timeout handler +id+ and raises +exception+
98
+ def interrupt: (Thread thread, Integer id, singleton(Exception) exception) -> nil
99
+
100
+ #
101
+ # Registers a new timeout handler
102
+ #
103
+ # +time+:: Timeout in seconds
104
+ # +exception+:: Exception to raise when timeout elapsed
105
+ def register: (Thread thread, Numeric time, singleton(Exception) exception) -> Integer
106
+
107
+ #
108
+ # Cancels the timeout handler +id+
109
+ def cancel: (Thread thread, Integer id) -> bool
110
+
111
+ #
112
+ def terminate: () -> Thread?
113
+ end
114
+
115
+ #
116
+ # Executes the passed block and raises +exception+ if execution takes more
117
+ # than +seconds+.
118
+ #
119
+ # If +seconds+ is zero or nil, simply executes the block
120
+ def self?.timeout: [T] (Numeric? seconds, ?singleton(Exception) exception) { (?Numeric) -> T } -> T
121
+ end
122
+ end
data/sig/version.rbs ADDED
@@ -0,0 +1,3 @@
1
+ module WEBrick
2
+ VERSION: String
3
+ end