Begin consolidation of request building in reference. Further changes coming to simpl...
authorSteven Bazyl <sqrrrl@gmail.com>
Wed, 5 Sep 2012 21:56:52 +0000 (14:56 -0700)
committerSteven Bazyl <sqrrrl@gmail.com>
Wed, 5 Sep 2012 21:56:52 +0000 (14:56 -0700)
lib/google/api_client.rb
lib/google/api_client/batch.rb
lib/google/api_client/discovery/method.rb
lib/google/api_client/reference.rb
lib/google/api_client/result.rb
spec/google/api_client/discovery_spec.rb
spec/google/api_client/result_spec.rb
spec/google/api_client_spec.rb

index 4431a8bd24bfedbc70ac627973f415176d6fc0ee..ddf70a12f682ef821598cd9339be39a983b78e64 100644 (file)
@@ -464,6 +464,31 @@ module Google
       return nil
     end
 
+    def normalize_api_method(options)
+      method = options[:api_method]
+      version = options[:version]
+      if method.kind_of?(Google::APIClient::Method) || method == nil
+        return method
+      elsif method.respond_to?(:to_str) || method.kind_of?(Symbol)
+        # This method of guessing the API is unreliable. This will fail for
+        # APIs where the first segment of the RPC name does not match the
+        # service name. However, this is a fallback mechanism anyway.
+        # Developers should be passing in a reference to the method, rather
+        # than passing in a string or symbol. This should raise an error
+        # in the case of a mismatch.
+        method = method.to_s        
+        api = method[/^([^.]+)\./, 1]
+        api_method = self.discovered_method(method, api, version)
+        if api_method.nil?
+          raise ArgumentError, "API method could not be found."
+        end
+        return api_method
+      else
+        raise TypeError,
+          "Expected Google::APIClient::Method, got #{new_api_method.class}."
+      end
+    end
+
     ##
     # Generates a request.
     #
@@ -482,7 +507,7 @@ module Google
     #   `true` if the request must be signed or somehow
     #   authenticated, `false` otherwise.
     #
-    # @return [Faraday::Request] The generated request.
+    # @return [Google::APIClient::Reference] The generated request.
     #
     # @example
     #   request = client.generate_request(
@@ -501,36 +526,9 @@ module Google
         :user_ip => self.user_ip,
         :connection => Faraday.default_connection
       }.merge(options)
-
-      # The Reference object is going to need this to do method ID lookups.
-      options[:client] = self
-      # The default value for the :authenticated option depends on whether an
-      # authorization mechanism has been set.
-      if options[:authorization]
-        options = {:authenticated => true}.merge(options)
-      else
-        options = {:authenticated => false}.merge(options)
-      end
-      reference = Google::APIClient::Reference.new(options)
-      request = reference.to_request
-      if options[:authenticated] && options[:authorization].respond_to?(:generate_authenticated_request)
-        request = options[:authorization].generate_authenticated_request(
-          :request => request,
-          :connection => options[:connection]
-        )
-      end
-      return request
-    end
-
-    ##
-    # Signs a request using the current authorization mechanism.
-    #
-    # @param [Hash] options a customizable set of options
-    #
-    # @return [Faraday::Request] The signed or otherwise authenticated request.
-    # @deprecated No longer used internally
-    def generate_authenticated_request(options={})
-      return authorization.generate_authenticated_request(options)
+      
+      options[:api_method] = self.normalize_api_method(options)
+      return Google::APIClient::Reference.new(options)
     end
 
     ##
@@ -538,81 +536,14 @@ module Google
     #
     # @option options [Array, Faraday::Request] :request
     #   The HTTP request to transmit.
-    # @option options [String, Symbol] :method
-    #   The method for the HTTP request.
-    # @option options [String, Addressable::URI] :uri
-    #   The URI for the HTTP request.
-    # @option options [Array, Hash] :headers
-    #   The headers for the HTTP request.
-    # @option options [String] :body
-    #   The body for the HTTP request.
     # @option options [Faraday::Connection] :connection
     #   The HTTP connection to use.
     #
     # @return [Faraday::Response] The response from the server.
     def transmit(options={})
       options[:connection] ||= Faraday.default_connection
