def new_request(options)
options.reverse_merge!(self.options)
options[:connect_timeout] ||= options[:timeout] || 120
options[:receive_timeout] ||= options[:timeout] || 0
options[:send_timeout] ||= options[:timeout] || 0
options[:timeout] = nil
auth = (options[:auth] || self.auth) unless options[:no_auth]
if auth
auth.to_request(options, self)
end
headers = (self.headers.to_a + (options.delete(:headers) || []).to_a).inject({}) do |h,(k,v)|
v = "application/#{v}" if k == :accept && v.is_a?(Symbol)
h[k.to_s.downcase.gsub(/_/, '-')] = v
h
end
modifiers = []
version = options.delete(:api_version) || current_api_version
modifiers << ";version=#{version}" if version
query = options.delete(:query) || {}
payload = options.delete(:payload)
if options[:method].to_s.upcase == 'GET'
query = payload
payload = nil
else
headers['content-type'] ||= begin
payload = payload.to_json unless payload.nil? || payload.is_a?(String)
"application/json#{modifiers.join}"
end
end
query = nil if query.blank?
if headers['accept'] && modifiers.present?
headers['accept'] << modifiers.join
end
options.delete(:lazy_auth)
options.delete(:no_auth)
options.delete(:accept)
args = [options.delete(:method), options.delete(:url), query, payload, headers, true]
[httpclient_for(options, auth), args]
end