Module: Nylas

Defined in:
lib/file.rb,
lib/draft.rb,
lib/event.rb,
lib/label.rb,
lib/nylas.rb,
lib/folder.rb,
lib/mixins.rb,
lib/account.rb,
lib/contact.rb,
lib/message.rb,
lib/version.rb,
lib/calendar.rb,
lib/api_thread.rb,
lib/parameters.rb,
lib/api_account.rb,
lib/restful_model.rb,
lib/time_attr_accessor.rb,
lib/restful_model_collection.rb

Defined Under Namespace

Modules: Parameters, ReadUnreadMethods, TimeAttrAccessor Classes: API, APIAccount, APIError, Account, Calendar, Contact, Draft, Event, ExpandedMessage, File, Folder, ManagementModelCollection, Message, RestfulModel, RestfulModelCollection, Thread

Constant Summary collapse

Error =
Class.new(::StandardError)
NoAuthToken =
Class.new(Error)
UnexpectedAccountAction =
Class.new(Error)
UnexpectedResponse =
Class.new(Error)
AccessDenied =
Class.new(APIError)
ResourceNotFound =
Class.new(APIError)
InvalidRequest =
Class.new(APIError)
MessageRejected =
Class.new(APIError)
SendingQuotaExceeded =
Class.new(APIError)
ServiceUnavailable =
Class.new(APIError)
BadGateway =
Class.new(APIError)
InternalError =
Class.new(APIError)
MailProviderError =
Class.new(APIError)
HTTP_CODE_TO_EXCEPTIONS =
{
  400 => InvalidRequest,
  402 => MessageRejected,
  403 => AccessDenied,
  404 => ResourceNotFound,
  422 => MailProviderError,
  429 => SendingQuotaExceeded,
  500 => InternalError,
  502 => BadGateway,
  503 => ServiceUnavailable,
}.freeze
Label =
Folder.clone
VERSION =
"3.0.0"

Class Method Summary collapse

Class Method Details

.http_code_to_exception(http_code) ⇒ Object



65
66
67
# File 'lib/nylas.rb', line 65

def self.http_code_to_exception(http_code)
  HTTP_CODE_TO_EXCEPTIONS.fetch(http_code, APIError)
end

.interpret_response(result, result_content, options = {}) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/nylas.rb', line 69

def self.interpret_response(result, result_content, options = {})

  # We expected a certain kind of object, but the API didn't return anything
  raise UnexpectedResponse.new if options[:expected_class] && result_content.empty?

  # If it's already parsed, or if we've received an actual raw payload on success, don't parse
  if options[:result_parsed] || (options[:raw_response] && result.code.to_i == 200)
    response = result_content
  else
    response = JSON.parse(result_content)
  end

  if result.code.to_i != 200
    exc = Nylas.http_code_to_exception(result.code.to_i)
    if response.is_a?(Hash)
      raise exc.new(response['type'], response['message'], response.fetch('server_error', nil))
    end
  end
  
  raise UnexpectedResponse.new(result.msg) if result.is_a?(Net::HTTPClientError)
  raise UnexpectedResponse.new if options[:expected_class] && !response.is_a?(options[:expected_class])
  response

rescue JSON::ParserError => e
  # Handle parsing errors
  raise UnexpectedResponse.new(e.message)
end