Sha256: b8000ab0cce2cdd49ad3b170d037bba59b68f95f53439bbc1375552d7da4a4d7

Contents?: true

Size: 1.9 KB

Versions: 2

Compression:

Stored size: 1.9 KB

Contents

module MailerLite
  # Base MailerLite error.
  class Error < StandardError
    def initialize(msg = nil)
      @message = msg
    end

    # Returns the appropriate MailerLite::Error sublcass based on status and
    # response message.
    #
    # @param response [Faraday::Env] HTTP response.
    #
    # @return [MailerLite::Error]
    def self.from_response(response)
      status = response.status.to_i
      message = error_message(response)

      klass = case status
      when 400 then MailerLite::BadRequest
      when 401 then MailerLite::Unauthorized
      when 404 then MailerLite::NotFound
      when 500 then MailerLite::InternalServerError
      end

      klass.new(message) if klass
    end

    # Returns the appropriate MailerLite error message based on response
    #
    # @param response [Faraday::Env] HTTP response.
    #
    # @return [String] MailerLite error message.
    def self.error_message(response)
      return unless response.body.is_a?(Hash)
      return unless response.body['error']

      message = response.body['error']['message']
      MailerLite::Utils.presence(message)
    end
  end

  # Raised when MailerLite returns a 400 HTTP status code
  class BadRequest < Error
    # Default error message.
    def to_s
      @message || 'Missing a required parameter or calling invalid method'
    end
  end

  # Raised when MailerLite returns a 401 HTTP status code
  class Unauthorized < Error
    # Default error message.
    def to_s
      @message || 'Invalid API key provided'
    end
  end

  # Raised when MailerLite returns a 404 HTTP status code
  class NotFound < Error
    # Default error message.
    def to_s
      @message || "Can't find requested items"
    end
  end

  # Raised when MailerLite returns a 500 HTTP status code
  class InternalServerError < Error
    # Default error message.
    def to_s
      @message || 'The server encountered an unexpected condition'
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mailerlite-1.3.0 lib/mailerlite/error.rb
mailerlite-1.2.0 lib/mailerlite/error.rb