def request(*args, &block)
conf = {
:method => (args[0] || 'get').to_sym,
:path => (args[1]=~/^http/) ? args[1] : "#{api_uri.to_s}#{args[1]}",
:query_args => args[2] || {},
:form_data => args[3] || {},
:timeout => args[4] || 45,
:open_timeout => args[5] || 10
}
if conf[:query_args] != {}
conf[:path] += '?' + URI.escape(conf[:query_args].collect{ |key, value| "#{key}=#{value}" }.join('&')).to_s
end
if conf[:method].eql?(:post)
resource = RestClient::Resource.new(conf[:path], :open_timeout => conf[:open_timeout], :timeout => conf[:timeout])
resource.send(:post, conf[:form_data], default_headers.merge(extended_headers)) do |response, request, block|
handle_backend_error(response) if [500, 502].include? response.code
if response.respond_to?('body')
yield response.body if block_given?
else
yield response.to_s if block_given?
end
end
else
resource = RestClient::Resource.new(conf[:path], :open_timeout => conf[:open_timeout], :timeout => conf[:timeout])
resource.send(conf[:method], default_headers.merge(extended_headers)) do |response, request, block|
handle_backend_error(response) if [500, 502].include? response.code
if conf[:method].eql?(:get) and [301, 302, 307].include? response.code
response.follow_redirection(request) do |response, request, block|
if response.respond_to?('body')
yield response.body if block_given?
else
yield response.to_s if block_given?
end
end
else
if response.respond_to?('body')
yield response.body if block_given?
else
yield response.to_s if block_given?
end
end
end
end
end