Module: Asana::Errors

Included in:
HttpClient::ErrorHandling
Defined in:
lib/asana/errors.rb

Overview

Defines the different errors that the Asana API may throw, which the client code may want to catch.

Constant Summary collapse

APIError =
Note:

This exception should never be raised when there exists a more specific subclass.

A generic, catch-all API error. It contains the whole response object for debugging purposes.

Class.new(StandardError) do
  attr_accessor :response

  def to_s
    'An unknown API error ocurred.'
  end
end
NotAuthorized =

A 401 error. Raised when the credentials used are invalid and the user could not be authenticated.

Class.new(APIError) do
  def to_s
    'A valid API key was not provided with the request, so the API could' \
    ' not associate a user with the request.'
  end
end
Forbidden =

A 403 error. Raised when the user doesn’t have permission to access the requested resource or to perform the requested action on it.

Class.new(APIError) do
  def to_s
    'The API key and request syntax was valid but the server is refusing' \
    'to complete the request. This can happen if you try to read or write' \
    'to objects or properties that the user does not have access to.'
  end
end
NotFound =

A 404 error. Raised when the requested resource doesn’t exist.

Class.new(APIError) do
  def to_s
    'Either the request method and path supplied do not specify a known' \
    'action in the API, or the object specified by the request does not' \
    'exist.'
  end
end
ServerError =

A 500 error. Raised when there is a problem in the Asana API server. It contains a unique phrase that can be used to identify the problem when contacting developer support.

Class.new(APIError) do
  attr_accessor :phrase

  def initialize(phrase)
    @phrase = phrase
  end

  def to_s
    "There has been an error on Asana's end. Use this unique phrase to" \
    'identify the problem when contacting developer support: ' +
    %("#{@phrase}")
  end
end
InvalidRequest =

A 400 error. Raised when the request was malformed or missing some parameters. It contains a list of errors indicating the specific problems.

Class.new(APIError) do
  attr_accessor :errors
  def initialize(errors)
    @errors = errors
  end

  def to_s
    errors.join(', ')
  end
end
RateLimitEnforced =

A 429 error. Raised when the Asana API enforces rate-limiting on the client to avoid overload. It contains the number of seconds to wait before retrying the operation.

Class.new(APIError) do
  attr_accessor :retry_after_seconds
  def initialize(retry_after_seconds)
    @retry_after_seconds = retry_after_seconds
  end

  def to_s
    "Retry your request after #{@retry_after_seconds} seconds."
  end
end