class Jrec::Model

Attributes

collection[RW]
schema[RW]
table[RW]
attributes[RW]

Public Class Methods

count(conds = {}) click to toggle source
# File lib/jrec/model.rb, line 69
def count conds = {}
  collection.count(conds).match(/(\d+)/)[1].to_i
end
create(data = {}) click to toggle source
# File lib/jrec/model.rb, line 38
def create data = {}
  record = new(data)
  record.save
  record
end
data_attr_accessor(*fields) click to toggle source
# File lib/jrec/model.rb, line 29
def data_attr_accessor *fields
  fields.each do |field|
    class_eval %Q{ 
      def #{field}; self.attributes['#{field}'] end
      def #{field}=val; self.attributes['#{field}']=val end
    }
  end 
end
new(data = {}) click to toggle source
Calls superclass method
# File lib/jrec/model.rb, line 81
def initialize data = {}
  data ||= {}
  register_attr_accessors data
  super(data)
end

Public Instance Methods

destroy() click to toggle source
# File lib/jrec/model.rb, line 112
def destroy
  return unless self.persisted?
  run_callbacks :destroy do
    if result = self.class.delete(identity)
      process_response result
    end
  end
end
persisted?() click to toggle source
# File lib/jrec/model.rb, line 91
def persisted?
  self.uuid.present?
end
save() click to toggle source

persistency

# File lib/jrec/model.rb, line 102
def save
  create_or_update if valid?
end
update(attrs) click to toggle source
# File lib/jrec/model.rb, line 106
def update attrs
  register_attr_accessors attrs        
  self.attributes.update(attrs)
  save
end
uuid() click to toggle source
# File lib/jrec/model.rb, line 95
def uuid
  self.attributes['uuid']
end

Private Instance Methods

_update() click to toggle source
# File lib/jrec/model.rb, line 128
def _update
  run_callbacks :update do        
    if result = self.class.update(self.attributes.merge(identity))
      process_response result
    end
  end
end
_upsert() click to toggle source
# File lib/jrec/model.rb, line 136
def _upsert
  run_callbacks :create do
    if result = self.class.upsert(self.attributes)
      process_response result
    end
  end
end
create_or_update() click to toggle source
# File lib/jrec/model.rb, line 124
def create_or_update
  self.persisted? ? _update : _upsert
end
identity() click to toggle source
# File lib/jrec/model.rb, line 144
def identity
  {'uuid' => self.uuid}
end
process_response(result) click to toggle source
# File lib/jrec/model.rb, line 161
def process_response result
  self.from_json(result)
  self
end
register_attr_accessors(data) click to toggle source

allows dynamic attributes!

# File lib/jrec/model.rb, line 151
def register_attr_accessors data
  data.deep_stringify_keys!
  # ignore attributes declared with attr_accessor method
  self.class.data_attr_accessor *data.keys.keep_if{ |key| 
    public_methods.keep_if{ |n| n.to_s.start_with? key }.empty? 
  }
end