Sha256: a8439ead76d2f376ecdce1750d6dbb6562b646ad97d88e64963633adbe04a469

Contents?: true

Size: 962 Bytes

Versions: 7

Compression:

Stored size: 962 Bytes

Contents

module Billogram
  class Error < StandardError

    class BadRequest < Error; end
    class Unauthorized < Error; end
    class Forbidden < Error; end
    class NotFound < Error; end
    class InternalServerError < Error; end

    def self.from_response(response)
      status  = response.response.code.to_i
      body    = response.body.to_s
      headers = response.headers
      message = error_message(response)

      if klass =  case status
                  when 400      then BadRequest
                  when 401      then Unauthorized
                  when 403      then Forbidden
                  when 404      then NotFound
                  when 500      then InternalServerError
                  else               Billogram::Error
                  end
        klass.new(message)
      end
    end

    private

    def self.error_message(response)
      if data = response["data"]
        data.fetch("message", "")
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
billogram-0.4.0 lib/billogram/error.rb
billogram-0.3.6 lib/billogram/error.rb
billogram-0.3.5 lib/billogram/error.rb
billogram-0.3.4 lib/billogram/error.rb
billogram-0.3.3 lib/billogram/error.rb
billogram-0.3.2 lib/billogram/error.rb
billogram-0.3.1 lib/billogram/error.rb