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] || {}
}
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)
RestClient.send(:post, conf[:path], conf[:form_data], default_headers) do |response, request, block|
handle_backend_error(response) if response.code.eql?(500)
if response.respond_to?('body')
yield response.body if block_given?
else
yield response.to_s if block_given?
end
end
else
RestClient.send(conf[:method], conf[:path], default_headers) do |response, request, block|
handle_backend_error(response) if response.code.eql?(500)
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