From 0b49c3fd2e11c63d0b778c2867499bfa7ec6ae1f Mon Sep 17 00:00:00 2001 From: Bob Aman Date: Wed, 5 Jan 2011 01:09:52 +0000 Subject: [PATCH] Added User-Agent header. git-svn-id: https://google-api-ruby-client.googlecode.com/svn/trunk@107 c1d61fac-ed7f-fcc1-18f7-ff78120a04ef --- lib/google/api_client.rb | 43 ++++++++++++++++++++++++++++++++-- spec/google/api_client_spec.rb | 39 ++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/lib/google/api_client.rb b/lib/google/api_client.rb index 32da5f9eb..78eeb351c 100644 --- a/lib/google/api_client.rb +++ b/lib/google/api_client.rb @@ -32,7 +32,9 @@ module Google def initialize(options={}) @options = { - # TODO: What configuration options need to go here? + :user_agent => ( + 'google-api-ruby-client/' + Google::APIClient::VERSION::STRING + ) }.merge(options) # Force immediate type-checking and short-cut resolution self.parser @@ -255,6 +257,29 @@ module Google end).sort.last end + ## + # Returns the user agent used by the client. + # + # @return [String] + # The user agent string used in the User-Agent header. + def user_agent + return @options[:user_agent] + end + + ## + # Sets the user agent used by the client. + # + # @param [String, #to_str] new_user_agent + # The new user agent string to use in the User-Agent header. + def user_agent=(new_user_agent) + unless new_user_agent == nil || new_user_agent.respond_to?(:to_str) + raise TypeError, "Expected String, got #{new_user_agent.class}." + end + new_user_agent = new_user_agent.to_str unless new_user_agent == nil + @options[:user_agent] = new_user_agent + return self.user_agent + end + ## # Generates a request. # @@ -371,7 +396,21 @@ module Google # # @return [Array] The response from the server. def transmit_request(request, adapter=self.http_adapter) - ::HTTPAdapter.transmit(request, adapter) + if self.user_agent != nil + # If there's no User-Agent header, set one. + method, uri, headers, body = request + unless headers.kind_of?(Enumerable) + # We need to use some Enumerable methods, relying on the presence of + # the #each method. + class <