-      if options[:request]
-        if options[:request].kind_of?(Array)
-          method, uri, headers, body = options[:request]
-        elsif options[:request].kind_of?(Faraday::Request)
-          unless options[:connection]
-            raise ArgumentError,
-              "Faraday::Request used, requires a connection to be provided."
-          end
-          method = options[:request].method.to_s.downcase.to_sym
-          uri = options[:connection].build_url(
-            options[:request].path, options[:request].params
-          )
-          headers = options[:request].headers || {}
-          body = options[:request].body || ''
-        end
-      else
-        method = options[:method] || :get
-        uri = options[:uri]
-        headers = options[:headers] || []
-        body = options[:body] || ''
-      end
-      headers = headers.to_a if headers.kind_of?(Hash)
-      request_components = {
-        :method => method,
-        :uri => uri,
-        :headers => headers,
-        :body => body
-      }
-      # Verify that we have all pieces required to transmit an HTTP request
-      request_components.each do |(key, value)|
-        unless value
-          raise ArgumentError, "Missing :#{key} parameter."
-        end
-      end
-
-      if self.user_agent != nil
-        # If there's no User-Agent header, set one.
-        unless headers.kind_of?(Enumerable)
-          # We need to use some Enumerable methods, relying on the presence of
-          # the #each method.
-          class << headers
-            include Enumerable
-          end
-        end
-        if self.user_agent.kind_of?(String)
-          unless headers.any? { |k, v| k.downcase == 'User-Agent'.downcase }
-            headers = headers.to_a.insert(0, ['User-Agent', self.user_agent])
-          end
-        elsif self.user_agent != nil
-          raise TypeError,
-            "Expected User-Agent to be String, got #{self.user_agent.class}"
-        end
-      end
-
-      request = options[:connection].build_request(
-        method.to_s.downcase.to_sym
-      ) do |req|
-        req.url(Addressable::URI.parse(uri).normalize.to_s)
-        req.headers = Faraday::Utils::Headers.new(headers)
-        req.body = body
-      end
+      request = options[:request]
+      request['User-Agent'] ||= '' + self.user_agent unless self.user_agent.nil?
       request_env = request.to_env(options[:connection])
       response = options[:connection].app.call(request_env)
       return response
@@ -662,37 +593,14 @@ module Google
           params.size == 1
         batch = params.pop
         options = batch.options
-        options[:connection] ||= Faraday.default_connection
-        http_request = batch.to_http_request
-        request = nil
-
-        if @authorization
-          method, uri, headers, body = http_request
-          method = method.to_s.downcase.to_sym
-
-          faraday_request = options[:connection].build_request(
-            method.to_s.downcase.to_sym
-          ) do |req|
-            req.url(Addressable::URI.parse(uri).normalize.to_s)
-            req.headers = Faraday::Utils::Headers.new(headers)
-            req.body = body
-          end
-
-          request = {
-            :request => self.generate_authenticated_request(
-              :request => faraday_request,
-              :connection => options[:connection]
-            ),
-            :connection => options[:connection]
-          }
-        else
-          request = {
-            :request => http_request,
-            :connection => options[:connection]
-          }
-        end
-
-        response = self.transmit(request)
+        method, uri, headers, body = batch.to_http_request
+        reference = self.generate_request({
+          :uri => uri,
+          :http_method => method,
+          :headers => headers,
+          :body => body
+        }.merge(options))        
+        response = self.transmit(:request => reference.to_http_request, :connection => options[:connection])
         batch.process_response(response)
         return nil
       else
@@ -711,14 +619,13 @@ module Google
         options[:body] = params.shift if params.size > 0
         options[:headers] = params.shift if params.size > 0
         options[:client] = self
-        options[:connection] ||= Faraday.default_connection
-        reference = Google::APIClient::Reference.new(options)
-        request = self.generate_request(reference)
+        reference = self.generate_request(options)
         response = self.transmit(
-          :request => request,
+          :request => reference.to_http_request,
           :connection => options[:connection]
         )
-        return Google::APIClient::Result.new(reference, request, response)
+        result = Google::APIClient::Result.new(reference, response)
+        return result
       end
     end
 
index 72e8e637a04645d6fad317c96ff57254e644261c..6617e5225756386ec265a25a6314975a36423cf2 100644 (file)
@@ -121,7 +121,7 @@ module Google
           call_response = deserialize_call_response(part)
           callback = @callbacks[call_response.call_id]
           call = @calls[call_response.call_id]
