class Clubhouse::Client

Constants

API_VERSION

Public Class Methods

new(token) click to toggle source
# File lib/clubhouse/client.rb, line 13
def initialize(token)
  @token = token
end

Public Instance Methods

basepath() click to toggle source
# File lib/clubhouse/client.rb, line 17
def basepath
  @basepath ||= "https://api.clubhouse.io/api/#{API_VERSION}"
end
delete(resource) click to toggle source
# File lib/clubhouse/client.rb, line 26
def delete(resource)
  req = Net::HTTP::Delete.new(build_uri(resource))
  do_request(req)
end
get(resource) click to toggle source
# File lib/clubhouse/client.rb, line 21
def get(resource)
  req = Net::HTTP::Get.new(build_uri(resource))
  do_request(req)
end
post(resource, body = {}) click to toggle source
# File lib/clubhouse/client.rb, line 31
def post(resource, body = {})
  req = Net::HTTP::Post.new(build_uri(resource))
  req['Content-Type'] = 'application/json'
  req.body = body.to_json

  do_request(req)
end
put(resource, body = {}) click to toggle source
# File lib/clubhouse/client.rb, line 39
def put(resource, body = {})
  req = Net::HTTP::Put.new(build_uri(resource))
  req['Content-Type'] = 'application/json'
  req.body = body.to_json

  do_request(req)
end
raise_error_to_user(response) click to toggle source
# File lib/clubhouse/client.rb, line 47
def raise_error_to_user(response)
  code = response.code.to_i

  err = case code
    when 400 then BadRequestError
    when 401, 403 then UnauthorizedError
    when 404 then ResourceNotFoundError
    when 422 then UnprocessableError
    else UnexpectedError
  end

  raise err, response.body
end

Private Instance Methods

build_uri(resource) click to toggle source
# File lib/clubhouse/client.rb, line 63
def build_uri(resource)
  uri = URI.parse("#{basepath}/#{resource}")
  uri.query = URI.encode_www_form(token: @token)
  uri
end
do_request(request) click to toggle source
# File lib/clubhouse/client.rb, line 69
def do_request(request)
  http = Net::HTTP.new(request.uri.host, request.uri.port)
  http.use_ssl = true
  response = http.request(request)

  if [200,201,204].include?(response.code.to_i)
    # Clubhouse API returns content type as application/json for DELETE request with no body :(
    return {} if response.body.nil?
    JSON.parse(response.body)
  else
    raise_error_to_user(response)
  end
end