From 01229ff71038431d2e60a278978ca81a614e1091 Mon Sep 17 00:00:00 2001 From: Martin Sarsale Date: Wed, 2 Nov 2011 15:18:03 -0300 Subject: [PATCH 1/2] Accept repeated parameters --- lib/google/api_client/discovery/method.rb | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/google/api_client/discovery/method.rb b/lib/google/api_client/discovery/method.rb index de79bf752..d23f25258 100644 --- a/lib/google/api_client/discovery/method.rb +++ b/lib/google/api_client/discovery/method.rb @@ -112,16 +112,14 @@ module Google def normalize_parameters(parameters={}) # Convert keys to Strings when appropriate if parameters.kind_of?(Hash) || parameters.kind_of?(Array) - # Is a Hash or an Array a better return type? Do we ever need to - # worry about the same parameter being sent twice with different - # values? - parameters = parameters.inject({}) do |accu, (k, v)| + # Returning an array since parameters can be repeated (ie, Adsense Management API) + parameters = parameters.inject([]) do |accu, (k, v)| k = k.to_s if k.kind_of?(Symbol) k = k.to_str if k.respond_to?(:to_str) unless k.kind_of?(String) raise TypeError, "Expected String, got #{k.class}." end - accu[k] = v + accu << [k,v] accu end else @@ -147,7 +145,7 @@ module Google template_variables.include?(k) end if query_parameters.size > 0 - uri.query_values = (uri.query_values || {}).merge(query_parameters) + uri.query_values = (uri.query_values || []) + query_parameters end # Normalization is necessary because of undesirable percent-escaping # during URI template expansion @@ -244,7 +242,7 @@ module Google required_variables = ((self.parameter_descriptions.select do |k, v| v['required'] end).inject({}) { |h,(k,v)| h[k]=v; h }).keys - missing_variables = required_variables - parameters.keys + missing_variables = required_variables - parameters.map(&:first) if missing_variables.size > 0 raise ArgumentError, "Missing required parameters: #{missing_variables.join(', ')}." From ed4742d8d47260cc84d40a42d0d117fcb03bf969 Mon Sep 17 00:00:00 2001 From: Martin Sarsale Date: Thu, 1 Dec 2011 11:04:40 -0300 Subject: [PATCH 2/2] Test for repeated parameters --- spec/google/api_client/discovery_spec.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/spec/google/api_client/discovery_spec.rb b/spec/google/api_client/discovery_spec.rb index d0e38e4db..6d0711abe 100644 --- a/spec/google/api_client/discovery_spec.rb +++ b/spec/google/api_client/discovery_spec.rb @@ -174,7 +174,16 @@ describe Google::APIClient do (headers.inject({}) { |h,(k,v)| h[k]=v; h }).should == {} body.should respond_to(:each) end - + it 'should generate valid requests when repeated parameters are passed' do + request = @client.generate_request( + :api_method => @prediction.training.insert, + :parameters => [['data', '1'],['data','2']] + ) + method, uri, headers, body = request + method.should == 'POST' + uri.should == + 'https://www.googleapis.com/prediction/v1.2/training?data=1&data=2' + end it 'should generate requests against the correct URIs' do request = @client.generate_request( :api_method => @prediction.training.insert,