-          result = Google::APIClient::Result.new(call, nil, call_response)
+          result = Google::APIClient::Result.new(call, call_response)
           callback.call(result) if callback
         end
       end
@@ -196,7 +196,7 @@ module Google
       #
       # @return [String] The request as a string in application/http format.
       def serialize_call(call)
-        http_request = call.to_request
+        http_request = call.to_http_request
         method = http_request.method.to_s.upcase
         path = http_request.path.to_s
         status_line = method + " " + path + " HTTP/1.1"
index dc69609d8921b4f45ba57e6a1067722f33983e7d..4af5ae7a430e960f914247ca49ac75198fbae242 100644 (file)
@@ -224,13 +224,6 @@ module Google
       # @return [Array] The generated HTTP request.
       def generate_request(parameters={}, body='', headers=[], options={})
         options[:connection] ||= Faraday.default_connection
-        if body.respond_to?(:string)
-          body = body.string
-        elsif body.respond_to?(:to_str)
-          body = body.to_str
-        else
-          raise TypeError, "Expected String or StringIO, got #{body.class}."
-        end
         if !headers.kind_of?(Array) && !headers.kind_of?(Hash)
           raise TypeError, "Expected Hash or Array, got #{headers.class}."
         end
index 14ab24ca34f15700f62c55b04d23adddaf94bcef..4bf41f4e40826992b9a0fce3427057fa2dd1cfe3 100644 (file)
@@ -12,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
 require 'faraday'
 require 'faraday/utils'
 require 'multi_json'
@@ -29,84 +28,20 @@ module Google
       MULTIPART_BOUNDARY = "-----------RubyApiMultipartPost".freeze
 
       def initialize(options={})
-        # We only need this to do lookups on method ID String values
-        # It's optional, but method ID lookups will fail if the client is
-        # omitted.
-        @client = options[:client]
-        @version = options[:version] || 'v1'
 
         self.connection = options[:connection] || Faraday.default_connection
         self.authorization = options[:authorization]
         self.api_method = options[:api_method]
+        
         self.parameters = options[:parameters] || {}
         # These parameters are handled differently because they're not
         # parameters to the API method, but rather to the API system.
-        if self.parameters.kind_of?(Array)
-          if options[:key]
-            self.parameters.reject! { |k, _| k == 'key' }
-            self.parameters << ['key', options[:key]]
-          end
-          if options[:user_ip]
-            self.parameters.reject! { |k, _| k == 'userIp' }
-            self.parameters << ['userIp', options[:user_ip]]
-          end
-        elsif self.parameters.kind_of?(Hash)
-          self.parameters['key'] ||= options[:key] if options[:key]
-          self.parameters['userIp'] ||= options[:user_ip] if options[:user_ip]
-          # Convert to Array, because they're easier to work with when
-          # repeated parameters are an issue.
-          self.parameters = self.parameters.to_a
-        else
-          raise TypeError,
-            "Expected Array or Hash, got #{self.parameters.class}."
-        end
+        self.parameters['key'] ||= options[:key] if options[:key]
+        self.parameters['userIp'] ||= options[:user_ip] if options[:user_ip]
+
         self.headers = options[:headers] || {}
         if options[:media]
-          self.media = options[:media]
-          upload_type = self.parameters.find { |(k, _)| ['uploadType', 'upload_type'].include?(k) }.last
-          case upload_type
-          when "media"
-            if options[:body] || options[:body_object]
-              raise ArgumentError,
-                "Can not specify body & body object for simple uploads."
-            end
-            self.headers['Content-Type'] ||= self.media.content_type
-            self.body = self.media
-          when "multipart"
-            unless options[:body_object]
-              raise ArgumentError, "Multipart requested but no body object."
-            end
-            # This is all a bit of a hack due to Signet requiring body to be a
-            # string. Ideally, update Signet to delay serialization so we can
-            # just pass streams all the way down through to the HTTP library.
-            metadata = StringIO.new(serialize_body(options[:body_object]))
-            env = {
-              :request_headers => {
-                'Content-Type' =>
-                  "multipart/related;boundary=#{MULTIPART_BOUNDARY}"
-              },
-              :request => {:boundary => MULTIPART_BOUNDARY}
-            }
-            multipart = Faraday::Request::Multipart.new
-            self.body = multipart.create_multipart(env, [
-              [nil, Faraday::UploadIO.new(
-                metadata, 'application/json', 'file.json'
-              )],
-              [nil, self.media]])
-            self.headers.update(env[:request_headers])
-          when "resumable"
-            file_length = self.media.length
-            self.headers['X-Upload-Content-Type'] = self.media.content_type
-            self.headers['X-Upload-Content-Length'] = file_length.to_s
-            if options[:body_object]
-              self.headers['Content-Type'] ||= 'application/json'
-              self.body = serialize_body(options[:body_object])
-            else
-              self.body = ''
-            end
-          else
-            raise ArgumentError, "Invalid uploadType for media."
-          end
+          self.initialize_media_upload
         elsif options[:body]
           self.body = options[:body]
         elsif options[:body_object]
