Fix duplication of parameters in qeuery string
[arvados.git] / lib / google / api_client / request.rb
index ce2f85438b645d4aa019d634bb4d0ec05e36c393..9a08c2a5834f36b302e33317de866e713c0eed0e 100644 (file)
@@ -19,6 +19,7 @@ require 'compat/multi_json'
 require 'addressable/uri'
 require 'stringio'
 require 'google/api_client/discovery'
+require 'google/api_client/logging'
 
 module Google
   class APIClient
@@ -26,6 +27,8 @@ module Google
     ##
     # Represents an API request.
     class Request
+      include Google::APIClient::Logging
+      
       MULTIPART_BOUNDARY = "-----------RubyApiMultipartPost".freeze
 
       # @return [Hash] Request parameters
@@ -151,14 +154,19 @@ module Google
       # @return [Google::APIClient::Result]
       #   result of API request
       def send(connection)
-        http_response = connection.app.call(self.to_env(connection))
+        env = self.to_env(connection)
+        logger.debug  { "#{self.class} Sending API request #{env[:method]} #{env[:url].to_s} #{env[:request_headers]}" }
+        http_response = connection.app.call(env)
         result = self.process_http_response(http_response)
 
+        logger.debug { "#{self.class} Result: #{result.status} #{result.headers}" }
+
         # Resumamble slightly different than other upload protocols in that it requires at least
         # 2 requests.
         if self.upload_type == 'resumable'
           upload =  result.resumable_upload
           unless upload.complete?
+            logger.debug { "#{self.class} Sending upload body" }
             result = upload.send(connection)
           end
         end
@@ -173,14 +181,15 @@ module Google
       # @return [Array<(Symbol, Addressable::URI, Hash, [#read,#to_str])>]
       def to_http_request
         request = (
-          if self.uri
+          if self.api_method
+            self.api_method.generate_request(self.parameters, self.body, self.headers)
+          elsif self.uri
             unless self.parameters.empty?
               self.uri.query = Addressable::URI.form_encode(self.parameters)
             end
             [self.http_method, self.uri.to_s, self.headers, self.body]
-          else
-            self.api_method.generate_request(self.parameters, self.body, self.headers)
           end)
+        return request
       end
 
       ##
@@ -219,7 +228,7 @@ module Google
       def to_env(connection)
         method, uri, headers, body = self.to_http_request
         http_request = connection.build_request(method) do |req|
-          req.url(uri)
+          req.url(uri.to_s)
           req.headers.update(headers)
           req.body = body
         end