diff --git a/lib/httpx/options.rb b/lib/httpx/options.rb index 12be7642..c1d3ce34 100644 --- a/lib/httpx/options.rb +++ b/lib/httpx/options.rb @@ -146,8 +146,10 @@ module HTTPX end def merge(other) - h1 = to_hash h2 = other.to_hash + return self if h2.empty? + + h1 = to_hash merged = h1.merge(h2) do |k, v1, v2| case k diff --git a/lib/httpx/session.rb b/lib/httpx/session.rb index a5bb1136..7f9dea41 100644 --- a/lib/httpx/session.rb +++ b/lib/httpx/session.rb @@ -5,7 +5,9 @@ module HTTPX include Loggable include Chainable - def initialize(options = {}, &blk) + EMPTY_HASH = {}.freeze + + def initialize(options = EMPTY_HASH, &blk) @options = self.class.default_options.merge(options) @responses = {} @persistent = @options.persistent @@ -36,6 +38,14 @@ module HTTPX responses end + def build_request(verb, uri, options = EMPTY_HASH) + rklass = @options.request_class + request = rklass.new(verb, uri, @options.merge(options).merge(persistent: @persistent)) + request.on(:response, &method(:on_response).curry[request]) + request.on(:promise, &method(:on_promise)) + request + end + private def pool @@ -122,8 +132,8 @@ module HTTPX requests = case args.size when 1 reqs = args.first - reqs.map do |verb, uri| - build_request(verb, uri, request_options) + reqs.map do |verb, uri, opts = EMPTY_HASH| + build_request(verb, uri, request_options.merge(opts)) end when 2, 3 verb, uris = args