@@ -119,15 +54,49 @@ module Google
           self.http_method = options[:http_method] || 'GET'
           self.uri = options[:uri]
           unless self.parameters.empty?
-            query_values = (self.uri.query_values(Array) || [])
-            self.uri.query = Addressable::URI.form_encode(
-              (query_values + self.parameters).sort
-            )
-            self.uri.query = nil if self.uri.query == ""
+            self.uri.query = Addressable::URI.form_encode(self.parameters)
           end
         end
       end
 
+      def initialize_media_upload
+        self.media = options[:media]
+        case self.upload_type
+        when "media"
+          if options[:body] || options[:body_object] 
+            raise ArgumentError, "Can not specify body & body object for simple uploads"
+          end
+          self.headers['Content-Type'] ||= self.media.content_type
+          self.body = self.media
+        when "multipart"
+          unless options[:body_object] 
+            raise ArgumentError, "Multipart requested but no body object"              
+          end
+          metadata = StringIO.new(serialize_body(options[:body_object]))
+          env = {
+            :request_headers => {'Content-Type' => "multipart/related;boundary=#{MULTIPART_BOUNDARY}"},
+            :request => { :boundary => MULTIPART_BOUNDARY }
+          }
+          multipart = Faraday::Request::Multipart.new
+          self.body = multipart.create_multipart(env, [
+            [nil,Faraday::UploadIO.new(metadata, 'application/json', 'file.json')], 
+            [nil, self.media]])
+          self.headers.update(env[:request_headers])
+        when "resumable"
+          file_length = self.media.length
+          self.headers['X-Upload-Content-Type'] = self.media.content_type
+          self.headers['X-Upload-Content-Length'] = file_length.to_s
+          if options[:body_object]
+            self.headers['Content-Type'] ||= 'application/json'
+            self.body = serialize_body(options[:body_object]) 
+          else
+            self.body = ''
+          end
+        else
+          raise ArgumentError, "Invalid uploadType for media"
+        end
+      end
+
       def serialize_body(body)
         return body.to_json if body.respond_to?(:to_json)
         return MultiJson.dump(options[:body_object].to_hash) if body.respond_to?(:to_hash)
@@ -142,6 +111,10 @@ module Google
       def media=(media)
         @media = (media)
       end
+      
+      def upload_type
+        return self.parameters['uploadType'] || self.parameters['upload_type']
+      end
 
       def authorization
         return @authorization
@@ -172,29 +145,6 @@ module Google
         if new_api_method.kind_of?(Google::APIClient::Method) ||
             new_api_method == nil
           @api_method = new_api_method
-        elsif new_api_method.respond_to?(:to_str) ||
-            new_api_method.kind_of?(Symbol)
-          unless @client
-            raise ArgumentError,
-              "API method lookup impossible without client instance."
-          end
-          new_api_method = new_api_method.to_s
-          # This method of guessing the API is unreliable. This will fail for
-          # APIs where the first segment of the RPC name does not match the
-          # service name. However, this is a fallback mechanism anyway.
-          # Developers should be passing in a reference to the method, rather
-          # than passing in a string or symbol. This should raise an error
-          # in the case of a mismatch.
-          api = new_api_method[/^([^.]+)\./, 1]
-          @api_method = @client.discovered_method(
-            new_api_method, api, @version
-          )
-          if @api_method
-            # Ditch the client reference, we won't need it again.
-            @client = nil
-          else
-            raise ArgumentError, "API method could not be found."
-          end
         else
           raise TypeError,
             "Expected Google::APIClient::Method, got #{new_api_method.class}."
