httpx 0.15.1 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/doc/release_notes/0_15_2.md +9 -0
  3. data/doc/release_notes/0_15_3.md +5 -0
  4. data/doc/release_notes/0_15_4.md +5 -0
  5. data/doc/release_notes/0_16_0.md +93 -0
  6. data/lib/httpx.rb +6 -3
  7. data/lib/httpx/adapters/faraday.rb +3 -11
  8. data/lib/httpx/buffer.rb +1 -1
  9. data/lib/httpx/callbacks.rb +1 -1
  10. data/lib/httpx/chainable.rb +15 -8
  11. data/lib/httpx/connection.rb +2 -2
  12. data/lib/httpx/connection/http1.rb +3 -1
  13. data/lib/httpx/connection/http2.rb +1 -11
  14. data/lib/httpx/errors.rb +11 -11
  15. data/lib/httpx/io/ssl.rb +2 -2
  16. data/lib/httpx/io/tls.rb +1 -1
  17. data/lib/httpx/loggable.rb +1 -1
  18. data/lib/httpx/options.rb +81 -74
  19. data/lib/httpx/parser/http1.rb +1 -1
  20. data/lib/httpx/plugins/aws_sigv4.rb +10 -9
  21. data/lib/httpx/plugins/compression.rb +12 -11
  22. data/lib/httpx/plugins/cookies.rb +20 -7
  23. data/lib/httpx/plugins/cookies/cookie.rb +4 -3
  24. data/lib/httpx/plugins/cookies/jar.rb +24 -1
  25. data/lib/httpx/plugins/digest_authentication.rb +15 -11
  26. data/lib/httpx/plugins/expect.rb +19 -15
  27. data/lib/httpx/plugins/follow_redirects.rb +9 -9
  28. data/lib/httpx/plugins/grpc.rb +73 -47
  29. data/lib/httpx/plugins/grpc/call.rb +4 -1
  30. data/lib/httpx/plugins/ntlm_authentication.rb +8 -6
  31. data/lib/httpx/plugins/proxy.rb +4 -6
  32. data/lib/httpx/plugins/proxy/socks4.rb +2 -1
  33. data/lib/httpx/plugins/proxy/socks5.rb +2 -1
  34. data/lib/httpx/plugins/proxy/ssh.rb +9 -9
  35. data/lib/httpx/plugins/retries.rb +25 -21
  36. data/lib/httpx/plugins/upgrade.rb +7 -6
  37. data/lib/httpx/registry.rb +1 -1
  38. data/lib/httpx/request.rb +4 -12
  39. data/lib/httpx/resolver/https.rb +0 -2
  40. data/lib/httpx/response.rb +45 -18
  41. data/lib/httpx/selector.rb +13 -12
  42. data/lib/httpx/session.rb +19 -8
  43. data/lib/httpx/session2.rb +21 -0
  44. data/lib/httpx/transcoder/body.rb +1 -1
  45. data/lib/httpx/transcoder/chunker.rb +2 -1
  46. data/lib/httpx/version.rb +1 -1
  47. data/sig/buffer.rbs +2 -0
  48. data/sig/chainable.rbs +24 -28
  49. data/sig/connection.rbs +20 -8
  50. data/sig/connection/http1.rbs +3 -3
  51. data/sig/connection/http2.rbs +1 -1
  52. data/sig/errors.rbs +35 -1
  53. data/sig/headers.rbs +5 -5
  54. data/sig/httpx.rbs +4 -1
  55. data/sig/loggable.rbs +3 -1
  56. data/sig/options.rbs +35 -32
  57. data/sig/plugins/authentication.rbs +1 -1
  58. data/sig/plugins/aws_sdk_authentication.rbs +5 -1
  59. data/sig/plugins/aws_sigv4.rbs +1 -2
  60. data/sig/plugins/basic_authentication.rbs +1 -1
  61. data/sig/plugins/compression.rbs +4 -6
  62. data/sig/plugins/cookies.rbs +4 -5
  63. data/sig/plugins/cookies/cookie.rbs +5 -7
  64. data/sig/plugins/cookies/jar.rbs +9 -10
  65. data/sig/plugins/digest_authentication.rbs +2 -3
  66. data/sig/plugins/expect.rbs +2 -4
  67. data/sig/plugins/follow_redirects.rbs +3 -5
  68. data/sig/plugins/grpc.rbs +4 -7
  69. data/sig/plugins/h2c.rbs +0 -2
  70. data/sig/plugins/multipart.rbs +2 -4
  71. data/sig/plugins/ntlm_authentication.rbs +2 -3
  72. data/sig/plugins/persistent.rbs +3 -8
  73. data/sig/plugins/proxy.rbs +7 -7
  74. data/sig/plugins/proxy/ssh.rbs +4 -4
  75. data/sig/plugins/push_promise.rbs +0 -2
  76. data/sig/plugins/retries.rbs +4 -8
  77. data/sig/plugins/stream.rbs +1 -1
  78. data/sig/plugins/upgrade.rbs +2 -3
  79. data/sig/pool.rbs +1 -2
  80. data/sig/registry.rbs +1 -1
  81. data/sig/request.rbs +2 -2
  82. data/sig/resolver.rbs +7 -0
  83. data/sig/resolver/native.rbs +9 -5
  84. data/sig/resolver/resolver_mixin.rbs +4 -5
  85. data/sig/resolver/system.rbs +2 -0
  86. data/sig/response.rbs +17 -11
  87. data/sig/selector.rbs +7 -6
  88. data/sig/session.rbs +19 -14
  89. data/sig/transcoder.rbs +11 -4
  90. data/sig/transcoder/body.rbs +6 -1
  91. data/sig/transcoder/chunker.rbs +8 -2
  92. data/sig/transcoder/form.rbs +2 -1
  93. data/sig/transcoder/json.rbs +1 -0
  94. data/sig/utils.rbs +2 -0
  95. metadata +12 -2
