Skip to content

Instantly share code, notes, and snippets.

@theinventor
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save theinventor/d798298e0e4ba7dc65b7 to your computer and use it in GitHub Desktop.
Save theinventor/d798298e0e4ba7dc65b7 to your computer and use it in GitHub Desktop.
A super quick draft of a Cloudberry API 2.0 client in ruby
class Cloudberry
attr_accessor :access_token, :base_url, :api_version, :account
def initialize(account)
@api_version = "/api"
@account = account
@access_token = @account.settings.cloudberry_access_token
refresh_token! if have_credentials? && !valid_access_token?
end
def base_url
@base_url ||= "http://mbs.cloudberrylab.com:8090"
end
def users
setup_connection
response = @conn.get "#{base_url}#{@api_version}/Users"
JSON.parse response.body
end
def user(user_id)
setup_connection
response = @conn.get "#{base_url}#{@api_version}/Users?UserId=#{user_id}"
JSON.parse response.body
end
def monitors
setup_connection
response = @conn.get "#{base_url}#{@api_version}/Monitoring"
JSON.parse response.body
end
def monitor(user_id)
setup_connection
response = @conn.get "#{base_url}#{@api_version}/Monitoring?UserId=#{user_id}"
JSON.parse response.body
end
def accounts
setup_connection
response = @conn.get "#{base_url}#{@api_version}/Accounts"
JSON.parse response.body
end
def packages
setup_connection
response = @conn.get "#{base_url}#{@api_version}/Packages"
JSON.parse response.body
end
########## helper methods
def valid_access_token?
expiration = account.settings.cloudberry_expires_at || Time.now-1.day
expiration > Time.now
end
def have_credentials?
account.settings.cloudberry_username && account.settings.cloudberry_password
end
def account
@account
end
def access_token
@access_token
end
private
def setup_connection
@conn = Faraday.new do |faraday|
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
end
@conn.headers["Authorization"] = "Bearer #{access_token}"
end
def login(username,password)
setup_connection
params = {}
params[:username] = username
params[:password] = password
response = @conn.post "#{@api_version}/Provider/Login", params
JSON.parse response.body
end
def refresh_token!
response = login(account.settings.cloudberry_username,account.settings.cloudberry_password)
if response && response["access_token"].present?
account.settings.cloudberry_access_token = response["access_token"]
account.settings.cloudberry_expires_at = Time.parse(response[".expires"])
return response
else
raise("CouldNotRefreshToken")
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment