class Rubill::Session
Attributes
base_uri[RW]
id[RW]
Public Class Methods
_post(url, options)
click to toggle source
# File lib/rubill/session.rb, line 66 def self._post(url, options) if self.configuration.debug options[:debug_output] = $stdout end response = RestClient.post(url, options) result = JSON.parse(response.body, symbolize_names: true) unless result[:response_status] == 0 raise APIError.new(result[:response_data][:error_message]) end result[:response_data] end
configuration()
click to toggle source
# File lib/rubill/session.rb, line 81 def self.configuration Rubill::configuration end
login(base_uri)
click to toggle source
# File lib/rubill/session.rb, line 32 def self.login(base_uri) login_options = { password: configuration.password, userName: configuration.user_name, devKey: configuration.dev_key, orgId: configuration.org_id, } login = _post(base_uri + "/Login.json", login_options) login[:sessionId] end
new()
click to toggle source
# File lib/rubill/session.rb, line 9 def initialize config = self.class.configuration if missing = (!config.missing_keys.empty? && config.missing_keys) raise "Missing key(s) in configuration: #{missing}" end if config.sandbox self.base_uri = "https://api-stage.bill.com/api/v2" else self.base_uri = "https://api.bill.com/api/v2" end login end
Public Instance Methods
_post(url, data, retries=0)
click to toggle source
# File lib/rubill/session.rb, line 53 def _post(url, data, retries=0) begin self.class._post(self.base_uri + url, options(data)) rescue APIError => e if e.message =~ /Session is invalid/ && retries < 3 login _post(url, data, retries + 1) else raise end end end
execute(query)
click to toggle source
# File lib/rubill/session.rb, line 24 def execute(query) _post(query.url, query.options) end
login()
click to toggle source
# File lib/rubill/session.rb, line 28 def login self.id = self.class.login(self.base_uri) end
options(data={})
click to toggle source
# File lib/rubill/session.rb, line 43 def options(data={}) top_level_data = data.delete("_top_level_data") { sessionId: id, devKey: self.class.configuration.dev_key, data: data.to_json, }.merge(top_level_data || {}) end