Sha256: 625a528dea45870ea71bf70de1dcb9349002b6e891c65e3fcb45999783ee9442

Contents?: true

Size: 975 Bytes

Versions: 10

Compression:

Stored size: 975 Bytes

Contents

# frozen_string_literal: true

module Uploadcare
  module Concerns
    # Wrapper for responses
    # raises errors instead of returning monads
    module UploadErrorHandler
      include Exception

      # Extension of ApiStruct's failure method
      #
      # Raises errors instead of returning falsey objects
      # @see https://github.com/rubygarage/api_struct/blob/master/lib/api_struct/client.rb#L55
      def failure(response)
        catch_throttling_error(response)
        parsed_response = JSON.parse(response.body.to_s)
        raise RequestError, parsed_response['detail']
      rescue JSON::ParserError
        raise RequestError, response.status
      end

      private

      def catch_throttling_error(response)
        return unless response.code == 429

        retry_after = response.headers['Retry-After'].to_i + 1 || 11
        raise ThrottleError.new(retry_after), "Response throttled, retry #{retry_after} seconds later"
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
uploadcare-ruby-4.2.0 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.3.2 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.3.1 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.3.0 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.2.0 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.1.1 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.1.0 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.1.0.pre.rc1 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.0.5 lib/uploadcare/concern/upload_error_handler.rb
uploadcare-ruby-3.0.3 lib/uploadcare/concern/upload_error_handler.rb