mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-09-01 00:00:35 -04:00
plugin: allow to extend options as well
This commit is contained in:
parent
f5e6b38d47
commit
0458ee2016
@ -47,11 +47,17 @@ module HTTPX
|
||||
pl.load_dependencies(self, *args, &block) if pl.respond_to?(:load_dependencies)
|
||||
include(pl::InstanceMethods) if defined?(pl::InstanceMethods)
|
||||
extend(pl::ClassMethods) if defined?(pl::ClassMethods)
|
||||
default_options.request_class.send(:include, pl::RequestMethods) if defined?(pl::RequestMethods)
|
||||
if defined?(pl::OptionsMethods) || defined?(pl::OptionsClassMethods)
|
||||
options_klass = Class.new(@default_options.class)
|
||||
options_klass.extend(pl::OptionsClassMethods) if defined?(pl::OptionsClassMethods)
|
||||
options_klass.__send__(:include, pl::OptionsMethods) if defined?(pl::OptionsMethods)
|
||||
@default_options = options_klass.new(default_options)
|
||||
end
|
||||
default_options.request_class.__send__(:include, pl::RequestMethods) if defined?(pl::RequestMethods)
|
||||
default_options.request_class.extend(pl::RequestClassMethods) if defined?(pl::RequestClassMethods)
|
||||
default_options.response_class.send(:include, pl::ResponseMethods) if defined?(pl::ResponseMethods)
|
||||
default_options.response_class.__send__(:include, pl::ResponseMethods) if defined?(pl::ResponseMethods)
|
||||
default_options.response_class.extend(pl::ResponseClassMethods) if defined?(pl::ResponseClassMethods)
|
||||
default_options.headers_class.send(:include, pl::HeadersMethods) if defined?(pl::HeadersMethods)
|
||||
default_options.headers_class.__send__(:include, pl::HeadersMethods) if defined?(pl::HeadersMethods)
|
||||
default_options.headers_class.extend(pl::HeadersClassMethods) if defined?(pl::HeadersClassMethods)
|
||||
pl.configure(self, *args, &block) if pl.respond_to?(:configure)
|
||||
nil
|
||||
|
@ -6,7 +6,14 @@ module HTTPX
|
||||
MAX_RETRIES = 3
|
||||
|
||||
class << self
|
||||
def inherited(klass)
|
||||
super
|
||||
klass.instance_variable_set(:@defined_options, @defined_options.dup)
|
||||
end
|
||||
|
||||
def new(options = {})
|
||||
# let enhanced options go through
|
||||
return options if self == Options && options.class > self
|
||||
return options if options.is_a?(self)
|
||||
super
|
||||
end
|
||||
|
@ -27,6 +27,10 @@ class ClientTest < Minitest::Test
|
||||
assert client.foo == "client-foo", "instance method is unexpected"
|
||||
assert client.respond_to?(:bar), "load and configure didn't work"
|
||||
assert client.bar == "config-load-bar", "load and configure didn't work"
|
||||
|
||||
assert client.respond_to?(:options), "instance methods weren't added"
|
||||
assert client.options.respond_to?(:foo), "options methods weren't added"
|
||||
assert client.options.foo == "options-foo", "option method is unexpected"
|
||||
request = client.request(:get, "/")
|
||||
assert request.respond_to?(:foo), "request methods haven't been added"
|
||||
assert request.foo == "request-foo", "request method is unexpected"
|
||||
@ -51,10 +55,24 @@ class ClientTest < Minitest::Test
|
||||
self.class.foo
|
||||
end
|
||||
|
||||
def options
|
||||
@default_options
|
||||
end
|
||||
|
||||
def response(*args)
|
||||
@default_options.response_class.new(*args)
|
||||
end
|
||||
end
|
||||
self::OptionsClassMethods = Module.new do
|
||||
def foo
|
||||
"options-foo"
|
||||
end
|
||||
end
|
||||
self::OptionsMethods = Module.new do
|
||||
def foo
|
||||
self.class.foo
|
||||
end
|
||||
end
|
||||
self::RequestClassMethods = Module.new do
|
||||
def foo
|
||||
'request-foo'
|
||||
|
Loading…
x
Reference in New Issue
Block a user