Sha256: 39e7c7fb302f38bd5e203c7c1dc6905f94aa0012174886e077735ebe31b30672

Contents?: true

Size: 1.36 KB

Versions: 7

Compression:

Stored size: 1.36 KB

Contents

module Notifications
  class Client
    class RequestError < StandardError
      attr_reader :code, :body

      def initialize(response)
        @code = response.code
        @body = parse_body(response.body)
        super(build_message)
      end

    private

      def parse_body(body)
        JSON.parse(body)
      rescue JSON::ParserError
        body
      end

      def build_message
        return body if body.is_a?(String)

        error_messages = body.fetch('errors')
                             .map { |e| "#{e.fetch('error')}: #{e.fetch('message')}" }
        error_messages.join(", ")
      end
    end

    class ClientError < RequestError; end
    class BadRequestError < ClientError; end
    class AuthError < ClientError; end
    class NotFoundError < ClientError; end
    class RateLimitError < ClientError; end

    class ServerError < RequestError; end

    module ErrorHandling
      def build_error(response)
        error_class_for_code(response.code.to_i).new(response)
      end

      def error_class_for_code(code)
        case code
        when 400
          BadRequestError
        when 403
          AuthError
        when 404
          NotFoundError
        when 429
          RateLimitError
        when (400..499)
          ClientError
        when (500..599)
          ServerError
        else
          RequestError
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
notifications-ruby-client-6.2.0 lib/notifications/client/request_error.rb
notifications-ruby-client-6.0.0 lib/notifications/client/request_error.rb
notifications-ruby-client-5.4.0 lib/notifications/client/request_error.rb
notifications-ruby-client-5.3.0 lib/notifications/client/request_error.rb
notifications-ruby-client-5.2.0 lib/notifications/client/request_error.rb
notifications-ruby-client-5.1.2 lib/notifications/client/request_error.rb
notifications-ruby-client-5.1.1 lib/notifications/client/request_error.rb