Merge pull request #310 from amitree/master
No longer swallowing errors from block passed to execute
This commit is contained in:
		
						commit
						6c75e89cfe
					
				| 
						 | 
				
			
			@ -91,7 +91,6 @@ module Google
 | 
			
		|||
        # @raise [Google::Apis::AuthorizationError] Authorization is required
 | 
			
		||||
        def execute(client)
 | 
			
		||||
          prepare!
 | 
			
		||||
          proc = block_given? ? Proc.new : nil
 | 
			
		||||
          begin
 | 
			
		||||
            Retriable.retriable tries: options.retries + 1,
 | 
			
		||||
                                base_interval: 1,
 | 
			
		||||
| 
						 | 
				
			
			@ -104,11 +103,19 @@ module Google
 | 
			
		|||
              Retriable.retriable tries: auth_tries,
 | 
			
		||||
                                  on: [Google::Apis::AuthorizationError],
 | 
			
		||||
                                  on_retry: proc { |*| refresh_authorization } do
 | 
			
		||||
                return execute_once(client, &proc)
 | 
			
		||||
                execute_once(client).tap do |result|
 | 
			
		||||
                  if block_given?
 | 
			
		||||
                    yield result, nil
 | 
			
		||||
                  end
 | 
			
		||||
                end
 | 
			
		||||
              end
 | 
			
		||||
            end
 | 
			
		||||
          rescue => e
 | 
			
		||||
            raise e if proc.nil?
 | 
			
		||||
            if block_given?
 | 
			
		||||
              yield nil, e
 | 
			
		||||
            else
 | 
			
		||||
              raise e
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        ensure
 | 
			
		||||
          release!
 | 
			
		||||
| 
						 | 
				
			
			@ -244,12 +251,11 @@ module Google
 | 
			
		|||
        # @private
 | 
			
		||||
        # @param [Hurley::Client] client
 | 
			
		||||
        #   HTTP client
 | 
			
		||||
        # @yield [result, err] Result or error if block supplied
 | 
			
		||||
        # @return [Object]
 | 
			
		||||
        # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
 | 
			
		||||
        # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
 | 
			
		||||
        # @raise [Google::Apis::AuthorizationError] Authorization is required
 | 
			
		||||
        def execute_once(client, &block)
 | 
			
		||||
        def execute_once(client)
 | 
			
		||||
          body.rewind if body.respond_to?(:rewind)
 | 
			
		||||
          begin
 | 
			
		||||
            logger.debug { sprintf('Sending HTTP %s %s', method, url) }
 | 
			
		||||
| 
						 | 
				
			
			@ -264,10 +270,10 @@ module Google
 | 
			
		|||
            logger.debug { response.status_code }
 | 
			
		||||
            logger.debug { response.inspect }
 | 
			
		||||
            response = process_response(response.status_code, response.header, response.body)
 | 
			
		||||
            success(response, &block)
 | 
			
		||||
            success(response)
 | 
			
		||||
          rescue => e
 | 
			
		||||
            logger.debug { sprintf('Caught error %s', e) }
 | 
			
		||||
            error(e, rethrow: true, &block)
 | 
			
		||||
            error(e, rethrow: true)
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -146,10 +146,7 @@ RSpec.describe Google::Apis::Core::HttpCommand do
 | 
			
		|||
 | 
			
		||||
    context('with callbacks') do
 | 
			
		||||
      it 'should return the response body after retries' do
 | 
			
		||||
        expect { |b| command.execute(client, &b) }.to yield_successive_args(
 | 
			
		||||
          [nil, an_instance_of(Google::Apis::ServerError)],
 | 
			
		||||
          [nil, an_instance_of(Google::Apis::ServerError)],
 | 
			
		||||
          ['Hello world', nil])
 | 
			
		||||
        expect { |b| command.execute(client, &b) }.to yield_with_args('Hello world', nil)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -254,6 +251,10 @@ RSpec.describe Google::Apis::Core::HttpCommand do
 | 
			
		|||
    it 'should call block if present' do
 | 
			
		||||
      expect { |b| command.execute(client, &b) }.to yield_with_args(nil, an_instance_of(Google::Apis::ClientError))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'should not swallow errors raised in block' do
 | 
			
		||||
      expect { command.execute(client) { raise "Potatoes detected in tailpipe" } }.to raise_error("Potatoes detected in tailpipe")
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  it 'should send repeated query parameters' do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue