class Scale::Api

Constants

SCALEAPI_GEM_INFO
SCALE_API_URL
SCALE_RUBY_CLIENT_VERSION

Public Instance Methods

connection() click to toggle source
# File lib/scale/api.rb, line 11
def connection
  @connection ||= Faraday.new(:url => SCALE_API_URL) do |faraday|
    faraday.request  :basic_auth, self.api_key, ''
    faraday.request  :url_encoded             # form-encode POST params
    faraday.response :logger if logging       # log requests to STDOUT
    faraday.adapter  Faraday.default_adapter  # make requests with Net::HTTP
  end
end
create_task(type, args = {}) click to toggle source
# File lib/scale/api.rb, line 75
def create_task(type, args = {})
  response = post("task/#{type}", args)
  Api::Tasks::BaseTask.new(JSON.parse(response.body), self)
end
get(url, params = {}) click to toggle source
# File lib/scale/api.rb, line 20
def get(url, params = {})
  response = connection.get do |req|
    req.url "#{SCALE_API_URL}#{url}"
    req.params.merge!(default_request_params.merge(params))
    req.headers['X-API-Client'] = "Ruby"
    req.headers["X-API-Client-Version"] = SCALE_RUBY_CLIENT_VERSION
  end

  if response.status != 200
    return handle_error(response)
  end

  response
rescue Faraday::Error::ConnectionFailed
  raise Scale::Api::ConnectionError
end
handle_error(response) click to toggle source
# File lib/scale/api.rb, line 58
def handle_error(response)
  error_body = JSON.parse(response.body)
  if response.status == 404
    raise Scale::Api::NotFound.new(error_body['error'], response.status)
  elsif response.status == 429
    raise Scale::Api::TooManyRequests.new(error_body['error'], response.status)
  elsif response.status > 499
    raise Scale::Api::InternalServerError.new(error_body['error'], response.status)
  elsif response.status == 401
    raise Scale::Api::Unauthorized.new(error_body['error'], response.status)
  else
    raise Scale::Api::BadRequest.new(error_body['error'], response.status)
  end
rescue JSON::ParserError
  raise Scale::Api::InternalServerError
end
post(url, body = {}) click to toggle source
# File lib/scale/api.rb, line 37
def post(url, body = {})
  body.delete(:callback_url) if body.keys.include?(:callback_url) && body[:callback_url].nil?
  body = default_request_params.merge(body)

  response = connection.post do |req|
    req.url "#{SCALE_API_URL}#{url}"
    req.headers['Content-Type'] = 'application/json'
    req.body = body.to_json
    req.headers['X-API-Client'] = "Ruby"
    req.headers["X-API-Client-Version"] = SCALE_RUBY_CLIENT_VERSION
  end

  if response.status != 200
    return handle_error(response)
  end

  response
rescue Faraday::Error::ConnectionFailed
  raise Scale::Api::ConnectionError
end