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