class DropboxApi::Endpoints::Base

Public Class Methods

add_endpoint(name, &block) click to toggle source
# File lib/dropbox_api/endpoints/base.rb, line 4
def self.add_endpoint(name, &block)
  define_method(name, block)
  DropboxApi::Client.add_endpoint(name, self)
end

Private Instance Methods

build_result(api_result) click to toggle source
# File lib/dropbox_api/endpoints/base.rb, line 44
def build_result(api_result)
  result_builder = DropboxApi::ResultBuilder.new(api_result)

  if result_builder.has_error?
    raise result_builder.build_error(self.class::ErrorType)
  else
    result_builder.build(self.class::ResultType)
  end
end
get_response(*args) click to toggle source
# File lib/dropbox_api/endpoints/base.rb, line 15
def get_response(*args)
  run_request(*build_request(*args))
end
perform_request(params) click to toggle source
# File lib/dropbox_api/endpoints/base.rb, line 11
def perform_request(params)
  process_response(get_response(params))
end
process_response(raw_response) click to toggle source
# File lib/dropbox_api/endpoints/base.rb, line 19
def process_response(raw_response)
  # Official Dropbox documentation for HTTP error codes:
  # https://www.dropbox.com/developers/documentation/http/documentation#error-handling
  case raw_response.status
  when 200, 409
    # Status code 409 is "Endpoint-specific error". We need to look at
    # the response body to build an exception.
    build_result(raw_response.env[:api_result])
  when 429
    error = DropboxApi::Errors::TooManyRequestsError.build(
      raw_response.env[:api_result]['error_summary'],
      raw_response.env[:api_result]['error']['reason']
    )

    error.retry_after = raw_response.headers['retry-after'].to_i

    raise error
  else
    raise(
      DropboxApi::Errors::HttpError,
      "HTTP #{raw_response.status}: #{raw_response.body}"
    )
  end
end
run_request(body, headers) click to toggle source
# File lib/dropbox_api/endpoints/base.rb, line 54
def run_request(body, headers)
  @connection.run_request(self.class::Method, self.class::Path, body, headers)
end