data/lib/httpx/session.rb CHANGED
@@ -15,8 +15,6 @@ module HTTPX
15
15
  end
16
16
 
17
17
  def wrap
18
- return unless block_given?
19
-
20
18
  begin
21
19
  prev_persistent = @persistent
22
20
  @persistent = true
@@ -31,6 +29,8 @@ module HTTPX
31
29
  end
32
30
 
33
31
  def request(*args, **options)
32
+ raise ArgumentError, "must perform at least one request" if args.empty?
33
+
34
34
  requests = args.first.is_a?(Request) ? args : build_requests(*args, options)
35
35
  responses = send_requests(*requests, options)
36
36
  return responses.first if responses.size == 1
@@ -247,9 +247,8 @@ module HTTPX
247
247
  if !@plugins.include?(pl)
248
248
  @plugins << pl
249
249
  pl.load_dependencies(self, &block) if pl.respond_to?(:load_dependencies)
250
+
250
251
  @default_options = @default_options.dup
251
- @default_options = pl.extra_options(@default_options, &block) if pl.respond_to?(:extra_options)
252
- @default_options = @default_options.merge(options) if options
253
252
 
254
253
  include(pl::InstanceMethods) if defined?(pl::InstanceMethods)
255
254
  extend(pl::ClassMethods) if defined?(pl::ClassMethods)
@@ -266,14 +265,26 @@ module HTTPX
266
265
  opts.response_body_class.__send__(:include, pl::ResponseBodyMethods) if defined?(pl::ResponseBodyMethods)
267
266
  opts.response_body_class.extend(pl::ResponseBodyClassMethods) if defined?(pl::ResponseBodyClassMethods)
268
267
  opts.connection_class.__send__(:include, pl::ConnectionMethods) if defined?(pl::ConnectionMethods)
268
+ if defined?(pl::OptionsMethods)
269
+ opts.options_class.__send__(:include, pl::OptionsMethods)
270
+
271
+ (pl::OptionsMethods.instance_methods - Object.instance_methods).each do |meth|
272
+ opts.options_class.method_added(meth)
273
+ end
274
+ @default_options = opts.options_class.new(opts)
275
+ end
276
+
277
+ @default_options = pl.extra_options(@default_options) if pl.respond_to?(:extra_options)
278
+ @default_options = @default_options.merge(options) if options
279
+
269
280
  pl.configure(self, &block) if pl.respond_to?(:configure)
