This commit is contained in:
		
							parent
							
								
									489378db58
								
							
						
					
					
						commit
						97ff7f4d9a
					
				|  | @ -55,8 +55,12 @@ module Google | ||||||
|           query[FIELDS_PARAM] = normalize_fields_param(query[FIELDS_PARAM]) if query.key?(FIELDS_PARAM) |           query[FIELDS_PARAM] = normalize_fields_param(query[FIELDS_PARAM]) if query.key?(FIELDS_PARAM) | ||||||
|           if request_representation && request_object |           if request_representation && request_object | ||||||
|             header['Content-Type'] ||= JSON_CONTENT_TYPE |             header['Content-Type'] ||= JSON_CONTENT_TYPE | ||||||
|  |             if options && options.skip_serialization | ||||||
|  |               self.body = request_object | ||||||
|  |             else | ||||||
|               self.body = request_representation.new(request_object).to_json(user_options: { skip_undefined: true }) |               self.body = request_representation.new(request_object).to_json(user_options: { skip_undefined: true }) | ||||||
|             end |             end | ||||||
|  |           end | ||||||
|           super |           super | ||||||
|         end |         end | ||||||
| 
 | 
 | ||||||
|  | @ -71,6 +75,7 @@ module Google | ||||||
|         # noinspection RubyUnusedLocalVariable |         # noinspection RubyUnusedLocalVariable | ||||||
|         def decode_response_body(content_type, body) |         def decode_response_body(content_type, body) | ||||||
|           return super unless response_representation |           return super unless response_representation | ||||||
|  |           return super if options && options.skip_deserialization | ||||||
|           return super if content_type.nil? |           return super if content_type.nil? | ||||||
|           return nil unless content_type.start_with?(JSON_CONTENT_TYPE) |           return nil unless content_type.start_with?(JSON_CONTENT_TYPE) | ||||||
|           instance = response_class.new |           instance = response_class.new | ||||||
|  |  | ||||||
|  | @ -156,10 +156,7 @@ module Google | ||||||
|             @form_encoded = false |             @form_encoded = false | ||||||
|           end |           end | ||||||
| 
 | 
 | ||||||
|           unless body |           self.body = '' unless self.body | ||||||
|             self.header['Content-Type'] = 'application/json' |  | ||||||
|             self.header['Content-Length'] = 0 |  | ||||||
|           end |  | ||||||
| 
 | 
 | ||||||
|         end |         end | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -27,7 +27,9 @@ module Google | ||||||
|       :header, |       :header, | ||||||
|       :timeout_sec, |       :timeout_sec, | ||||||
|       :open_timeout_sec, |       :open_timeout_sec, | ||||||
|       :normalize_unicode) |       :normalize_unicode, | ||||||
|  |       :skip_serialization, | ||||||
|  |       :skip_deserialization) | ||||||
| 
 | 
 | ||||||
|     # General client options |     # General client options | ||||||
|     class ClientOptions |     class ClientOptions | ||||||
|  | @ -59,6 +61,10 @@ module Google | ||||||
|       #   @return [Hash<String,String] Additional HTTP headers to include in requests |       #   @return [Hash<String,String] Additional HTTP headers to include in requests | ||||||
|       # @!attribute [rw] normalize_unicode |       # @!attribute [rw] normalize_unicode | ||||||
|       #   @return [Boolean] True if unicode strings should be normalized in path parameters |       #   @return [Boolean] True if unicode strings should be normalized in path parameters | ||||||
|  |       # @!attribute [rw] skip_serialization | ||||||
|  |       #   @return [Boolean] True if body object should be treated as raw text instead of an object. | ||||||
|  |       # @!attribute [rw] skip_deserialization | ||||||
|  |       #   @return [Boolean] True if response should be returned in raw form instead of deserialized. | ||||||
| 
 | 
 | ||||||
|       # Get the default options |       # Get the default options | ||||||
|       # @return [Google::Apis::RequestOptions] |       # @return [Google::Apis::RequestOptions] | ||||||
|  | @ -84,5 +90,7 @@ module Google | ||||||
|     RequestOptions.default.retries = 0 |     RequestOptions.default.retries = 0 | ||||||
|     RequestOptions.default.open_timeout_sec = 20 |     RequestOptions.default.open_timeout_sec = 20 | ||||||
|     RequestOptions.default.normalize_unicode = false |     RequestOptions.default.normalize_unicode = false | ||||||
|  |     RequestOptions.default.skip_serialization = false | ||||||
|  |     RequestOptions.default.skip_deserialization = false | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -63,6 +63,29 @@ RSpec.describe Google::Apis::Core::ApiCommand do | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |   context('with a raw request body') do | ||||||
|  |     let(:command) do | ||||||
|  |       request = model_class.new | ||||||
|  |       command = Google::Apis::Core::ApiCommand.new(:post, 'https://www.googleapis.com/zoo/animals') | ||||||
|  |       command.request_representation = representer_class | ||||||
|  |       command.request_object = %({"value": "hello"}) | ||||||
|  |       command.options.skip_serialization = true | ||||||
|  |       command | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     before(:example) do | ||||||
|  |       stub_request(:post, 'https://www.googleapis.com/zoo/animals') | ||||||
|  |           .to_return(headers: { 'Content-Type' => 'application/json' }, body: %({})) | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     it 'should allow raw JSON if skip_serialization = true' do | ||||||
|  |       command.execute(client) | ||||||
|  |       expect(a_request(:post, 'https://www.googleapis.com/zoo/animals').with do |req| | ||||||
|  |         be_json_eql(%({"value":"hello"})).matches?(req.body) | ||||||
|  |       end).to have_been_made | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|   context('with a JSON response') do |   context('with a JSON response') do | ||||||
|     let(:command) do |     let(:command) do | ||||||
|       command = Google::Apis::Core::ApiCommand.new(:get, 'https://www.googleapis.com/zoo/animals') |       command = Google::Apis::Core::ApiCommand.new(:get, 'https://www.googleapis.com/zoo/animals') | ||||||
|  | @ -85,6 +108,12 @@ RSpec.describe Google::Apis::Core::ApiCommand do | ||||||
|       result = command.execute(client) |       result = command.execute(client) | ||||||
|       expect(result.value).to eql 'hello' |       expect(result.value).to eql 'hello' | ||||||
|     end |     end | ||||||
|  | 
 | ||||||
|  |     it 'should return a raw JSON if skip_deserialization true' do | ||||||
|  |       command.options.skip_deserialization = true | ||||||
|  |       result = command.execute(client) | ||||||
|  |       expect(result).to eql %({"value" : "hello"}) | ||||||
|  |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   context('with an invalid content-type response') do |   context('with an invalid content-type response') do | ||||||
|  |  | ||||||
|  | @ -95,6 +95,10 @@ RSpec.describe Google::Apis::Core::BaseService do | ||||||
| 
 | 
 | ||||||
|   context 'with proxy' do |   context 'with proxy' do | ||||||
| 
 | 
 | ||||||
|  |     after(:example) do | ||||||
|  |       Google::Apis::ClientOptions.default.proxy_url = nil | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|     it 'should allow proxy URLs as strings' do |     it 'should allow proxy URLs as strings' do | ||||||
|       Google::Apis::ClientOptions.default.proxy_url = 'http://gateway.example.com:1234' |       Google::Apis::ClientOptions.default.proxy_url = 'http://gateway.example.com:1234' | ||||||
|       service.client |       service.client | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue