class BERGCloud::Client

Public Class Methods

api_token() click to toggle source
# File lib/bergcloud/client.rb, line 5
def self.api_token
  @api_token
end
api_token=(api_token) click to toggle source
# File lib/bergcloud/client.rb, line 9
def self.api_token=(api_token)
  @api_token = api_token
end
delete(path, params = {}) click to toggle source
# File lib/bergcloud/client.rb, line 21
def self.delete(path, params = {})
  request(path, params, 'delete')
end
get(path, params = {}) click to toggle source
# File lib/bergcloud/client.rb, line 13
def self.get(path, params = {})
  request(path, params, 'get')
end
post(path, params = {}) click to toggle source
# File lib/bergcloud/client.rb, line 17
def self.post(path, params = {})
  request(path, params, 'post')
end
put(path, params = {}) click to toggle source
# File lib/bergcloud/client.rb, line 25
def self.put(path, params = {})
  request(path, params, 'put')
end

Private Class Methods

base_url() click to toggle source
# File lib/bergcloud/client.rb, line 83
def self.base_url
  "/api/v2"
end
host() click to toggle source
# File lib/bergcloud/client.rb, line 87
def self.host
  "api.bergcloud.com"
end
request(path, params = {}, method) click to toggle source
# File lib/bergcloud/client.rb, line 31
def self.request(path, params = {}, method)

  http = Net::HTTP.new(self.host)

  path = self.base_url + path

  req_params = JSON.generate(params, quirks_mode: true)

  # Make a request object

  case method
  when 'post'
    req = Net::HTTP::Post.new(path)
    req.body = req_params
  when 'get'
    req = Net::HTTP::Get.new(path)
  when 'delete'
    req = Net::HTTP::Delete.new(path)
  when 'put'
    req = Net::HTTP::Put.new(path)
    req.body = req_params
  end


  # Set the required headers
  req['Accept'] = 'application/json'
  req['Content-Type'] = 'application/json'
  req['Berg-API-Token'] = @api_token

  res = http.request(req)

  case res.code.to_i
  when 200, 404, 422
    res.body = JSON.parse(res.body) rescue nil
    if res.body.is_a?(Hash)
      res.body = Hash[res.body.map{ |k, v| [k.to_sym, v] }]
    end
  when 400
    raise BERGCloud::Error::RequestError, "Malformed request"
  when 500
    raise BERGCloud::Error::RequestError, "Server error"
  when 401
    raise BERGCloud::Error::RequestError, "Make sure you've set BERGCloud.api_token"
  else
    puts "Something else went wrong"
    raise BERGCloud::Error::RequestError, "Something else went wrong. Response code was: #{res.code}"
  end

  return res

end