270
281
 
271
282
  @default_options.freeze
272
283
  elsif options
273
284
  # this can happen when two plugins are loaded, an one of them calls the other under the hood,
274
285
  # albeit changing some default.
275
- @default_options = @default_options.dup
276
- @default_options = @default_options.merge(options)
286
+ @default_options = pl.extra_options(@default_options) if pl.respond_to?(:extra_options)
287
+ @default_options = @default_options.merge(options) if options
277
288
 
278
289
  @default_options.freeze
279
290
  end
@@ -283,8 +294,8 @@ module HTTPX
283
294
  # :nocov:
284
295
  def plugins(pls)
285
296
  warn ":#{__method__} is deprecated, use :plugin instead"
286
- pls.each do |pl, *args|
287
- plugin(pl, *args)
297
+ pls.each do |pl|
298
+ plugin(pl)
288
299
  end
289
300
  self
290
301
  end
@@ -0,0 +1,21 @@
1
+ require_relative "session"
2
+ module HTTPX
3
+ class Session
4
+ def initialize(options = EMPTY_HASH, &blk)
5
+ @options = self.class.default_options.merge(options)
6
+ @responses = {}
7
+ @persistent = @options.persistent
8
+ wrap(&blk) if block_given?
9
+ end
10
+
11
+ def wrap
12
+ begin
13
+ prev_persistent = @persistent
14
+ @persistent = true
15
+ yield self
16
+ ensure
17
+ @persistent = prev_persistent
18
+ end
19
+ end
20
+ end
21
+ end
@@ -4,7 +4,7 @@ require "forwardable"
4
4
 
5
5
  module HTTPX::Transcoder
6
6
  module Body
7
- Error = Class.new(HTTPX::Error)
7
+ class Error < HTTPX::Error; end
8
8
 
9
9
  module_function
10
10
 
@@ -4,7 +4,8 @@ require "forwardable"
4
4
 
5
5
  module HTTPX::Transcoder
6
6
  module Chunker
7
- Error = Class.new(HTTPX::Error)
7
+ class Error < HTTPX::Error; end
8
+
8
9
  CRLF = "\r\n".b
9
10
 
10
11
  class Encoder
data/lib/httpx/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTTPX
4
- VERSION = "0.15.1"
4
+ VERSION = "0.16.0"
5
5
  end
data/sig/buffer.rbs CHANGED
@@ -1,5 +1,7 @@
1
1
  module HTTPX
2
2
  class Buffer
3
+ extend Forwardable
4
+
3
5
  include _ToS
4
6
  include _ToStr
5
7
 
data/sig/chainable.rbs CHANGED
@@ -3,41 +3,37 @@ module HTTPX
3
3
  def request: (*untyped, **untyped) -> (response | Array[response])
4
4
  def accept: (String) -> Session
5
5
  def wrap: () { (Session) -> void } -> void
6
- | () -> void
7
6
 
8
7
  def with: (options) -> Session
9
- | (options) { (Session) -> Session} -> Session
8
+ | (options) { (Session) -> void } -> void
10
9
 
