class Proxima::Model
Public Class Methods
api(api = nil)
click to toggle source
TODO: Implement callbacks extend ActiveModel::Callbacks define_model_callbacks :create, :update
# File lib/proxima/model.rb, line 24 def self.api(api = nil) @api = api if api @api end
count(query = {}, params = {}, opts = {})
click to toggle source
# File lib/proxima/model.rb, line 78 def self.count(query = {}, params = {}, opts = {}) query['$limit'] = 0 opts[:query] = self.convert_query_or_delta_to_json query @response = self.api.get self.find_path.call(params), opts return nil unless @response.code == 200 total_count = @response.headers[:x_total_count] total_count.present? ? total_count.to_i : 0 end
count_and_find(query = {}, params = {}, opts = {})
click to toggle source
# File lib/proxima/model.rb, line 66 def self.count_and_find(query = {}, params = {}, opts = {}) items = self.find query, params, opts total_count = self.response.headers[:x_total_count].to_i || 0 Struct.new(:total_count, :items).new(total_count, items) end
create(record, params = {}, opts = {})
click to toggle source
# File lib/proxima/model.rb, line 37 def self.create(record, params = {}, opts = {}) if record.is_a? Array models = [] @responses = [] record.each do |record| model = self.create record @responses.push model.response models.push(model) if model end return models end model = self.new record save_ok = model.save params, opts @response = model.response return nil unless save_ok model end
find(query = {}, params = {}, opts = {})
click to toggle source
# File lib/proxima/model.rb, line 57 def self.find(query = {}, params = {}, opts = {}) opts[:query] = self.convert_query_or_delta_to_json query @response = self.api.get self.find_path.call(query.merge(params)), opts return [] unless @response.code == 200 self.from_json @response.body end
find_by_id(id, params = {}, opts = {})
click to toggle source
# File lib/proxima/model.rb, line 90 def self.find_by_id(id, params = {}, opts = {}) raise "id cannot be blank" if id.blank? params[:id] = id @response = self.api.get self.find_by_id_path.call(params), opts return nil unless @response.code == 200 self.from_json @response.body, single_model_from_array: true end
find_one(query = {}, params = {}, opts = {})
click to toggle source
# File lib/proxima/model.rb, line 73 def self.find_one(query = {}, params = {}, opts = {}) query['$limit'] = 1 self.find(query, params, opts)[0] end
new(record = {})
click to toggle source
# File lib/proxima/model.rb, line 100 def initialize(record = {}) self.new_record = true self.attributes = record end
response()
click to toggle source
# File lib/proxima/model.rb, line 29 def self.response @response end
responses()
click to toggle source
# File lib/proxima/model.rb, line 33 def self.responses @responses || [] end
Public Instance Methods
destroy(params = {})
click to toggle source
# File lib/proxima/model.rb, line 162 def destroy(params = {}) raise "Cannot destroy a new record" if new_record? @response = self.class.api.delete(self.class.delete_by_id_path.call(self.to_h.merge(params))) return false unless @response.code == 204 self.persisted = true end
new_record=(val)
click to toggle source
# File lib/proxima/model.rb, line 118 def new_record=(val) @new_record = !!val @persisted = !val clear_changes_information unless val end
new_record?()
click to toggle source
# File lib/proxima/model.rb, line 114 def new_record? @new_record end
persisted=(val)
click to toggle source
# File lib/proxima/model.rb, line 109 def persisted=(val) @persisted = !!val changes_applied if val end
persisted?()
click to toggle source
# File lib/proxima/model.rb, line 105 def persisted? @persisted end
reload!()
click to toggle source
# File lib/proxima/model.rb, line 154 def reload! self.clear_changes_information end
response()
click to toggle source
# File lib/proxima/model.rb, line 124 def response @response end
restore(params = {})
click to toggle source
# File lib/proxima/model.rb, line 171 def restore(params = {}) raise "Cannot restore a new record" if new_record? @response = self.class.api.post(self.class.restore_by_id_path.call(self.to_h.merge(params))) return false unless @response.code == 204 self.persisted = true end
rollback!()
click to toggle source
# File lib/proxima/model.rb, line 158 def rollback! self.restore_attributes end
save(params = {}, opts = {})
click to toggle source
# File lib/proxima/model.rb, line 128 def save(params = {}, opts = {}) return false unless self.valid? if self.new_record? path = self.class.create_path.call self.to_h.merge(params) payload = { json: self.as_json(opts) } @response = self.class.api.post path, payload return false unless @response.code == 201 self.from_json @response.body, opts self.new_record = false return true end return true if self.persisted? opts[:flatten] = true if opts[:flatten] == nil path = self.class.update_by_id_path.call self.to_h.merge(params) payload = { json: self.as_json(opts) } @response = self.class.api.put path, payload return false unless @response.code == 204 self.persisted = true end