@@ -206,8 +156,7 @@ module Google
       end
 
       def parameters=(new_parameters)
-        # No type-checking needed, the Method class handles this.
-        @parameters = new_parameters
+        @parameters = Hash[new_parameters]
       end
 
       def body
@@ -215,19 +164,7 @@ module Google
       end
 
       def body=(new_body)
-        if new_body.respond_to?(:to_str)
-          @body = new_body.to_str
-        elsif new_body.respond_to?(:read)
-          @body = new_body.read()
-        elsif new_body.respond_to?(:inject)
-          @body = (new_body.inject(StringIO.new) do |accu, chunk|
-            accu.write(chunk)
-            accu
-          end).string
-        else
-          raise TypeError,
-            "Expected body to be String, IO, or Enumerable chunks."
-        end
+        @body = new_body
       end
 
       def headers
@@ -248,9 +185,9 @@ module Google
 
       def http_method=(new_http_method)
         if new_http_method.kind_of?(Symbol)
-          @http_method = new_http_method.to_s.upcase
+          @http_method = new_http_method.to_s.downcase.to_sym
         elsif new_http_method.respond_to?(:to_str)
-          @http_method = new_http_method.to_str.upcase
+          @http_method = new_http_method.to_s.downcase.to_sym
         else
           raise TypeError,
             "Expected String or Symbol, got #{new_http_method.class}."
@@ -265,21 +202,27 @@ module Google
         @uri = Addressable::URI.parse(new_uri)
       end
 
-      def to_request
-        if self.api_method
-          return self.api_method.generate_request(
-            self.parameters, self.body, self.headers,
+      def to_http_request
+        request = ( 
+          if self.api_method
+            self.api_method.generate_request(
+              self.parameters, self.body, self.headers, :connection => self.connection
+            )
+          else
+            self.connection.build_request(self.http_method) do |req|
+              req.url(self.uri.to_str)
+              req.headers.update(self.headers)
+              req.body = self.body
+            end
+          end)
+        
+        if self.authorization.respond_to?(:generate_authenticated_request)
+          request = self.authorization.generate_authenticated_request(
+            :request => request,
             :connection => self.connection
           )
-        else
-          return self.connection.build_request(
-            self.http_method.to_s.downcase.to_sym
-          ) do |req|
-            req.url(Addressable::URI.parse(self.uri).normalize.to_s)
-            req.headers = Faraday::Utils::Headers.new(self.headers)
-            req.body = self.body
-          end
         end
+        return request
       end
 
       def to_hash
index c169b9c6da6ef5fa2bd936481e90858db4831e5a..f15d1c6a542530044851e07286f0a8f7a78e6244 100644 (file)
@@ -18,16 +18,13 @@ module Google
     ##
     # This class wraps a result returned by an API call.
     class Result
-      def initialize(reference, request, response)
+      def initialize(reference, response)
         @reference = reference
-        @request = request
         @response = response
       end
 
       attr_reader :reference
 
-      attr_reader :request
-
       attr_reader :response
 
       def status
index 530a9206f11a994489b02a986434a8aed25cf27e..4469921c76b30dc3f12bc0b1f8d27af1eb87dfcf 100644 (file)
@@ -91,7 +91,7 @@ describe Google::APIClient do
         :uri => CLIENT.discovery_uri('prediction', 'v1.2'),
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should === (
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should === (
         'https://www.googleapis.com/discovery/v1/apis/prediction/v1.2/rest' +
         '?userIp=127.0.0.1'
       )
@@ -104,7 +104,7 @@ describe Google::APIClient do
         :uri => CLIENT.discovery_uri('prediction', 'v1.2'),
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should === (
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should === (
         'https://www.googleapis.com/discovery/v1/apis/prediction/v1.2/rest' +
         '?key=qwerty'
       )
@@ -119,7 +119,7 @@ describe Google::APIClient do
         :authenticated => false
       )
       Addressable::URI.parse(
-        request.to_env(Faraday.default_connection)[:url]
+        request.to_http_request.to_env(Faraday.default_connection)[:url]
       ).query_values.should == {
         'key' => 'qwerty',
         'userIp' => '127.0.0.1'
@@ -183,8 +183,8 @@ describe Google::APIClient do
         :api_method => @prediction.training.insert,
         :parameters => {'data' => '12345'}
       )
-      request.method.should == :post
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.method.should == :post
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/prediction/v1.2/training?data=12345'
       request.headers.should be_empty
       request.body.should == ''
@@ -195,8 +195,8 @@ describe Google::APIClient do
         :api_method => @prediction.training.insert,
         :parameters => [['data', '1'], ['data','2']]
       )
-      request.method.should == :post
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.method.should == :post
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/prediction/v1.2/training?data=1&data=2'
     end
 
@@ -205,7 +205,7 @@ describe Google::APIClient do
         :api_method => @prediction.training.insert,
         :parameters => {'data' => '12345'}
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/prediction/v1.2/training?data=12345'
     end
 
@@ -214,7 +214,7 @@ describe Google::APIClient do
         :api_method => @prediction.training.insert,
         :parameters => {'data' => '12345'}
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/prediction/v1.2/training?data=12345'
     end
 
@@ -228,7 +228,7 @@ describe Google::APIClient do
         :api_method => prediction_rebase.training.insert,
         :parameters => {'data' => '123'}
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should === (
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should === (
         'https://testing-domain.example.com/' +
         'prediction/v1.2/training?data=123'
       )
@@ -242,8 +242,9 @@ describe Google::APIClient do
         :api_method => @prediction.training.insert,
         :parameters => {'data' => '12345'}
       )
-      request.headers.should have_key('Authorization')
-      request.headers['Authorization'].should =~ /^OAuth/
+      http_request = request.to_http_request
+      http_request.headers.should have_key('Authorization')
+      http_request.headers['Authorization'].should =~ /^OAuth/
     end
 
     it 'should generate OAuth 2 requests' do
@@ -253,8 +254,9 @@ describe Google::APIClient do
         :api_method => @prediction.training.insert,
         :parameters => {'data' => '12345'}
       )