11
-
12
-
13
-
14
- def plugin: (:authentication) -> Plugins::sessionAuthentication
15
- | (:basic_authentication) -> Plugins::sessionBasicAuthentication
16
- | (:digest_authentication) -> Plugins::sessionDigestAuthentication
17
- | (:ntlm_authentication) -> Plugins::sessionNTLMAuthentication
18
- | (:aws_sdk_authentication) -> Plugins::sessionAwsSdkAuthentication
19
- | (:compression) -> Session
20
- | (:cookies) -> Plugins::sessionCookies
21
- | (:expect) -> Session
22
- | (:follow_redirects) -> Plugins::sessionFollowRedirects
23
- | (:upgrade) -> Session
24
- | (:h2c) -> Session
25
- | (:multipart) -> Session
26
- | (:persistent) -> Plugins::sessionPersistent
27
- | (:proxy) -> Plugins::sessionProxy
28
- | (:push_promise) -> Plugins::sessionPushPromise
29
- | (:retries) -> Plugins::sessionRetries
30
- | (:rate_limiter) -> Session
31
- | (:stream) -> Plugins::sessionStream
32
- | (:aws_sigv4) -> Plugins::awsSigV4Session
33
- | (:grpc) -> Plugins::grpcSession
34
- | (Symbol | Module, ?options?) { (Class) -> void } -> Session
35
- | (Symbol | Module, ?options?) -> Session
10
+ def plugin: (:authentication, ?options) -> Plugins::sessionAuthentication
11
+ | (:basic_authentication, ?options) -> Plugins::sessionBasicAuthentication
12
+ | (:digest_authentication, ?options) -> Plugins::sessionDigestAuthentication
13
+ | (:ntlm_authentication, ?options) -> Plugins::sessionNTLMAuthentication
14
+ | (:aws_sdk_authentication, ?options) -> Plugins::sessionAwsSdkAuthentication
15
+ | (:compression, ?options) -> Session
16
+ | (:cookies, ?options) -> Plugins::sessionCookies
17
+ | (:expect, ?options) -> Session
18
+ | (:follow_redirects, ?options) -> Plugins::sessionFollowRedirects
19
+ | (:upgrade, ?options) -> Session
20
+ | (:h2c, ?options) -> Session
21
+ | (:multipart, ?options) -> Session
22
+ | (:persistent, ?options) -> Plugins::sessionPersistent
23
+ | (:proxy, ?options) -> Plugins::sessionProxy
24
+ | (:push_promise, ?options) -> Plugins::sessionPushPromise
25
+ | (:retries, ?options) -> Plugins::sessionRetries
26
+ | (:rate_limiter, ?options) -> Session
27
+ | (:stream, ?options) -> Plugins::sessionStream
28
+ | (:aws_sigv4, ?options) -> Plugins::awsSigV4Session
29
+ | (:grpc, ?options) -> Plugins::grpcSession
30
+ | (Symbol | Module, ?options) { (Class) -> void } -> Session
31
+ | (Symbol | Module, ?options) -> Session
36
32
 
37
33
  private
38
34
 
39
35
  def default_options: () -> Options
40
36
  def branch: (options) -> Session
41
- | (options) { (Session) -> Session } -> Session
37
+ | (options) { (Session) -> void } -> Session
42
38
  end
43
39
  end
data/sig/connection.rbs CHANGED
@@ -1,28 +1,37 @@
1
1
  module HTTPX
2
2
  class Connection
3
+
3
4
  interface _Parser
4
5
 
5
6
  def on: (Symbol) { (*untyped) -> void } -> void
6
7
  def empty?: () -> bool
8
+ # def exhausted?: () -> bool
7
9
  def close: () -> void
8
10
  def consume: () -> void
9
11
  def <<: (string) -> void
12
+ # def send: (Request) -> void
13
+ # def ping: () -> void
14
+ # def timeout: () -> (Integer | Float)
15
+
10
16
  end
11
17
 
18
+ extend Forwardable
12
19
  include Loggable
13
20
  include Callbacks
14
- extend HTTPX::Registry[String, Class]
21
+ include HTTPX::Registry[String, Class]
22
+
23
+ BUFFER_SIZE: Integer
15
24
 
16
- attr_reader origin: generic_uri
25
+ attr_reader origin: URI::Generic
17
26
  attr_reader state: Symbol
18
27
  attr_reader pending: Array[Request]
19
- attr_reader options: options
28
+ attr_reader options: Options
20
29
 
21
30
  def addresses: () -> Array[ipaddr]?
22
31
 
23
32
  def addresses=: (Array[ipaddr]) -> void
24
33
 
25
- def match?: (generic_uri, options) -> bool
34
+ def match?: (URI::Generic, options) -> bool
26
35
 
27
36
  def mergeable?: (Connection) -> bool
28
37
 
@@ -35,7 +44,7 @@ module HTTPX
35
44
 
36
45
  def purge_pending: () { (Request) -> void } -> void
