allow client to be loggable; add to change the @default_options thing though

This commit is contained in:
HoneyryderChuck 2018-01-13 17:52:04 +00:00
parent 2a2d5e0b7a
commit 10146be1bc
6 changed files with 18 additions and 14 deletions

View File

@ -36,7 +36,7 @@ module HTTPX
private
def default_options
@default_options || Options.new
@options || Options.new
end
# :nodoc:

View File

@ -2,11 +2,12 @@
module HTTPX
class Client
include Loggable
include Chainable
def initialize(options = {})
@default_options = self.class.default_options.merge(options)
@connection = Connection.new(@default_options)
@options = self.class.default_options.merge(options)
@connection = Connection.new(@options)
@responses = {}
if block_given?
begin
@ -95,8 +96,8 @@ module HTTPX
end
def __build_req(verb, uri, options = {})
rklass = @default_options.request_class
rklass.new(verb, uri, @default_options.merge(options))
rklass = @options.request_class
rklass.new(verb, uri, @options.merge(options))
end
@default_options = Options.new

View File

@ -18,7 +18,7 @@ module HTTPX
keep_open = @keep_open
@keep_open = true
max_redirects = @default_options.max_redirects || MAX_REDIRECTS
max_redirects = @options.max_redirects || MAX_REDIRECTS
requests = __build_reqs(*args, **options)
responses = __send_reqs(*requests)

View File

@ -18,7 +18,7 @@ module HTTPX
upgrade_request.headers["upgrade"] = "h2c"
upgrade_request.headers.add("connection", "upgrade")
upgrade_request.headers.add("connection", "http2-settings")
upgrade_request.headers["http2-settings"] = HTTP2::Client.settings_header(@default_options.http2_settings)
upgrade_request.headers["http2-settings"] = HTTP2::Client.settings_header(@options.http2_settings)
# TODO: validate!
upgrade_response = __send_reqs(*upgrade_request).first

View File

@ -34,7 +34,7 @@ module HTTPX
private
def proxy_params(uri)
return @default_options.proxy if @default_options.proxy
return @options.proxy if @options.proxy
uri = URI(uri).find_proxy
return unless uri
{ uri: uri }
@ -44,16 +44,19 @@ module HTTPX
uri = URI(request.uri)
proxy = proxy_params(uri)
return super unless proxy
@connection.find_channel(proxy) ||
build_proxy_channel(proxy)
@connection.find_channel(proxy) || begin
channel = build_proxy_channel(proxy)
set_channel_callbacks(channel)
channel
end
end
def build_proxy_channel(proxy)
parameters = Parameters.new(**proxy)
uri = parameters.uri
io = TCP.new(uri.host, uri.port, @default_options)
io = TCP.new(uri.host, uri.port, @options)
proxy_type = Parameters.registry(parameters.uri.scheme)
channel = proxy_type.new(io, parameters, @default_options, &method(:on_response))
channel = proxy_type.new(io, parameters, @options, &method(:on_response))
@connection.__send__(:register_channel, channel)
channel
end

View File

@ -49,11 +49,11 @@ class ClientTest < Minitest::Test
end
def options
@default_options
@options
end
def response(*args)
@default_options.response_class.new(*args, @default_options)
@options.response_class.new(*args, @options)
end
end
self::OptionsClassMethods = Module.new do