Class: Rubill::Session
- Inherits:
-
Object
- Object
- Rubill::Session
- Includes:
- Singleton
- Defined in:
- lib/rubill/session.rb
Instance Attribute Summary collapse
-
#base_uri ⇒ Object
Returns the value of attribute base_uri.
-
#id ⇒ Object
Returns the value of attribute id.
Class Method Summary collapse
Instance Method Summary collapse
- #_post(url, data, retries = 0) ⇒ Object
- #execute(query) ⇒ Object
- #file_from_data(data = {}) ⇒ Object
-
#initialize ⇒ Session
constructor
A new instance of Session.
- #login ⇒ Object
- #options(data = {}) ⇒ Object
Constructor Details
#initialize ⇒ Session
Returns a new instance of Session.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/rubill/session.rb', line 15 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 |
Instance Attribute Details
#base_uri ⇒ Object
Returns the value of attribute base_uri.
13 14 15 |
# File 'lib/rubill/session.rb', line 13 def base_uri @base_uri end |
#id ⇒ Object
Returns the value of attribute id.
13 14 15 |
# File 'lib/rubill/session.rb', line 13 def id @id end |
Class Method Details
._post(url, options, file = nil) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/rubill/session.rb', line 85 def self._post(url, , file = nil) = if file [:file] = file [:multipart] = true end if self.configuration.debug [:debug_output] = $stdout end response = RestClient.post(url, ) 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 ⇒ Object
107 108 109 |
# File 'lib/rubill/session.rb', line 107 def self.configuration Rubill::configuration end |
.login(base_uri) ⇒ Object
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/rubill/session.rb', line 38 def self.login(base_uri) = { password: configuration.password, userName: configuration.user_name, devKey: configuration.dev_key, orgId: configuration.org_id, } login = _post(base_uri + "/Login.json", ) login[:sessionId] end |
Instance Method Details
#_post(url, data, retries = 0) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/rubill/session.rb', line 69 def _post(url, data, retries=0) begin file = file_from_data(data) response_data = self.class._post(self.base_uri + url, (data), file) file.close if file response_data rescue APIError => e if e. =~ /Session is invalid/ && retries < 3 login _post(url, data, retries + 1) else raise end end end |
#execute(query) ⇒ Object
30 31 32 |
# File 'lib/rubill/session.rb', line 30 def execute(query) _post(query.url, query.) end |
#file_from_data(data = {}) ⇒ Object
59 60 61 62 63 64 65 66 67 |
# File 'lib/rubill/session.rb', line 59 def file_from_data(data = {}) if data && data.is_a?(Hash) && data.key?(:fileName) file = Tempfile.new(data[:fileName]) file.write data[:content] file.rewind end file end |
#login ⇒ Object
34 35 36 |
# File 'lib/rubill/session.rb', line 34 def login self.id = self.class.login(self.base_uri) end |
#options(data = {}) ⇒ Object
49 50 51 52 53 54 55 56 57 |
# File 'lib/rubill/session.rb', line 49 def (data={}) data = data.dup data.delete(:content) { sessionId: id, devKey: self.class.configuration.dev_key, data: data.to_json, } end |