-      request.headers.should have_key('Authorization')
-      request.headers['Authorization'].should =~ /^Bearer/
+      http_request = request.to_http_request
+      http_request.headers.should have_key('Authorization')
+      http_request.headers['Authorization'].should =~ /^Bearer/
     end
 
     it 'should not be able to execute improperly authorized requests' do
@@ -310,7 +312,7 @@ describe Google::APIClient do
         MultiJson.dump({"id" => "bucket/object"}),
         {'Content-Type' => 'application/json'}
       )
-      result.request.headers['Content-Type'].should == 'application/json'
+      result.reference.to_http_request.headers['Content-Type'].should == 'application/json'
     end
   end
 
@@ -357,7 +359,7 @@ describe Google::APIClient do
         },
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should === (
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should === (
         'https://www.googleapis.com/plus/v1/' +
         'people/107807692475771887386/activities/public'
       )
@@ -369,7 +371,7 @@ describe Google::APIClient do
           :api_method => @plus.activities.list,
           :parameters => {'alt' => 'json'},
           :authenticated => false
-        )
+        ).to_http_request
       end).should raise_error(ArgumentError)
     end
 
@@ -381,7 +383,7 @@ describe Google::APIClient do
             'userId' => '107807692475771887386', 'collection' => 'bogus'
           },
           :authenticated => false
-        )
+        ).to_http_request
       end).should raise_error(ArgumentError)
     end
   end
@@ -428,7 +430,7 @@ describe Google::APIClient do
         :api_method => 'latitude.currentLocation.get',
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/latitude/v1/currentLocation'
     end
 
@@ -437,7 +439,7 @@ describe Google::APIClient do
         :api_method => @latitude.current_location.get,
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/latitude/v1/currentLocation'
     end
 
@@ -492,7 +494,7 @@ describe Google::APIClient do
         :api_method => 'moderator.profiles.get',
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/moderator/v1/profiles/@me'
     end
 
@@ -501,7 +503,7 @@ describe Google::APIClient do
         :api_method => @moderator.profiles.get,
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/moderator/v1/profiles/@me'
     end
 
@@ -552,7 +554,7 @@ describe Google::APIClient do
         :api_method => 'adsense.adclients.list',
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/adsense/v1/adclients'
     end
 
