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