37
46
 
38
- def match_altsvcs?: (generic_uri) -> bool
47
+ def match_altsvcs?: (URI::Generic uri) -> bool
39
48
 
40
49
  def connecting?: () -> bool
41
50
  def inflight?: () -> boolish
@@ -55,7 +64,7 @@ module HTTPX
55
64
 
56
65
  private
57
66
 
58
- def initialize: (String, generic_uri, options) -> untyped
67
+ def initialize: (String, URI::Generic, options) -> untyped
59
68
 
60
69
  def connect: () -> void
61
70
 
@@ -76,10 +85,13 @@ module HTTPX
76
85
 
77
86
  def handle_response: () -> void
78
87
 
79
- def on_error: (StandardError) -> void
88
+ def on_error: (HTTPX::TimeoutError | Error | StandardError) -> void
80
89
 
81
90
  def handle_error: (StandardError) -> void
82
91
 
83
- def total_timeout: () -> Timers::Timer?
92
+ def total_timeout: () -> untyped?
93
+ # def total_timeout: () -> Timers::Timer?
94
+ #
95
+ def purge_after_closed: () -> void
84
96
  end
85
97
  end
@@ -9,7 +9,7 @@ module HTTPX
9
9
  @options: Options
10
10
  @max_concurrent_requests: Integer
11
11
  @max_requests: Integer
12
- @parser: HTTP1
12
+ @parser: Parser::HTTP1
13
13
  @buffer: Buffer
14
14
 
15
15
  def interests: () -> io_interests?
@@ -54,7 +54,7 @@ module HTTPX
54
54
 
55
55
  def disable_pipelining: () -> void
56
56
 
57
- def set_protocol_headers: (Request) -> _Each[headers_key, String]
57
+ def set_protocol_headers: (Request) -> _Each[[headers_key, String]]
58
58
 
59
59
  def headline_uri: (Request) -> String
60
60
 
@@ -64,7 +64,7 @@ module HTTPX
64
64
 
65
65
  def join_trailers: (Request request) -> void
66
66
 
67
- def join_headers2: (_Each[headers_key, String] headers) -> void
67
+ def join_headers2: (_Each[[headers_key, String]] headers) -> void
68
68
 
69
69
  def join_body: (Request request) -> void
70
70
 
@@ -45,7 +45,7 @@ module HTTPX
45
45
 
46
46
  def headline_uri: (Request) -> String
47
47
 
48
- def set_protocol_headers: (Request) -> _Each[headers_key, String]
48
+ def set_protocol_headers: (Request) -> _Each[[headers_key, String]]
49
49
 
50
50
  def handle: (Request request, HTTP2Next::Stream stream) -> void
51
51
 
data/sig/errors.rbs CHANGED
@@ -1,3 +1,37 @@
1
1
  module HTTPX
2
- Error: singleton(StandardError)
2
+ class Error < StandardError
3
+ end
4
+
5
+ class TimeoutError < Error
6
+ attr_reader timeout: Numeric
7
+
8
+ def to_connection_error: () -> ConnectTimeoutError
9
+ private
10
+
11
+ def initialize: (Numeric timeout, String message) -> untyped
12
+ end
13
+
14
+ class TotalTimeoutError < TimeoutError
15
+ end
16
+
17
+ class ConnectTimeoutError < TimeoutError
18
+ end
19
+
20
+ class SettingsTimeoutError < TimeoutError
21
+ end
22
+
23
+ class ResolveTimeoutError < TimeoutError
24
+ end
25
+
26
+ class ResolveError < Error
27
+ end
28
+
29
+ class NativeResolveError < ResolveError
30
+ attr_reader connection: Connection
31
+ attr_reader host: String
32
+
33
+ private
34
+
35
+ def initialize: (Connection connection, String hostname, ?String message) -> untyped
36
+ end
3
37
  end
data/sig/headers.rbs CHANGED
@@ -12,15 +12,15 @@ module HTTPX
12
12
  def []=: (headers_key field, headers_value value) -> void
13
13
 
14
14
  def add: (headers_key field, string value) -> void
