mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-09 00:02:50 -04:00
Merge branch 'issue-135' into 'master'
Options Closes #135 See merge request honeyryderchuck/httpx!148
This commit is contained in:
commit
2ea8b2ec2d
@ -30,6 +30,7 @@ module HTTPX
|
|||||||
:request_body_class => Class.new(Request::Body),
|
:request_body_class => Class.new(Request::Body),
|
||||||
:response_body_class => Class.new(Response::Body),
|
:response_body_class => Class.new(Response::Body),
|
||||||
:connection_class => Class.new(Connection),
|
:connection_class => Class.new(Connection),
|
||||||
|
:options_class => Class.new(self),
|
||||||
:transport => nil,
|
:transport => nil,
|
||||||
:transport_options => nil,
|
:transport_options => nil,
|
||||||
:addresses => nil,
|
:addresses => nil,
|
||||||
@ -41,39 +42,48 @@ module HTTPX
|
|||||||
class << self
|
class << self
|
||||||
def new(options = {})
|
def new(options = {})
|
||||||
# let enhanced options go through
|
# let enhanced options go through
|
||||||
return options if self == Options && options.class > self
|
return options if self == Options && options.class < self
|
||||||
return options if options.is_a?(self)
|
return options if options.is_a?(self)
|
||||||
|
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
def def_option(name, layout = nil, &interpreter)
|
def method_added(meth)
|
||||||
attr_reader name
|
super
|
||||||
|
|
||||||
|
return unless meth =~ /^option_(.+)$/
|
||||||
|
|
||||||
|
optname = Regexp.last_match(1).to_sym
|
||||||
|
|
||||||
|
attr_reader(optname)
|
||||||
|
end
|
||||||
|
|
||||||
|
def def_option(optname, *args, &block)
|
||||||
|
if args.size.zero? && !block_given?
|
||||||
|
class_eval(<<-OUT, __FILE__, __LINE__ + 1)
|
||||||
|
def option_#{optname}(v); v; end
|
||||||
|
OUT
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
deprecated_def_option(optname, *args, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def deprecated_def_option(optname, layout = nil, &interpreter)
|
||||||
|
warn "DEPRECATION WARNING: using `def_option(#{optname})` for setting options is deprecated. " \
|
||||||
|
"Define module OptionsMethods and `def option_#{optname}(val)` instead."
|
||||||
|
|
||||||
if layout
|
if layout
|
||||||
class_eval(<<-OUT, __FILE__, __LINE__ + 1)
|
class_eval(<<-OUT, __FILE__, __LINE__ + 1)
|
||||||
def #{name}=(value)
|
def option_#{optname}(value)
|
||||||
return if value.nil?
|
|
||||||
|
|
||||||
value = begin
|
|
||||||
#{layout}
|
#{layout}
|
||||||
end
|
end
|
||||||
|
|
||||||
@#{name} = value
|
|
||||||
end
|
|
||||||
OUT
|
OUT
|
||||||
|
elsif block_given?
|
||||||
elsif interpreter
|
define_method(:"option_#{optname}") do |value|
|
||||||
define_method(:"#{name}=") do |value|
|
instance_exec(value, &interpreter)
|
||||||
return if value.nil?
|
|
||||||
|
|
||||||
instance_variable_set(:"@#{name}", instance_exec(value, &interpreter).freeze)
|
|
||||||
end
|
end
|
||||||
else
|
|
||||||
attr_writer name
|
|
||||||
end
|
end
|
||||||
|
|
||||||
protected :"#{name}="
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -83,7 +93,8 @@ module HTTPX
|
|||||||
next if v.nil?
|
next if v.nil?
|
||||||
|
|
||||||
begin
|
begin
|
||||||
__send__(:"#{k}=", v)
|
value = __send__(:"option_#{k}", v)
|
||||||
|
instance_variable_set(:"@#{k}", value)
|
||||||
rescue NoMethodError
|
rescue NoMethodError
|
||||||
raise Error, "unknown option: #{k}"
|
raise Error, "unknown option: #{k}"
|
||||||
end
|
end
|
||||||
@ -91,19 +102,15 @@ module HTTPX
|
|||||||
freeze
|
freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
def_option(:origin, <<-OUT)
|
def option_origin(value)
|
||||||
URI(value)
|
URI(value)
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:headers, <<-OUT)
|
def option_headers(value)
|
||||||
if self.headers
|
|
||||||
self.headers.merge(value)
|
|
||||||
else
|
|
||||||
Headers.new(value)
|
Headers.new(value)
|
||||||
end
|
end
|
||||||
OUT
|
|
||||||
|
|
||||||
def_option(:timeout, <<-OUT)
|
def option_timeout(value)
|
||||||
timeouts = Hash[value]
|
timeouts = Hash[value]
|
||||||
|
|
||||||
if timeouts.key?(:loop_timeout)
|
if timeouts.key?(:loop_timeout)
|
||||||
@ -112,42 +119,43 @@ module HTTPX
|
|||||||
end
|
end
|
||||||
|
|
||||||
timeouts
|
timeouts
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:max_concurrent_requests, <<-OUT)
|
def option_max_concurrent_requests(value)
|
||||||
raise TypeError, ":max_concurrent_requests must be positive" unless value.positive?
|
raise TypeError, ":max_concurrent_requests must be positive" unless value.positive?
|
||||||
|
|
||||||
value
|
value
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:max_requests, <<-OUT)
|
def option_max_requests(value)
|
||||||
raise TypeError, ":max_requests must be positive" unless value.positive?
|
raise TypeError, ":max_requests must be positive" unless value.positive?
|
||||||
|
|
||||||
value
|
value
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:window_size, <<-OUT)
|
def option_window_size(value)
|
||||||
Integer(value)
|
Integer(value)
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:body_threshold_size, <<-OUT)
|
def option_body_threshold_size(value)
|
||||||
Integer(value)
|
Integer(value)
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:transport, <<-OUT)
|
def option_transport(value)
|
||||||
transport = value.to_s
|
transport = value.to_s
|
||||||
raise TypeError, "\#{transport} is an unsupported transport type" unless IO.registry.key?(transport)
|
raise TypeError, "\#{transport} is an unsupported transport type" unless IO.registry.key?(transport)
|
||||||
|
|
||||||
transport
|
transport
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:addresses, <<-OUT)
|
def option_addresses(value)
|
||||||
Array(value)
|
Array(value)
|
||||||
OUT
|
end
|
||||||
|
|
||||||
%i[
|
%i[
|
||||||
params form json body ssl http2_settings
|
params form json body ssl http2_settings
|
||||||
request_class response_class headers_class request_body_class response_body_class connection_class
|
request_class response_class headers_class request_body_class
|
||||||
|
response_body_class connection_class options_class
|
||||||
io fallback_protocol debug debug_level transport_options resolver_class resolver_options
|
io fallback_protocol debug debug_level transport_options resolver_class resolver_options
|
||||||
persistent
|
persistent
|
||||||
].each do |method_name|
|
].each do |method_name|
|
||||||
|
@ -141,22 +141,23 @@ module HTTPX
|
|||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def extra_options(options)
|
def load_dependencies(*)
|
||||||
Class.new(options.class) do
|
|
||||||
def_option(:sigv4_signer, <<-OUT)
|
|
||||||
value.is_a?(#{Signer}) ? value : #{Signer}.new(value)
|
|
||||||
OUT
|
|
||||||
end.new(options)
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_dependencies(klass)
|
|
||||||
require "digest/sha2"
|
require "digest/sha2"
|
||||||
require "openssl"
|
require "openssl"
|
||||||
|
end
|
||||||
|
|
||||||
|
def configure(klass)
|
||||||
klass.plugin(:expect)
|
klass.plugin(:expect)
|
||||||
klass.plugin(:compression)
|
klass.plugin(:compression)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module OptionsMethods
|
||||||
|
def option_sigv4_signer(value)
|
||||||
|
value.is_a?(Signer) ? value : Signer.new(value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
module InstanceMethods
|
module InstanceMethods
|
||||||
def aws_sigv4_authentication(**options)
|
def aws_sigv4_authentication(**options)
|
||||||
with(sigv4_signer: Signer.new(**options))
|
with(sigv4_signer: Signer.new(**options))
|
||||||
|
@ -23,21 +23,22 @@ module HTTPX
|
|||||||
encodings = Module.new do
|
encodings = Module.new do
|
||||||
extend Registry
|
extend Registry
|
||||||
end
|
end
|
||||||
|
options.merge(encodings: encodings)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Class.new(options.class) do
|
module OptionsMethods
|
||||||
def_option(:compression_threshold_size, <<-OUT)
|
def option_compression_threshold_size(value)
|
||||||
bytes = Integer(value)
|
bytes = Integer(value)
|
||||||
raise TypeError, ":expect_threshold_size must be positive" unless bytes.positive?
|
raise TypeError, ":expect_threshold_size must be positive" unless bytes.positive?
|
||||||
|
|
||||||
bytes
|
bytes
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:encodings, <<-OUT)
|
def option_encodings(value)
|
||||||
raise TypeError, ":encodings must be a registry" unless value.respond_to?(:registry)
|
raise TypeError, ":encodings must be a registry" unless value.respond_to?(:registry)
|
||||||
|
|
||||||
value
|
value
|
||||||
OUT
|
|
||||||
end.new(options).merge(encodings: encodings)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,12 +18,10 @@ module HTTPX
|
|||||||
require "httpx/plugins/cookies/set_cookie_parser"
|
require "httpx/plugins/cookies/set_cookie_parser"
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options(options)
|
module OptionsMethods
|
||||||
Class.new(options.class) do
|
def option_cookies(value)
|
||||||
def_option(:cookies, <<-OUT)
|
value.is_a?(Jar) ? value : Jar.new(value)
|
||||||
value.is_a?(#{Jar}) ? value : #{Jar}.new(value)
|
end
|
||||||
OUT
|
|
||||||
end.new(options)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module InstanceMethods
|
module InstanceMethods
|
||||||
|
@ -14,20 +14,24 @@ module HTTPX
|
|||||||
|
|
||||||
DigestError = Class.new(Error)
|
DigestError = Class.new(Error)
|
||||||
|
|
||||||
def self.extra_options(options)
|
class << self
|
||||||
Class.new(options.class) do
|
def extra_options(options)
|
||||||
def_option(:digest, <<-OUT)
|
options.merge(max_concurrent_requests: 1)
|
||||||
raise TypeError, ":digest must be a Digest" unless value.is_a?(#{Digest})
|
|
||||||
|
|
||||||
value
|
|
||||||
OUT
|
|
||||||
end.new(options).merge(max_concurrent_requests: 1)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.load_dependencies(*)
|
def load_dependencies(*)
|
||||||
require "securerandom"
|
require "securerandom"
|
||||||
require "digest"
|
require "digest"
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module OptionsMethods
|
||||||
|
def option_digest(value)
|
||||||
|
raise TypeError, ":digest must be a Digest" unless value.is_a?(Digest)
|
||||||
|
|
||||||
|
value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
module InstanceMethods
|
module InstanceMethods
|
||||||
def digest_authentication(user, password)
|
def digest_authentication(user, password)
|
||||||
|
@ -10,26 +10,30 @@ module HTTPX
|
|||||||
module Expect
|
module Expect
|
||||||
EXPECT_TIMEOUT = 2
|
EXPECT_TIMEOUT = 2
|
||||||
|
|
||||||
def self.no_expect_store
|
class << self
|
||||||
|
def no_expect_store
|
||||||
@no_expect_store ||= []
|
@no_expect_store ||= []
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options(options)
|
def extra_options(options)
|
||||||
Class.new(options.class) do
|
options.merge(expect_timeout: EXPECT_TIMEOUT)
|
||||||
def_option(:expect_timeout, <<-OUT)
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module OptionsMethods
|
||||||
|
def option_expect_timeout(value)
|
||||||
seconds = Integer(value)
|
seconds = Integer(value)
|
||||||
raise TypeError, ":expect_timeout must be positive" unless seconds.positive?
|
raise TypeError, ":expect_timeout must be positive" unless seconds.positive?
|
||||||
|
|
||||||
seconds
|
seconds
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:expect_threshold_size, <<-OUT)
|
def option_expect_threshold_size(value)
|
||||||
bytes = Integer(value)
|
bytes = Integer(value)
|
||||||
raise TypeError, ":expect_threshold_size must be positive" unless bytes.positive?
|
raise TypeError, ":expect_threshold_size must be positive" unless bytes.positive?
|
||||||
|
|
||||||
bytes
|
bytes
|
||||||
OUT
|
end
|
||||||
end.new(options).merge(expect_timeout: EXPECT_TIMEOUT)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module RequestMethods
|
module RequestMethods
|
||||||
|
@ -17,17 +17,17 @@ module HTTPX
|
|||||||
MAX_REDIRECTS = 3
|
MAX_REDIRECTS = 3
|
||||||
REDIRECT_STATUS = (300..399).freeze
|
REDIRECT_STATUS = (300..399).freeze
|
||||||
|
|
||||||
def self.extra_options(options)
|
module OptionsMethods
|
||||||
Class.new(options.class) do
|
def option_max_redirects(value)
|
||||||
def_option(:max_redirects, <<-OUT)
|
|
||||||
num = Integer(value)
|
num = Integer(value)
|
||||||
raise TypeError, ":max_redirects must be positive" if num.negative?
|
raise TypeError, ":max_redirects must be positive" if num.negative?
|
||||||
|
|
||||||
num
|
num
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:follow_insecure_redirects)
|
def option_follow_insecure_redirects(value)
|
||||||
end.new(options)
|
value
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module InstanceMethods
|
module InstanceMethods
|
||||||
|
@ -61,36 +61,7 @@ module HTTPX
|
|||||||
end
|
end
|
||||||
|
|
||||||
def extra_options(options)
|
def extra_options(options)
|
||||||
Class.new(options.class) do
|
options.merge(
|
||||||
def_option(:grpc_service, <<-OUT)
|
|
||||||
String(value)
|
|
||||||
OUT
|
|
||||||
|
|
||||||
def_option(:grpc_compression, <<-OUT)
|
|
||||||
case value
|
|
||||||
when true, false
|
|
||||||
value
|
|
||||||
else
|
|
||||||
value.to_s
|
|
||||||
end
|
|
||||||
OUT
|
|
||||||
|
|
||||||
def_option(:grpc_rpcs, <<-OUT)
|
|
||||||
Hash[value]
|
|
||||||
OUT
|
|
||||||
|
|
||||||
def_option(:grpc_deadline, <<-OUT)
|
|
||||||
raise TypeError, ":grpc_deadline must be positive" unless value.positive?
|
|
||||||
|
|
||||||
value
|
|
||||||
OUT
|
|
||||||
|
|
||||||
def_option(:call_credentials, <<-OUT)
|
|
||||||
raise TypeError, ":call_credentials must respond to #call" unless value.respond_to?(:call)
|
|
||||||
|
|
||||||
value
|
|
||||||
OUT
|
|
||||||
end.new(options).merge(
|
|
||||||
fallback_protocol: "h2",
|
fallback_protocol: "h2",
|
||||||
http2_settings: { wait_for_handshake: false },
|
http2_settings: { wait_for_handshake: false },
|
||||||
grpc_rpcs: {}.freeze,
|
grpc_rpcs: {}.freeze,
|
||||||
@ -100,6 +71,37 @@ module HTTPX
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module OptionsMethods
|
||||||
|
def option_grpc_service(value)
|
||||||
|
String(value)
|
||||||
|
end
|
||||||
|
|
||||||
|
def option_grpc_compression(value)
|
||||||
|
case value
|
||||||
|
when true, false
|
||||||
|
value
|
||||||
|
else
|
||||||
|
value.to_s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def option_grpc_rpcs(value)
|
||||||
|
Hash[value]
|
||||||
|
end
|
||||||
|
|
||||||
|
def option_grpc_deadline(value)
|
||||||
|
raise TypeError, ":grpc_deadline must be positive" unless value.positive?
|
||||||
|
|
||||||
|
value
|
||||||
|
end
|
||||||
|
|
||||||
|
def option_call_credentials(value)
|
||||||
|
raise TypeError, ":call_credentials must respond to #call" unless value.respond_to?(:call)
|
||||||
|
|
||||||
|
value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
module ResponseMethods
|
module ResponseMethods
|
||||||
attr_reader :trailing_metadata
|
attr_reader :trailing_metadata
|
||||||
|
|
||||||
|
@ -15,13 +15,15 @@ module HTTPX
|
|||||||
end
|
end
|
||||||
|
|
||||||
def extra_options(options)
|
def extra_options(options)
|
||||||
Class.new(options.class) do
|
options.merge(max_concurrent_requests: 1)
|
||||||
def_option(:ntlm, <<-OUT)
|
end
|
||||||
raise TypeError, ":ntlm must be a #{NTLMParams}" unless value.is_a?(#{NTLMParams})
|
end
|
||||||
|
|
||||||
|
module OptionsMethods
|
||||||
|
def option_ntlm(value)
|
||||||
|
raise TypeError, ":ntlm must be a #{NTLMParams}" unless value.is_a?(NTLMParams)
|
||||||
|
|
||||||
value
|
value
|
||||||
OUT
|
|
||||||
end.new(options).merge(max_concurrent_requests: 1)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -64,13 +64,11 @@ module HTTPX
|
|||||||
klass.plugin(:"proxy/socks4")
|
klass.plugin(:"proxy/socks4")
|
||||||
klass.plugin(:"proxy/socks5")
|
klass.plugin(:"proxy/socks5")
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def extra_options(options)
|
module OptionsMethods
|
||||||
Class.new(options.class) do
|
def option_proxy(value)
|
||||||
def_option(:proxy, <<-OUT)
|
value.is_a?(Parameters) ? value : Hash[value]
|
||||||
value.is_a?(#{Parameters}) ? value : Hash[value]
|
|
||||||
OUT
|
|
||||||
end.new(options)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -6,16 +6,16 @@ module HTTPX
|
|||||||
module Plugins
|
module Plugins
|
||||||
module Proxy
|
module Proxy
|
||||||
module SSH
|
module SSH
|
||||||
def self.load_dependencies(*)
|
class << self
|
||||||
|
def load_dependencies(*)
|
||||||
require "net/ssh/gateway"
|
require "net/ssh/gateway"
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.extra_options(options)
|
module OptionsMethods
|
||||||
Class.new(options.class) do
|
def option_proxy(value)
|
||||||
def_option(:proxy, <<-OUT)
|
|
||||||
Hash[value]
|
Hash[value]
|
||||||
OUT
|
end
|
||||||
end.new(options)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module InstanceMethods
|
module InstanceMethods
|
||||||
|
@ -24,8 +24,11 @@ module HTTPX
|
|||||||
Errno::ETIMEDOUT].freeze
|
Errno::ETIMEDOUT].freeze
|
||||||
|
|
||||||
def self.extra_options(options)
|
def self.extra_options(options)
|
||||||
Class.new(options.class) do
|
options.merge(max_retries: MAX_RETRIES)
|
||||||
def_option(:retry_after, <<-OUT)
|
end
|
||||||
|
|
||||||
|
module OptionsMethods
|
||||||
|
def option_retry_after(value)
|
||||||
# return early if callable
|
# return early if callable
|
||||||
unless value.respond_to?(:call)
|
unless value.respond_to?(:call)
|
||||||
value = Integer(value)
|
value = Integer(value)
|
||||||
@ -33,23 +36,24 @@ module HTTPX
|
|||||||
end
|
end
|
||||||
|
|
||||||
value
|
value
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:max_retries, <<-OUT)
|
def option_max_retries(value)
|
||||||
num = Integer(value)
|
num = Integer(value)
|
||||||
raise TypeError, ":max_retries must be positive" unless num.positive?
|
raise TypeError, ":max_retries must be positive" unless num.positive?
|
||||||
|
|
||||||
num
|
num
|
||||||
OUT
|
end
|
||||||
|
|
||||||
def_option(:retry_change_requests)
|
def option_retry_change_requests(v)
|
||||||
|
v
|
||||||
|
end
|
||||||
|
|
||||||
def_option(:retry_on, <<-OUT)
|
def option_retry_on(value)
|
||||||
raise ":retry_on must be called with the response" unless value.respond_to?(:call)
|
raise ":retry_on must be called with the response" unless value.respond_to?(:call)
|
||||||
|
|
||||||
value
|
value
|
||||||
OUT
|
end
|
||||||
end.new(options).merge(max_retries: MAX_RETRIES)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module InstanceMethods
|
module InstanceMethods
|
||||||
|
@ -18,14 +18,15 @@ module HTTPX
|
|||||||
upgrade_handlers = Module.new do
|
upgrade_handlers = Module.new do
|
||||||
extend Registry
|
extend Registry
|
||||||
end
|
end
|
||||||
|
options.merge(upgrade_handlers: upgrade_handlers)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Class.new(options.class) do
|
module OptionsMethods
|
||||||
def_option(:upgrade_handlers, <<-OUT)
|
def option_upgrade_handlers(value)
|
||||||
raise TypeError, ":upgrade_handlers must be a registry" unless value.respond_to?(:registry)
|
raise TypeError, ":upgrade_handlers must be a registry" unless value.respond_to?(:registry)
|
||||||
|
|
||||||
value
|
value
|
||||||
OUT
|
|
||||||
end.new(options).merge(upgrade_handlers: upgrade_handlers)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -247,9 +247,8 @@ module HTTPX
|
|||||||
if !@plugins.include?(pl)
|
if !@plugins.include?(pl)
|
||||||
@plugins << pl
|
@plugins << pl
|
||||||
pl.load_dependencies(self, &block) if pl.respond_to?(:load_dependencies)
|
pl.load_dependencies(self, &block) if pl.respond_to?(:load_dependencies)
|
||||||
|
|
||||||
@default_options = @default_options.dup
|
@default_options = @default_options.dup
|
||||||
@default_options = pl.extra_options(@default_options, &block) if pl.respond_to?(:extra_options)
|
|
||||||
@default_options = @default_options.merge(options) if options
|
|
||||||
|
|
||||||
include(pl::InstanceMethods) if defined?(pl::InstanceMethods)
|
include(pl::InstanceMethods) if defined?(pl::InstanceMethods)
|
||||||
extend(pl::ClassMethods) if defined?(pl::ClassMethods)
|
extend(pl::ClassMethods) if defined?(pl::ClassMethods)
|
||||||
@ -266,14 +265,26 @@ module HTTPX
|
|||||||
opts.response_body_class.__send__(:include, pl::ResponseBodyMethods) if defined?(pl::ResponseBodyMethods)
|
opts.response_body_class.__send__(:include, pl::ResponseBodyMethods) if defined?(pl::ResponseBodyMethods)
|
||||||
opts.response_body_class.extend(pl::ResponseBodyClassMethods) if defined?(pl::ResponseBodyClassMethods)
|
opts.response_body_class.extend(pl::ResponseBodyClassMethods) if defined?(pl::ResponseBodyClassMethods)
|
||||||
opts.connection_class.__send__(:include, pl::ConnectionMethods) if defined?(pl::ConnectionMethods)
|
opts.connection_class.__send__(:include, pl::ConnectionMethods) if defined?(pl::ConnectionMethods)
|
||||||
|
if defined?(pl::OptionsMethods)
|
||||||
|
opts.options_class.__send__(:include, pl::OptionsMethods)
|
||||||
|
|
||||||
|
(pl::OptionsMethods.instance_methods - Object.instance_methods).each do |meth|
|
||||||
|
opts.options_class.method_added(meth)
|
||||||
|
end
|
||||||
|
@default_options = opts.options_class.new(opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
@default_options = pl.extra_options(@default_options) if pl.respond_to?(:extra_options)
|
||||||
|
@default_options = @default_options.merge(options) if options
|
||||||
|
|
||||||
pl.configure(self, &block) if pl.respond_to?(:configure)
|
pl.configure(self, &block) if pl.respond_to?(:configure)
|
||||||
|
|
||||||
@default_options.freeze
|
@default_options.freeze
|
||||||
elsif options
|
elsif options
|
||||||
# this can happen when two plugins are loaded, an one of them calls the other under the hood,
|
# this can happen when two plugins are loaded, an one of them calls the other under the hood,
|
||||||
# albeit changing some default.
|
# albeit changing some default.
|
||||||
@default_options = @default_options.dup
|
@default_options = pl.extra_options(@default_options) if pl.respond_to?(:extra_options)
|
||||||
@default_options = @default_options.merge(options)
|
@default_options = @default_options.merge(options) if options
|
||||||
|
|
||||||
@default_options.freeze
|
@default_options.freeze
|
||||||
end
|
end
|
||||||
|
@ -13,66 +13,51 @@ module HTTPX
|
|||||||
type timeout_type = :connect_timeout | :settings_timeout | :operation_timeout | :keep_alive_timeout | :total_timeout
|
type timeout_type = :connect_timeout | :settings_timeout | :operation_timeout | :keep_alive_timeout | :total_timeout
|
||||||
type timeout = Hash[timeout_type, Numeric?]
|
type timeout = Hash[timeout_type, Numeric?]
|
||||||
|
|
||||||
def self.new: (options) -> instance
|
def self.new: (?options) -> instance
|
||||||
| () -> instance
|
|
||||||
|
|
||||||
def self.def_option: (Symbol, ?String) -> void
|
def self.def_option: (Symbol, ?String) -> void
|
||||||
| (Symbol) { (*nil) -> untyped } -> void
|
| (Symbol) { (*nil) -> untyped } -> void
|
||||||
# headers
|
# headers
|
||||||
attr_reader uri: URI?
|
attr_reader uri: URI?
|
||||||
def uri=: (uri) -> void
|
|
||||||
|
|
||||||
# headers
|
# headers
|
||||||
attr_reader headers: Headers?
|
attr_reader headers: Headers?
|
||||||
def headers=: (headers) -> void
|
|
||||||
|
|
||||||
# timeout
|
# timeout
|
||||||
attr_reader timeout: timeout
|
attr_reader timeout: timeout
|
||||||
def timeout=: (timeout) -> void
|
|
||||||
|
|
||||||
# max_concurrent_requests
|
# max_concurrent_requests
|
||||||
attr_reader max_concurrent_requests: Integer?
|
attr_reader max_concurrent_requests: Integer?
|
||||||
def max_concurrent_requests=: (Integer) -> void
|
|
||||||
|
|
||||||
# max_requests
|
# max_requests
|
||||||
attr_reader max_requests: Integer?
|
attr_reader max_requests: Integer?
|
||||||
def max_requests=: (Integer) -> void
|
|
||||||
|
|
||||||
# window_size
|
# window_size
|
||||||
attr_reader window_size: Integer
|
attr_reader window_size: Integer
|
||||||
def window_size=: (int) -> void
|
|
||||||
|
|
||||||
# body_threshold_size
|
# body_threshold_size
|
||||||
attr_reader body_threshold_size: Integer
|
attr_reader body_threshold_size: Integer
|
||||||
def body_threshold_size=: (int) -> void
|
|
||||||
|
|
||||||
# transport
|
# transport
|
||||||
attr_reader transport: String?
|
attr_reader transport: String?
|
||||||
def transport=: (_ToS) -> void
|
|
||||||
|
|
||||||
# transport_options
|
# transport_options
|
||||||
attr_reader transport_options: Hash[untyped, untyped]?
|
attr_reader transport_options: Hash[untyped, untyped]?
|
||||||
def transport_options=: (Hash[untyped, untyped]) -> void
|
|
||||||
|
|
||||||
# addresses
|
# addresses
|
||||||
attr_reader addresses: _ToAry[ipaddr]?
|
attr_reader addresses: _ToAry[ipaddr]?
|
||||||
def addresses=: (_ToAry[ipaddr]) -> void
|
|
||||||
|
|
||||||
# params
|
# params
|
||||||
attr_reader params: Transcoder::urlencoded_input?
|
attr_reader params: Transcoder::urlencoded_input?
|
||||||
def params=: (Transcoder::urlencoded_input) -> void
|
|
||||||
|
|
||||||
# form
|
# form
|
||||||
attr_reader form: Transcoder::urlencoded_input?
|
attr_reader form: Transcoder::urlencoded_input?
|
||||||
def form=: (Transcoder::urlencoded_input) -> void
|
|
||||||
|
|
||||||
# json
|
# json
|
||||||
attr_reader json: _ToJson?
|
attr_reader json: _ToJson?
|
||||||
def json=: (_ToJson) -> void
|
|
||||||
|
|
||||||
# body
|
# body
|
||||||
attr_reader body: bodyIO?
|
attr_reader body: bodyIO?
|
||||||
def body=: (bodyIO) -> void
|
|
||||||
|
|
||||||
# ssl
|
# ssl
|
||||||
|
|
||||||
@ -81,25 +66,18 @@ module HTTPX
|
|||||||
|
|
||||||
# classes
|
# classes
|
||||||
attr_reader connection_class: singleton(Connection)
|
attr_reader connection_class: singleton(Connection)
|
||||||
def connection_class=: (singleton(Connection)) -> void
|
|
||||||
|
|
||||||
attr_reader request_class: singleton(Request)
|
attr_reader request_class: singleton(Request)
|
||||||
def request_class=: (singleton(Request)) -> void
|
|
||||||
|
|
||||||
attr_reader response_class: singleton(Response)
|
attr_reader response_class: singleton(Response)
|
||||||
def response_class=: (singleton(Response)) -> void
|
|
||||||
|
|
||||||
attr_reader headers_class: singleton(Headers)
|
attr_reader headers_class: singleton(Headers)
|
||||||
def headers_class=: (singleton(Headers)) -> void
|
|
||||||
|
|
||||||
attr_reader request_body_class: singleton(Request::Body)
|
attr_reader request_body_class: singleton(Request::Body)
|
||||||
def request_body_class=: (singleton(Request::Body)) -> void
|
|
||||||
|
|
||||||
attr_reader response_body_class: singleton(Response::Body)
|
attr_reader response_body_class: singleton(Response::Body)
|
||||||
def response_body_class=: (singleton(Response::Body)) -> void
|
|
||||||
|
|
||||||
attr_reader ssl: Hash[Symbol, untyped]
|
attr_reader ssl: Hash[Symbol, untyped]
|
||||||
def ssl=: (Hash[Symbol, untyped]) -> void
|
|
||||||
|
|
||||||
# request_class response_class headers_class request_body_class
|
# request_class response_class headers_class request_body_class
|
||||||
# response_body_class connection_class
|
# response_body_class connection_class
|
||||||
@ -108,27 +86,21 @@ module HTTPX
|
|||||||
# io
|
# io
|
||||||
type io_option = _ToIO | Hash[String, _ToIO]
|
type io_option = _ToIO | Hash[String, _ToIO]
|
||||||
attr_reader io: io_option?
|
attr_reader io: io_option?
|
||||||
def io=: (io_option) -> void
|
|
||||||
|
|
||||||
# fallback_protocol
|
# fallback_protocol
|
||||||
attr_reader fallback_protocol: String?
|
attr_reader fallback_protocol: String?
|
||||||
def fallback_protocol=: (String) -> void
|
|
||||||
|
|
||||||
# debug
|
# debug
|
||||||
attr_reader debug: _IOLogger?
|
attr_reader debug: _IOLogger?
|
||||||
def debug=: (_IOLogger) -> void
|
|
||||||
|
|
||||||
# debug_level
|
# debug_level
|
||||||
attr_reader debug_level: Integer
|
attr_reader debug_level: Integer
|
||||||
def debug_level=: (Integer) -> void
|
|
||||||
|
|
||||||
# persistent
|
# persistent
|
||||||
attr_reader persistent: bool?
|
attr_reader persistent: bool?
|
||||||
def persistent=: (bool) -> void
|
|
||||||
|
|
||||||
# resolver_options
|
# resolver_options
|
||||||
attr_reader resolver_options: Hash[Symbol, untyped]?
|
attr_reader resolver_options: Hash[Symbol, untyped]?
|
||||||
def resolver_options=: (Hash[Symbol, untyped]) -> void
|
|
||||||
|
|
||||||
def ==: (untyped other) -> bool
|
def ==: (untyped other) -> bool
|
||||||
def merge: (_ToHash[Symbol | String, untyped] other) -> instance
|
def merge: (_ToHash[Symbol | String, untyped] other) -> instance
|
||||||
|
@ -42,7 +42,6 @@ module HTTPX
|
|||||||
|
|
||||||
interface _SigV4Options
|
interface _SigV4Options
|
||||||
def sigv4_signer: () -> Signer?
|
def sigv4_signer: () -> Signer?
|
||||||
def sigv4_signer=: (Signer) -> Signer
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _SigV4Options)
|
def self.extra_options: (Options) -> (Options & _SigV4Options)
|
||||||
|
@ -20,10 +20,8 @@ module HTTPX
|
|||||||
|
|
||||||
interface _CompressionOptions
|
interface _CompressionOptions
|
||||||
def compression_threshold_size: () -> Integer?
|
def compression_threshold_size: () -> Integer?
|
||||||
def compression_threshold_size=: (int) -> _ToInt
|
|
||||||
|
|
||||||
def encodings: () -> encodings_registry?
|
def encodings: () -> encodings_registry?
|
||||||
def encodings=: (encodings_registry) -> encodings_registry
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _CompressionOptions)
|
def self.extra_options: (Options) -> (Options & _CompressionOptions)
|
||||||
|
@ -5,7 +5,6 @@ module HTTPX
|
|||||||
|
|
||||||
interface _CookieOptions
|
interface _CookieOptions
|
||||||
def cookies: () -> Jar?
|
def cookies: () -> Jar?
|
||||||
def cookies=: (jar) -> Jar
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _CookieOptions)
|
def self.extra_options: (Options) -> (Options & _CookieOptions)
|
||||||
|
@ -5,7 +5,6 @@ module HTTPX
|
|||||||
|
|
||||||
interface _DigestOptions
|
interface _DigestOptions
|
||||||
def digest: () -> Digest?
|
def digest: () -> Digest?
|
||||||
def digest=: (Digest) -> Digest
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _DigestOptions)
|
def self.extra_options: (Options) -> (Options & _DigestOptions)
|
||||||
|
@ -5,10 +5,8 @@ module HTTPX
|
|||||||
|
|
||||||
interface _ExpectOptions
|
interface _ExpectOptions
|
||||||
def expect_timeout: () -> Integer?
|
def expect_timeout: () -> Integer?
|
||||||
def expect_timeout=: (int) -> Integer
|
|
||||||
|
|
||||||
def expect_threshold_size: () -> Integer?
|
def expect_threshold_size: () -> Integer?
|
||||||
def expect_threshold_size=: (int) -> Integer
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _ExpectOptions)
|
def self.extra_options: (Options) -> (Options & _ExpectOptions)
|
||||||
|
@ -8,10 +8,8 @@ module HTTPX
|
|||||||
|
|
||||||
interface _FollowRedirectsOptions
|
interface _FollowRedirectsOptions
|
||||||
def max_redirects: () -> Integer?
|
def max_redirects: () -> Integer?
|
||||||
def max_redirects=: (int) -> Integer
|
|
||||||
|
|
||||||
def follow_insecure_redirects: () -> bool?
|
def follow_insecure_redirects: () -> bool?
|
||||||
def follow_insecure_redirects=: (bool) -> bool
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _FollowRedirectsOptions)
|
def self.extra_options: (Options) -> (Options & _FollowRedirectsOptions)
|
||||||
|
@ -49,19 +49,14 @@ module HTTPX
|
|||||||
|
|
||||||
interface _GRPCOptions
|
interface _GRPCOptions
|
||||||
def grpc_service: () -> String?
|
def grpc_service: () -> String?
|
||||||
def grpc_service=: (string) -> String
|
|
||||||
|
|
||||||
def grpc_compression: () -> compression_option?
|
def grpc_compression: () -> compression_option?
|
||||||
def grpc_compression=: (compression_option) -> compression_option
|
|
||||||
|
|
||||||
def grpc_rpcs: () -> Hash[String, rpc_def]?
|
def grpc_rpcs: () -> Hash[String, rpc_def]?
|
||||||
def grpc_rpcs=: (Hash[String, rpc_def]) -> Hash[String, rpc_def]
|
|
||||||
|
|
||||||
def grpc_deadline: () -> Integer?
|
def grpc_deadline: () -> Integer?
|
||||||
def grpc_deadline=: (Integer) -> Integer
|
|
||||||
|
|
||||||
def call_credentials: () -> credentials?
|
def call_credentials: () -> credentials?
|
||||||
def call_credentials=: (credentials) -> credentials
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _GRPCOptions)
|
def self.extra_options: (Options) -> (Options & _GRPCOptions)
|
||||||
|
@ -4,7 +4,6 @@ module HTTPX
|
|||||||
|
|
||||||
interface _NTLMOptions
|
interface _NTLMOptions
|
||||||
def ntlm: () -> NTLMParams?
|
def ntlm: () -> NTLMParams?
|
||||||
def ntlm=: (NTLMParams) -> NTLMParams
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _NTLMOptions)
|
def self.extra_options: (Options) -> (Options & _NTLMOptions)
|
||||||
|
@ -3,12 +3,7 @@ module HTTPX
|
|||||||
module Persistent
|
module Persistent
|
||||||
def self.load_dependencies: (singleton(Session)) -> void
|
def self.load_dependencies: (singleton(Session)) -> void
|
||||||
|
|
||||||
interface _PersistentOptions
|
def self.extra_options: (Options) -> (Options)
|
||||||
def persistent: () -> bool?
|
|
||||||
def persistent=: (bool) -> bool
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _PersistentOptions)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
type sessionPersistent = sessionFollowRedirects
|
type sessionPersistent = sessionFollowRedirects
|
||||||
|
@ -28,7 +28,6 @@ module HTTPX
|
|||||||
|
|
||||||
interface _ProxyOptions
|
interface _ProxyOptions
|
||||||
def proxy: () -> proxyParam?
|
def proxy: () -> proxyParam?
|
||||||
def proxy=: (Parameters | _ToHash[Symbol, untyped]) -> proxyParam
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _ProxyOptions)
|
def self.extra_options: (Options) -> (Options & _ProxyOptions)
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
module HTTPX
|
module HTTPX
|
||||||
module Plugins
|
module Plugins
|
||||||
module PushPromise
|
module PushPromise
|
||||||
def self.extra_options: (Options) -> Options
|
|
||||||
|
|
||||||
module ResponseMethods
|
module ResponseMethods
|
||||||
def pushed?: () -> boolish
|
def pushed?: () -> boolish
|
||||||
def mark_as_pushed!: () -> void
|
def mark_as_pushed!: () -> void
|
||||||
|
@ -11,16 +11,12 @@ module HTTPX
|
|||||||
|
|
||||||
interface _RetriesOptions
|
interface _RetriesOptions
|
||||||
def retry_after: () -> Numeric?
|
def retry_after: () -> Numeric?
|
||||||
def retry_after=: (Numeric) -> Numeric
|
|
||||||
|
|
||||||
def max_retries: () -> Integer?
|
def max_retries: () -> Integer?
|
||||||
def max_retries=: (int) -> Integer
|
|
||||||
|
|
||||||
def retry_change_requests: () -> bool?
|
def retry_change_requests: () -> boolish
|
||||||
def retry_change_requests=: (bool) -> bool
|
|
||||||
|
|
||||||
def retry_on: () -> _RetryCallback?
|
def retry_on: () -> _RetryCallback?
|
||||||
def retry_on=: (_RetryCallback) -> _RetryCallback
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _RetriesOptions)
|
def self.extra_options: (Options) -> (Options & _RetriesOptions)
|
||||||
|
@ -7,7 +7,6 @@ module HTTPX
|
|||||||
|
|
||||||
interface _UpgradeOptions
|
interface _UpgradeOptions
|
||||||
def upgrade_handlers: () -> handlers_registry?
|
def upgrade_handlers: () -> handlers_registry?
|
||||||
def upgrade_handlers=: (handlers_registry) -> handlers_registry
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options: (Options) -> (Options & _UpgradeOptions)
|
def self.extra_options: (Options) -> (Options & _UpgradeOptions)
|
||||||
|
@ -107,6 +107,7 @@ class OptionsTest < Minitest::Test
|
|||||||
:request_body_class => bar.request_body_class,
|
:request_body_class => bar.request_body_class,
|
||||||
:response_body_class => bar.response_body_class,
|
:response_body_class => bar.response_body_class,
|
||||||
:connection_class => bar.connection_class,
|
:connection_class => bar.connection_class,
|
||||||
|
:options_class => bar.options_class,
|
||||||
:transport => nil,
|
:transport => nil,
|
||||||
:transport_options => nil,
|
:transport_options => nil,
|
||||||
:addresses => nil,
|
:addresses => nil,
|
||||||
|
@ -169,6 +169,11 @@ class SessionTest < Minitest::Test
|
|||||||
self.class.foo
|
self.class.foo
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
self::OptionsMethods = Module.new do
|
||||||
|
def option_foo(v)
|
||||||
|
v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.load_dependencies(mod)
|
def self.load_dependencies(mod)
|
||||||
mod.__send__(:include, Module.new do
|
mod.__send__(:include, Module.new do
|
||||||
@ -179,9 +184,7 @@ class SessionTest < Minitest::Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.extra_options(options)
|
def self.extra_options(options)
|
||||||
Class.new(options.class) do
|
options.merge(foo: "options-foo")
|
||||||
def_option(:foo)
|
|
||||||
end.new(options).merge(foo: "options-foo")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.configure(mod)
|
def self.configure(mod)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user