httpx 0.20.3 → 0.21.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.
- checksums.yaml +4 -4
- data/doc/release_notes/0_13_0.md +1 -1
- data/doc/release_notes/0_20_4.md +17 -0
- data/doc/release_notes/0_20_5.md +3 -0
- data/doc/release_notes/0_21_0.md +94 -0
- data/lib/httpx/connection/http1.rb +2 -1
- data/lib/httpx/connection.rb +41 -2
- data/lib/httpx/errors.rb +18 -0
- data/lib/httpx/extensions.rb +36 -13
- data/lib/httpx/io/unix.rb +1 -1
- data/lib/httpx/options.rb +7 -3
- data/lib/httpx/plugins/circuit_breaker/circuit.rb +76 -0
- data/lib/httpx/plugins/circuit_breaker/circuit_store.rb +44 -0
- data/lib/httpx/plugins/circuit_breaker.rb +115 -0
- data/lib/httpx/plugins/compression.rb +1 -1
- data/lib/httpx/plugins/cookies.rb +1 -1
- data/lib/httpx/plugins/expect.rb +1 -1
- data/lib/httpx/plugins/multipart/decoder.rb +1 -1
- data/lib/httpx/plugins/proxy.rb +7 -1
- data/lib/httpx/plugins/response_cache/store.rb +39 -19
- data/lib/httpx/plugins/response_cache.rb +98 -8
- data/lib/httpx/plugins/retries.rb +1 -1
- data/lib/httpx/plugins/webdav.rb +78 -0
- data/lib/httpx/pool.rb +1 -1
- data/lib/httpx/request.rb +15 -25
- data/lib/httpx/resolver/https.rb +2 -7
- data/lib/httpx/resolver/multi.rb +1 -1
- data/lib/httpx/resolver/native.rb +2 -1
- data/lib/httpx/resolver/resolver.rb +12 -2
- data/lib/httpx/response.rb +30 -9
- data/lib/httpx/timers.rb +3 -0
- data/lib/httpx/transcoder/body.rb +1 -1
- data/lib/httpx/transcoder/form.rb +1 -1
- data/lib/httpx/transcoder/json.rb +19 -3
- data/lib/httpx/transcoder/xml.rb +57 -0
- data/lib/httpx/transcoder.rb +1 -0
- data/lib/httpx/version.rb +1 -1
- data/sig/buffer.rbs +1 -1
- data/sig/chainable.rbs +1 -0
- data/sig/connection.rbs +12 -4
- data/sig/errors.rbs +13 -0
- data/sig/io.rbs +6 -0
- data/sig/options.rbs +4 -1
- data/sig/plugins/circuit_breaker.rbs +61 -0
- data/sig/plugins/compression/brotli.rbs +1 -1
- data/sig/plugins/compression/deflate.rbs +1 -1
- data/sig/plugins/compression/gzip.rbs +3 -3
- data/sig/plugins/compression.rbs +1 -1
- data/sig/plugins/multipart.rbs +1 -1
- data/sig/plugins/proxy/socks5.rbs +3 -2
- data/sig/plugins/proxy.rbs +1 -1
- data/sig/plugins/response_cache.rbs +24 -4
- data/sig/registry.rbs +5 -4
- data/sig/request.rbs +7 -1
- data/sig/resolver/native.rbs +5 -2
- data/sig/response.rbs +6 -1
- data/sig/timers.rbs +1 -1
- data/sig/transcoder/json.rbs +4 -1
- data/sig/transcoder/xml.rbs +21 -0
- data/sig/transcoder.rbs +2 -2
- data/sig/utils.rbs +2 -2
- metadata +17 -3
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "forwardable"
|
4
|
-
require "json"
|
5
4
|
|
6
5
|
module HTTPX::Transcoder
|
7
6
|
module JSON
|
@@ -19,7 +18,7 @@ module HTTPX::Transcoder
|
|
19
18
|
def_delegator :@raw, :bytesize
|
20
19
|
|
21
20
|
def initialize(json)
|
22
|
-
@raw =
|
21
|
+
@raw = JSON.json_dump(json)
|
23
22
|
@charset = @raw.encoding.name.downcase
|
24
23
|
end
|
25
24
|
|
@@ -37,8 +36,25 @@ module HTTPX::Transcoder
|
|
37
36
|
|
38
37
|
raise HTTPX::Error, "invalid json mime type (#{content_type})" unless JSON_REGEX.match?(content_type)
|
39
38
|
|
40
|
-
|
39
|
+
method(:json_load)
|
41
40
|
end
|
41
|
+
|
42
|
+
# rubocop:disable Style/SingleLineMethods
|
43
|
+
if defined?(MultiJson)
|
44
|
+
def json_load(*args); MultiJson.load(*args); end
|
45
|
+
def json_dump(*args); MultiJson.dump(*args); end
|
46
|
+
elsif defined?(Oj)
|
47
|
+
def json_load(response, *args); Oj.load(response.to_s, *args); end
|
48
|
+
def json_dump(*args); Oj.dump(*args); end
|
49
|
+
elsif defined?(Yajl)
|
50
|
+
def json_load(response, *args); Yajl::Parser.new(*args).parse(response.to_s); end
|
51
|
+
def json_dump(*args); Yajl::Encoder.encode(*args); end
|
52
|
+
else
|
53
|
+
require "json"
|
54
|
+
def json_load(*args); ::JSON.parse(*args); end
|
55
|
+
def json_dump(*args); ::JSON.dump(*args); end
|
56
|
+
end
|
57
|
+
# rubocop:enable Style/SingleLineMethods
|
42
58
|
end
|
43
59
|
register "json", JSON
|
44
60
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "delegate"
|
4
|
+
require "forwardable"
|
5
|
+
require "uri"
|
6
|
+
|
7
|
+
module HTTPX::Transcoder
|
8
|
+
module Xml
|
9
|
+
using HTTPX::RegexpExtensions
|
10
|
+
|
11
|
+
module_function
|
12
|
+
|
13
|
+
MIME_TYPES = %r{\b(application|text)/(.+\+)?xml\b}.freeze
|
14
|
+
|
15
|
+
class Encoder
|
16
|
+
def initialize(xml)
|
17
|
+
@raw = xml
|
18
|
+
end
|
19
|
+
|
20
|
+
def content_type
|
21
|
+
charset = @raw.respond_to?(:encoding) ? @raw.encoding.to_s.downcase : "utf-8"
|
22
|
+
"application/xml; charset=#{charset}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def bytesize
|
26
|
+
@raw.to_s.bytesize
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
@raw.to_s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def encode(xml)
|
35
|
+
Encoder.new(xml)
|
36
|
+
end
|
37
|
+
|
38
|
+
begin
|
39
|
+
require "nokogiri"
|
40
|
+
|
41
|
+
# rubocop:disable Lint/DuplicateMethods
|
42
|
+
def decode(response)
|
43
|
+
content_type = response.content_type.mime_type
|
44
|
+
|
45
|
+
raise HTTPX::Error, "invalid form mime type (#{content_type})" unless MIME_TYPES.match?(content_type)
|
46
|
+
|
47
|
+
Nokogiri::XML.method(:parse)
|
48
|
+
end
|
49
|
+
rescue LoadError
|
50
|
+
def decode(_response)
|
51
|
+
raise HTTPX::Error, "\"nokogiri\" is required in order to decode XML"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
# rubocop:enable Lint/DuplicateMethods
|
55
|
+
end
|
56
|
+
register "xml", Xml
|
57
|
+
end
|
data/lib/httpx/transcoder.rb
CHANGED
data/lib/httpx/version.rb
CHANGED
data/sig/buffer.rbs
CHANGED
data/sig/chainable.rbs
CHANGED
@@ -33,6 +33,7 @@ module HTTPX
|
|
33
33
|
| (:aws_sigv4, ?options) -> Plugins::awsSigV4Session
|
34
34
|
| (:grpc, ?options) -> Plugins::grpcSession
|
35
35
|
| (:response_cache, ?options) -> Plugins::sessionResponseCache
|
36
|
+
| (:circuit_breaker, ?options) -> Plugins::sessionCircuitBreaker
|
36
37
|
| (Symbol | Module, ?options) { (Class) -> void } -> Session
|
37
38
|
| (Symbol | Module, ?options) -> Session
|
38
39
|
|
data/sig/connection.rbs
CHANGED
@@ -28,7 +28,7 @@ module HTTPX
|
|
28
28
|
attr_reader options: Options
|
29
29
|
attr_writer timers: Timers
|
30
30
|
|
31
|
-
@
|
31
|
+
@type: io_type
|
32
32
|
@window_size: Integer
|
33
33
|
@read_buffer: Buffer
|
34
34
|
@write_buffer: Buffer
|
@@ -40,7 +40,7 @@ module HTTPX
|
|
40
40
|
|
41
41
|
def addresses=: (Array[ipaddr]) -> void
|
42
42
|
|
43
|
-
def match?: (URI::Generic, options) -> bool
|
43
|
+
def match?: (URI::Generic uri, Options options) -> bool
|
44
44
|
|
45
45
|
def mergeable?: (Connection) -> bool
|
46
46
|
|
@@ -54,13 +54,15 @@ module HTTPX
|
|
54
54
|
|
55
55
|
def match_altsvcs?: (URI::Generic uri) -> bool
|
56
56
|
|
57
|
+
def match_altsvc_options?: (URI::Generic uri, Options options) -> bool
|
58
|
+
|
57
59
|
def connecting?: () -> bool
|
58
60
|
|
59
61
|
def inflight?: () -> boolish
|
60
62
|
|
61
63
|
def interests: () -> io_interests?
|
62
64
|
|
63
|
-
def to_io: () -> IO
|
65
|
+
def to_io: () -> ::IO
|
64
66
|
|
65
67
|
def call: () -> void
|
66
68
|
|
@@ -77,7 +79,7 @@ module HTTPX
|
|
77
79
|
|
78
80
|
private
|
79
81
|
|
80
|
-
def initialize: (
|
82
|
+
def initialize: (io_type, URI::Generic, options) -> untyped
|
81
83
|
|
82
84
|
def connect: () -> void
|
83
85
|
|
@@ -103,5 +105,11 @@ module HTTPX
|
|
103
105
|
def handle_error: (StandardError) -> void
|
104
106
|
|
105
107
|
def purge_after_closed: () -> void
|
108
|
+
|
109
|
+
def set_request_timeouts: (Request request) -> void
|
110
|
+
|
111
|
+
def write_timeout_callback: (Request request, Numeric write_timeout) -> void
|
112
|
+
|
113
|
+
def read_timeout_callback: (Request request, Numeric read_timeout, ?singleton(RequestTimeoutError) error_type) -> void
|
106
114
|
end
|
107
115
|
end
|
data/sig/errors.rbs
CHANGED
@@ -23,6 +23,19 @@ module HTTPX
|
|
23
23
|
class ResolveTimeoutError < TimeoutError
|
24
24
|
end
|
25
25
|
|
26
|
+
class RequestTimeoutError < TimeoutError
|
27
|
+
attr_reader request: Request
|
28
|
+
attr_reader response: response?
|
29
|
+
|
30
|
+
def initialize: (Request request, response? response, Numeric timeout) -> void
|
31
|
+
end
|
32
|
+
|
33
|
+
class ReadTimeoutError < RequestTimeoutError
|
34
|
+
end
|
35
|
+
|
36
|
+
class WriteTimeoutError < RequestTimeoutError
|
37
|
+
end
|
38
|
+
|
26
39
|
class ResolveError < Error
|
27
40
|
end
|
28
41
|
|
data/sig/io.rbs
ADDED
data/sig/options.rbs
CHANGED
@@ -10,7 +10,7 @@ module HTTPX
|
|
10
10
|
SETTINGS_TIMEOUT: Integer
|
11
11
|
DEFAULT_OPTIONS: Hash[Symbol, untyped]
|
12
12
|
|
13
|
-
type timeout_type = :connect_timeout | :settings_timeout | :operation_timeout | :keep_alive_timeout | :total_timeout
|
13
|
+
type timeout_type = :connect_timeout | :settings_timeout | :operation_timeout | :keep_alive_timeout | :total_timeout | :read_timeout | :write_timeout | :request_timeout
|
14
14
|
type timeout = Hash[timeout_type, Numeric]
|
15
15
|
|
16
16
|
def self.new: (?options) -> instance
|
@@ -65,6 +65,9 @@ module HTTPX
|
|
65
65
|
# body
|
66
66
|
attr_reader origin: URI::Generic?
|
67
67
|
|
68
|
+
# base_path
|
69
|
+
attr_reader base_path: String?
|
70
|
+
|
68
71
|
# ssl
|
69
72
|
|
70
73
|
# http2_settings
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module HTTPX
|
2
|
+
module Plugins
|
3
|
+
module CircuitBreaker
|
4
|
+
|
5
|
+
class CircuitStore
|
6
|
+
@circuits: Hash[String, Circuit]
|
7
|
+
|
8
|
+
def try_open: (generic_uri uri, response response) -> void
|
9
|
+
|
10
|
+
def try_respond: (Request request) -> response?
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def get_circuit_for_uri: (generic_uri uri) -> Circuit
|
15
|
+
|
16
|
+
def initialize: (Options & _CircuitOptions options) -> void
|
17
|
+
end
|
18
|
+
|
19
|
+
class Circuit
|
20
|
+
@state: :closed | :open | :half_open
|
21
|
+
@max_attempts: Integer
|
22
|
+
@reset_attempts_in: Float
|
23
|
+
@break_in: Float
|
24
|
+
@circuit_breaker_half_open_drip_rate: Float
|
25
|
+
@attempts: Integer
|
26
|
+
|
27
|
+
@response: response?
|
28
|
+
@opened_at: Float?
|
29
|
+
@attempted_at: Float?
|
30
|
+
|
31
|
+
def respond: () -> response?
|
32
|
+
|
33
|
+
def try_open: (response) -> void
|
34
|
+
|
35
|
+
def try_close: () -> void
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def initialize: (Integer max_attempts, Float reset_attempts_in, Float break_in, Float circuit_breaker_half_open_drip_rate) -> void
|
40
|
+
end
|
41
|
+
|
42
|
+
interface _CircuitOptions
|
43
|
+
def circuit_breaker_max_attempts: () -> Integer
|
44
|
+
def circuit_breaker_reset_attempts_in: () -> Float
|
45
|
+
def circuit_breaker_break_in: () -> Float
|
46
|
+
def circuit_breaker_half_open_drip_rate: () -> Float
|
47
|
+
def circuit_breaker_break_on: () -> (^(Response) -> boolish | nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.load_dependencies: (singleton(Session)) -> void
|
51
|
+
def self.extra_options: (Options) -> (Options & _CircuitOptions)
|
52
|
+
|
53
|
+
module InstanceMethods
|
54
|
+
@circuit_store: CircuitStore
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
type sessionCircuitBreaker = Session & CircuitBreaker::InstanceMethods
|
60
|
+
end
|
61
|
+
end
|
@@ -6,7 +6,7 @@ module HTTPX
|
|
6
6
|
def self.configure: (singleton(Session)) -> void
|
7
7
|
|
8
8
|
def self?.deflater: () -> _Deflater
|
9
|
-
def self?.inflater: (
|
9
|
+
def self?.inflater: (Integer | Float bytesize) -> GZIP::Inflater
|
10
10
|
|
11
11
|
module Deflater
|
12
12
|
extend _Deflater
|
@@ -6,15 +6,15 @@ module HTTPX
|
|
6
6
|
def self.configure: (singleton(Session)) -> void
|
7
7
|
|
8
8
|
def self?.deflater: () -> _Deflater
|
9
|
-
def self?.inflater: (
|
9
|
+
def self?.inflater: (Integer | Float bytesize) -> Inflater
|
10
10
|
|
11
11
|
class Deflater
|
12
12
|
include _Deflater
|
13
13
|
|
14
14
|
@compressed_chunk: String
|
15
|
-
|
15
|
+
|
16
16
|
private
|
17
|
-
|
17
|
+
|
18
18
|
def initialize: () -> untyped
|
19
19
|
def write: (string) -> void
|
20
20
|
def compressed_chunk: () -> String
|
data/sig/plugins/compression.rbs
CHANGED
data/sig/plugins/multipart.rbs
CHANGED
@@ -4,14 +4,15 @@ module HTTPX
|
|
4
4
|
module Plugins
|
5
5
|
module Proxy
|
6
6
|
module Socks5
|
7
|
-
|
7
|
+
VERSION: Integer
|
8
|
+
|
8
9
|
module ConnectionMethods
|
9
10
|
def __socks5_proxy_connect: () -> void
|
10
11
|
def __socks5_on_packet: (String packet) -> void
|
11
12
|
def __socks5_check_version: (int) -> void
|
12
13
|
def __on_socks5_error: (string) -> void
|
13
14
|
end
|
14
|
-
|
15
|
+
|
15
16
|
class SocksParser
|
16
17
|
include Callbacks
|
17
18
|
|
data/sig/plugins/proxy.rbs
CHANGED
@@ -21,7 +21,7 @@ module HTTPX
|
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
|
-
def initialize: (uri: generic_uri, ?scheme: String, ?username: String, ?password: String, **
|
24
|
+
def initialize: (uri: generic_uri, ?scheme: String, ?username: String, ?password: String, **untyped) -> untyped
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.configure: (singleton(Session)) -> void
|
@@ -8,15 +8,19 @@ module HTTPX
|
|
8
8
|
def self?.cached_response?: (response response) -> bool
|
9
9
|
|
10
10
|
class Store
|
11
|
-
@store: Hash[
|
11
|
+
@store: Hash[String, Array[Response]]
|
12
12
|
|
13
|
-
def lookup: (
|
13
|
+
def lookup: (Request request) -> Response?
|
14
14
|
|
15
|
-
def cached?: (
|
15
|
+
def cached?: (Request request) -> boolish
|
16
16
|
|
17
|
-
def cache: (
|
17
|
+
def cache: (Request request, Response response) -> void
|
18
18
|
|
19
19
|
def prepare: (Request request) -> void
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def match_by_vary?: (Request request, Response response) -> bool
|
20
24
|
end
|
21
25
|
|
22
26
|
module InstanceMethods
|
@@ -25,8 +29,24 @@ module HTTPX
|
|
25
29
|
def clear_response_cache: () -> void
|
26
30
|
end
|
27
31
|
|
32
|
+
module RequestMethods
|
33
|
+
def response_cache_key: () -> String
|
34
|
+
end
|
35
|
+
|
28
36
|
module ResponseMethods
|
29
37
|
def copy_from_cached: (Response other) -> void
|
38
|
+
|
39
|
+
def fresh?: () -> bool
|
40
|
+
|
41
|
+
def cache_control: () -> Array[String]?
|
42
|
+
|
43
|
+
def vary: () -> Array[String]?
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def age: () -> Integer
|
48
|
+
|
49
|
+
def date: () -> Time
|
30
50
|
end
|
31
51
|
end
|
32
52
|
|
data/sig/registry.rbs
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
-
module HTTPX::Registry[T, V]
|
1
|
+
module HTTPX::Registry[unchecked out T, unchecked out V]
|
2
2
|
class Error < HTTPX::Error
|
3
3
|
end
|
4
4
|
|
5
5
|
# type registrable = Symbol | String | Class
|
6
6
|
|
7
|
-
def self.registry: (T
|
8
|
-
| () -> Hash[T, V]
|
9
|
-
|
7
|
+
def self.registry: [T, V] (T) -> Class
|
8
|
+
| [T, V] () -> Hash[T, V]
|
9
|
+
|
10
|
+
def self.register: [T, V] (T tag, V handler) -> void
|
10
11
|
|
11
12
|
def registry: (?T tag) -> V
|
12
13
|
end
|
data/sig/request.rbs
CHANGED
@@ -50,6 +50,12 @@ module HTTPX
|
|
50
50
|
|
51
51
|
def trailers?: () -> boolish
|
52
52
|
|
53
|
+
def read_timeout: () -> Numeric
|
54
|
+
|
55
|
+
def write_timeout: () -> Numeric
|
56
|
+
|
57
|
+
def request_timeout: () -> Numeric
|
58
|
+
|
53
59
|
class Body
|
54
60
|
@headers: Headers
|
55
61
|
@body: body_encoder?
|
@@ -61,7 +67,7 @@ module HTTPX
|
|
61
67
|
|
62
68
|
def rewind: () -> void
|
63
69
|
def empty?: () -> bool
|
64
|
-
def bytesize: () ->
|
70
|
+
def bytesize: () -> (Integer | Float)
|
65
71
|
def stream: (Transcoder::_Encoder) -> bodyIO
|
66
72
|
def unbounded_body?: () -> bool
|
67
73
|
def chunked?: () -> bool
|
data/sig/resolver/native.rbs
CHANGED
@@ -10,7 +10,10 @@ module HTTPX
|
|
10
10
|
@family: ip_family
|
11
11
|
@options: Options
|
12
12
|
@ns_index: Integer
|
13
|
-
@nameserver: String
|
13
|
+
@nameserver: Array[String]?
|
14
|
+
@ndots: Integer
|
15
|
+
@start_timeout: Float?
|
16
|
+
@search: Array[String]
|
14
17
|
@_timeouts: Array[Numeric]
|
15
18
|
@timeouts: Hash[String, Array[Numeric]]
|
16
19
|
@connections: Array[Connection]
|
@@ -37,7 +40,7 @@ module HTTPX
|
|
37
40
|
|
38
41
|
def consume: () -> void
|
39
42
|
|
40
|
-
def do_retry: (?Numeric loop_time) -> void
|
43
|
+
def do_retry: (?Numeric? loop_time) -> void
|
41
44
|
|
42
45
|
def dread: (Integer) -> void
|
43
46
|
| () -> void
|
data/sig/response.rbs
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module HTTPX
|
2
2
|
interface _Response
|
3
|
+
def finished?: () -> bool
|
4
|
+
|
3
5
|
def raise_for_status: () -> self
|
4
6
|
|
5
7
|
def error: () -> StandardError?
|
@@ -61,7 +63,7 @@ module HTTPX
|
|
61
63
|
def each: () { (String) -> void } -> void
|
62
64
|
| () -> Enumerable[String]
|
63
65
|
|
64
|
-
def bytesize: () ->
|
66
|
+
def bytesize: () -> (Integer | Float)
|
65
67
|
def empty?: () -> bool
|
66
68
|
def copy_to: (String | File | _Writer destination) -> void
|
67
69
|
def close: () -> void
|
@@ -96,6 +98,7 @@ module HTTPX
|
|
96
98
|
class ErrorResponse
|
97
99
|
include _Response
|
98
100
|
include Loggable
|
101
|
+
extend Forwardable
|
99
102
|
|
100
103
|
@options: Options
|
101
104
|
@error: Exception
|
@@ -104,6 +107,8 @@ module HTTPX
|
|
104
107
|
|
105
108
|
def status: () -> (Integer | _ToS)
|
106
109
|
|
110
|
+
def uri: () -> URI::Generic
|
111
|
+
|
107
112
|
private
|
108
113
|
|
109
114
|
def initialize: (Request, Exception, options) -> untyped
|
data/sig/timers.rbs
CHANGED
data/sig/transcoder/json.rbs
CHANGED
@@ -5,6 +5,9 @@ module HTTPX::Transcoder
|
|
5
5
|
def self?.encode: (_ToJson json) -> Encoder
|
6
6
|
def self?.decode: (HTTPX::Response response) -> _Decoder
|
7
7
|
|
8
|
+
def self?.json_load: (string source, ?json_options) -> untyped
|
9
|
+
def self?.json_dump: (_ToJson obj, *untyped) -> String
|
10
|
+
|
8
11
|
class Encoder
|
9
12
|
extend Forwardable
|
10
13
|
include _Encoder
|
@@ -17,7 +20,7 @@ module HTTPX::Transcoder
|
|
17
20
|
|
18
21
|
private
|
19
22
|
|
20
|
-
def initialize: (_ToJson json) ->
|
23
|
+
def initialize: (_ToJson json) -> void
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module HTTPX::Transcoder
|
2
|
+
module XML
|
3
|
+
|
4
|
+
def self?.encode: (untyped xml) -> Encoder
|
5
|
+
def self?.decode: (HTTPX::Response response) -> _Decoder
|
6
|
+
|
7
|
+
class Encoder
|
8
|
+
@raw: untyped # can be nokogiri object
|
9
|
+
|
10
|
+
def content_type: () -> String
|
11
|
+
|
12
|
+
def bytesize: () -> (Integer | Float)
|
13
|
+
|
14
|
+
def to_s: () -> String
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def initialize: (String xml) -> void
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/sig/transcoder.rbs
CHANGED
@@ -18,11 +18,11 @@ module HTTPX
|
|
18
18
|
end
|
19
19
|
|
20
20
|
interface _Encoder
|
21
|
-
def bytesize: () ->
|
21
|
+
def bytesize: () -> (Integer | Float)
|
22
22
|
end
|
23
23
|
|
24
24
|
interface _Decoder
|
25
|
-
def call: (Response response, untyped
|
25
|
+
def call: (Response response, *untyped) -> untyped
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
data/sig/utils.rbs
CHANGED
@@ -4,9 +4,9 @@ module HTTPX
|
|
4
4
|
|
5
5
|
def self?.parse_retry_after: (String) -> Numeric
|
6
6
|
|
7
|
-
def self?.now: () ->
|
7
|
+
def self?.now: () -> Float
|
8
8
|
|
9
|
-
def self?.elapsed_time: (
|
9
|
+
def self?.elapsed_time: (Integer | Float monotonic_time) -> Float
|
10
10
|
|
11
11
|
def self?.to_uri: (generic_uri uri) -> URI::Generic
|
12
12
|
end
|