15
- def delete: (headers_key field) -> void
15
+ def delete: (headers_key field) -> Array[String]?
16
16
 
17
- def each: (?_Each[headers_key, String]? extra_headers) { (headers_key, String) -> void } -> void
18
- | (?_Each[headers_key, String]? extra_headers) -> Enumerable[[headers_key, String], void]
17
+ def each: (?_Each[[headers_key, String]]? extra_headers) { (headers_key, String) -> void } -> void
18
+ | (?_Each[[headers_key, String]]? extra_headers) -> Enumerable[[headers_key, String]]
19
19
 
20
20
  def get: (headers_key field) -> Array[String]
21
21
  def key?: (headers_key downcased_key) -> bool
22
22
 
23
- def merge: (_Each[headers_key, headers_value] other) -> Headers
23
+ def merge: (_Each[[headers_key, headers_value]] other) -> Headers
24
24
 
25
25
  def same_headers?: (untyped headers) -> bool
26
26
 
@@ -28,7 +28,7 @@ module HTTPX
28
28
  def to_hash: () -> Hash[headers_key, String]
29
29
  alias to_h to_hash
30
30
 
31
- def inspect: () -> String
31
+ def inspect: () -> String
32
32
 
33
33
  private
34
34
 
data/sig/httpx.rbs CHANGED
@@ -4,12 +4,15 @@ module HTTPX
4
4
  VERSION: String
5
5
 
6
6
  type uri = URI::HTTP | URI::HTTPS | string
7
- type generic_uri = uri | URI::Generic
7
+ type generic_uri = String | URI::Generic
8
8
 
9
9
  type verb = :options | :get | :head | :post | :put | :delete | :trace | :connect |
10
10
  :propfind | :proppatch | :mkcol | :copy | :move | :lock | :unlock | :orderpatch |
11
11
  :acl | :report | :patch | :search
12
12
 
13
13
  module Plugins
14
+ def self?.load_plugin: (Symbol) -> Module
15
+
16
+ def self?.register_plugin: (Symbol, Module) -> void
14
17
  end
15
18
  end
data/sig/loggable.rbs CHANGED
@@ -4,8 +4,10 @@ module HTTPX
4
4
  end
5
5
 
6
6
  module Loggable
7
+ COLORS: Hash[Symbol, Integer]
8
+
7
9
  def log: (?level: Integer?, ?color: Symbol?) { () -> String } -> void
8
10
 
9
- def log_exception: (StandardError, **untyped) -> void
11
+ def log_exception: (Exception error, ?level: Integer, ?color: Symbol) -> void
10
12
  end
11
13
  end
data/sig/options.rbs CHANGED
@@ -4,108 +4,111 @@ module HTTPX
4
4
 
5
5
  WINDOW_SIZE: Integer
6
6
  MAX_BODY_THRESHOLD_SIZE: Integer
7
+ CONNECT_TIMEOUT: Integer
8
+ OPERATION_TIMEOUT: Integer
9
+ KEEP_ALIVE_TIMEOUT: Integer
10
+ SETTINGS_TIMEOUT: Integer
11
+ DEFAULT_OPTIONS: Hash[Symbol, untyped]
7
12
 
8
13
  type timeout_type = :connect_timeout | :settings_timeout | :operation_timeout | :keep_alive_timeout | :total_timeout
9
14
  type timeout = Hash[timeout_type, Numeric?]
10
15
 
11
- def self.new: (options) -> instance
12
- | () -> instance
16
+ def self.new: (?options) -> instance
13
17
 
18
+ def self.def_option: (Symbol, ?String) -> void
19
+ | (Symbol) { (*nil) -> untyped } -> void
14
20
  # headers
15
21
  attr_reader uri: URI?
16
- def uri=: (uri) -> void
17
22
 
18
23
  # headers
19
24
  attr_reader headers: Headers?
20
- def headers=: (headers) -> void
21
25
 
22
26
  # timeout
23
27
  attr_reader timeout: timeout
24
- def timeout=: (timeout) -> void
25
28
 
26
29
  # max_concurrent_requests