@@ -561,7 +563,7 @@ describe Google::APIClient do
         :api_method => @adsense.adclients.list,
         :authenticated => false
       )
-      request.to_env(Faraday.default_connection)[:url].to_s.should ===
+      request.to_http_request.to_env(Faraday.default_connection)[:url].to_s.should ===
         'https://www.googleapis.com/adsense/v1/adclients'
     end
 
@@ -578,7 +580,7 @@ describe Google::APIClient do
         CLIENT.generate_request(
           :api_method => @adsense.reports.generate,
           :authenticated => false
-        )
+        ).to_http_request
       end).should raise_error(ArgumentError)
     end
 
@@ -593,7 +595,7 @@ describe Google::APIClient do
             'metric' => 'PAGE_VIEWS'
           },
           :authenticated => false
-        )
+        ).to_http_request
       end).should_not raise_error
     end
 
@@ -608,7 +610,7 @@ describe Google::APIClient do
             'metric' => 'PAGE_VIEWS'
           },
           :authenticated => false
-        )
+        ).to_http_request
       end).should raise_error(ArgumentError)
     end
 
@@ -638,7 +640,7 @@ describe Google::APIClient do
             'metric' => ['PAGE_VIEWS', 'CLICKS']
           },
           :authenticated => false
-        )
+        ).to_http_request
       end).should raise_error(ArgumentError)
     end
   end
index d7c3326c203911f9820d4d118ac0cab1c9610760..3a7bbf80518953e714f7ca07a3411ff15feab0b8 100644 (file)
@@ -32,7 +32,7 @@ describe Google::APIClient::Result do
           'maxResults' => 20
         }
       })
-      @request = @reference.to_request
+      @request = @reference.to_http_request
 
       # Response stub
       @response = stub("response")
@@ -66,7 +66,7 @@ describe Google::APIClient::Result do
           }
           END_OF_STRING
         )
-        @result = Google::APIClient::Result.new(@reference, @request, @response)
+        @result = Google::APIClient::Result.new(@reference, @response)
       end
 
       it 'should indicate a successful response' do
@@ -81,7 +81,7 @@ describe Google::APIClient::Result do
         reference = @result.next_page
         Hash[reference.parameters].should include('pageToken')
         Hash[reference.parameters]['pageToken'].should == 'NEXT+PAGE+TOKEN'
-        url = reference.to_request.to_env(Faraday.default_connection)[:url]
+        url = reference.to_http_request.to_env(Faraday.default_connection)[:url]
         url.to_s.should include('pageToken=NEXT%2BPAGE%2BTOKEN')
       end
 
@@ -123,7 +123,7 @@ describe Google::APIClient::Result do
           }
           END_OF_STRING
         )
-        @result = Google::APIClient::Result.new(@reference, @request, @response)
+        @result = Google::APIClient::Result.new(@reference, @response)
       end
 
       it 'should not return a next page token' do
@@ -169,7 +169,7 @@ describe Google::APIClient::Result do
          END_OF_STRING
         )
         @response.stub(:status).and_return(400)
-        @result = Google::APIClient::Result.new(@reference, @request, @response)
+        @result = Google::APIClient::Result.new(@reference, @response)
       end
       
       it 'should return error status correctly' do
index 868684cb99be987a130173568edab2d0326db23b..ae25518fbb350f75cffceeeb08ac80cb5dd9f2e9 100644 (file)
@@ -42,9 +42,7 @@ shared_examples_for 'configurable user agent' do
 
   it 'should transmit a User-Agent header when sending requests' do
     client.user_agent = 'Custom User Agent/1.2.3'
-    request = Faraday::Request.new(:get) do |req|
-      req.url('http://www.google.com/')
-    end
+
     stubs = Faraday::Adapter::Test::Stubs.new do |stub|
       stub.get('/') do |env|
         headers = env[:request_headers]
@@ -56,6 +54,9 @@ shared_examples_for 'configurable user agent' do
     connection = Faraday.new(:url => 'https://www.google.com') do |builder|
       builder.adapter(:test, stubs)
     end
+    request = connection.build_request(:get) do |req|
+      req.url('http://www.google.com/')
+    end
     client.transmit(:request => request, :connection => connection)
     stubs.verify_stubbed_calls
   end