Sha256: ee8daf292123216b338e3c000ce8b0e9a89a304f768286bdf7f270106d25c4a8

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

require 'json'
module ChatWork
  class ChatWorkError < StandardError

    def self.from_response(status, body)
      hash =
        begin
          JSON.load(body)
        rescue JSON::ParserError => e
          return ChatWork::APIConnectionError.new("Response JSON is broken. #{e.message}: #{body}", e)
        end

      unless hash['errors']
        return APIConnectionError.new("Invalid response #{body}")
      end

      APIError.new(status, hash["errors"])
    end

    attr_reader :status
    attr_reader :error_response

    def initialize(message, status = nil, error_response = nil)
      @status, @error_response = status, error_response
      super(message)
    end
  end

  class APIConnectionError < ChatWorkError
    def self.faraday_error(e)
      new("Connection with ChatWork API server failed. #{e.message}", e)
    end

    attr_reader :original_error

    def initialize(message, original_error)
      @original_error = original_error
      super(message)
    end
  end

  class APIError < ChatWorkError
    attr_reader :errors

    def initilize(message, error_response)
      @errors = error_response["errors"]
      super(error_response["message"], status, error_response)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
chatwork-0.0.5 lib/chatwork/chatwork_error.rb
chatwork-0.0.3 lib/chatwork/chatwork_error.rb