27
30
  attr_reader max_concurrent_requests: Integer?
28
- def max_concurrent_requests=: (Integer) -> void
29
31
 
30
32
  # max_requests
31
33
  attr_reader max_requests: Integer?
32
- def max_requests=: (Integer) -> void
33
34
 
34
35
  # window_size
35
- attr_reader window_size: int?
36
- def window_size=: (int) -> void
36
+ attr_reader window_size: Integer
37
37
 
38
38
  # body_threshold_size
39
- attr_reader body_threshold_size: int?
40
- def body_threshold_size=: (int) -> void
39
+ attr_reader body_threshold_size: Integer
41
40
 
42
41
  # transport
43
- attr_reader transport: _ToS?
44
- def transport=: (_ToS) -> void
42
+ attr_reader transport: String?
45
43
 
46
44
  # transport_options
47
45
  attr_reader transport_options: Hash[untyped, untyped]?
48
- def transport_options=: (Hash[untyped, untyped]) -> void
49
46
 
50
47
  # addresses
51
- attr_reader addresses: _ToAry[untyped]?
52
- def addresses=: (_ToAry[untyped]) -> void
48
+ attr_reader addresses: _ToAry[ipaddr]?
53
49
 
54
50
  # params
55
51
  attr_reader params: Transcoder::urlencoded_input?
56
- def params=: (Transcoder::urlencoded_input) -> void
57
52
 
58
53
  # form
59
54
  attr_reader form: Transcoder::urlencoded_input?
60
- def form=: (Transcoder::urlencoded_input) -> void
61
55
 
62
56
  # json
63
57
  attr_reader json: _ToJson?
64
- def json=: (_ToJson) -> void
65
58
 
66
59
  # body
67
60
  attr_reader body: bodyIO?
68
- def body=: (bodyIO) -> void
69
61
 
70
62
  # ssl
71
63
 
72
64
  # http2_settings
73
65
 
66
+
67
+ # classes
68
+ attr_reader connection_class: singleton(Connection)
69
+
70
+ attr_reader request_class: singleton(Request)
71
+
72
+ attr_reader response_class: singleton(Response)
73
+
74
+ attr_reader headers_class: singleton(Headers)
75
+
76
+ attr_reader request_body_class: singleton(Request::Body)
77
+
78
+ attr_reader response_body_class: singleton(Response::Body)
79
+
80
+ attr_reader ssl: Hash[Symbol, untyped]
81
+
74
82
  # request_class response_class headers_class request_body_class
75
83
  # response_body_class connection_class
76
84
  # resolver_class resolver_options
77
85
 
78
- # request_class
79
- attr_reader request_class: singleton(Request)
80
- def request_class=: (singleton(Request)) -> void
81
-
82
86
  # io
83
87
  type io_option = _ToIO | Hash[String, _ToIO]
84
88
  attr_reader io: io_option?
85
- def io=: (io_option) -> void
86
89
 
87
90
  # fallback_protocol
88
91
  attr_reader fallback_protocol: String?
89
- def fallback_protocol=: (String) -> void
90
92
 
91
93
  # debug
92
94
  attr_reader debug: _IOLogger?
93
- def debug=: (_IOLogger) -> void
94
95
 
95
96
  # debug_level
96
- attr_reader debug_level: Integer?
97
- def debug_level=: (Integer) -> void
97
+ attr_reader debug_level: Integer
98
98
 
99
99
  # persistent
100
100
  attr_reader persistent: bool?
101
- def persistent=: (bool) -> void
101
+
102
+ # resolver_options
103
+ attr_reader resolver_options: Hash[Symbol, untyped]?
102
104
 
103
105
  def ==: (untyped other) -> bool
104
- def merge: (_ToHash other) -> instance
106
+ def merge: (_ToHash[Symbol | String, untyped] other) -> instance
107
+ def to_hash: () -> Hash[Symbol, untyped]
105
108
 
106
109
  private
107
110
 
108
- def initialize: (options) -> untyped
111
+ def initialize: (?options) -> untyped
109
112
  end
110
113
 
111
114
  type options = Options | Hash[Symbol | String, untyped]