# File lib/topmodel/base.rb, line 17 def primary_key @primary_key ||= 'id' end
class TopModel::Base
Attributes
attributes[RW]
new_record[W]
Public Class Methods
all()
click to toggle source
# File lib/topmodel/base.rb, line 87 def all collection.new(records.values.deep_dup) end
attributes(*attributes)
click to toggle source
# File lib/topmodel/base.rb, line 27 def attributes(*attributes) self.known_attributes |= attributes.map(&:to_s) end
belongs_assoc()
click to toggle source
# File lib/topmodel/base.rb, line 9 def belongs_assoc @belongs_assoc ||= {} end
collection(&block)
click to toggle source
# File lib/topmodel/base.rb, line 21 def collection(&block) @collection ||= Class.new(Array) @collection.class_eval(&block) if block_given? @collection end
count()
click to toggle source
# File lib/topmodel/base.rb, line 83 def count records.length end
create(atts = {})
click to toggle source
Create a new record. Example:
create(:name => "foo", :id => 1)
# File lib/topmodel/base.rb, line 118 def create(atts = {}) rec = self.new(atts) rec.save && rec end
create!(*args)
click to toggle source
# File lib/topmodel/base.rb, line 123 def create!(*args) create(*args) || raise(InvalidRecord) end
delete_all()
click to toggle source
Removes all records without executing destroy callbacks.
# File lib/topmodel/base.rb, line 111 def delete_all records.clear end
destroy(id)
click to toggle source
# File lib/topmodel/base.rb, line 99 def destroy(id) find(id).destroy end
destroy_all()
click to toggle source
Removes all records and executes destroy callbacks.
# File lib/topmodel/base.rb, line 105 def destroy_all all.each {|r| r.destroy } end
exists?(id)
click to toggle source
# File lib/topmodel/base.rb, line 79 def exists?(id) records.has_key?(id) end
find(id)
click to toggle source
Find record by ID, or raise.
# File lib/topmodel/base.rb, line 50 def find(id) item = raw_find(id) item && item.dup end
Also aliased as: []
first()
click to toggle source
# File lib/topmodel/base.rb, line 56 def first item = records.values[0] item && item.dup end
has_many_assoc()
click to toggle source
# File lib/topmodel/base.rb, line 13 def has_many_assoc @has_many_assoc ||= {} end
last()
click to toggle source
# File lib/topmodel/base.rb, line 61 def last item = records.values[-1] item && item.dup end
new(attributes = {})
click to toggle source
# File lib/topmodel/base.rb, line 151 def initialize(attributes = {}) @new_record = true @attributes = {}.with_indifferent_access @attributes.merge!(known_attributes.inject({}) {|h, n| h[n] = nil; h }) @changed_attributes = {} load(attributes) end
primary_key()
click to toggle source
records()
click to toggle source
# File lib/topmodel/base.rb, line 31 def records @records ||= {} end
select(&block)
click to toggle source
# File lib/topmodel/base.rb, line 91 def select(&block) collection.new(records.values.select(&block).deep_dup) end
update(id, atts)
click to toggle source
# File lib/topmodel/base.rb, line 95 def update(id, atts) find(id).update_attributes(atts) end
where(options)
click to toggle source
# File lib/topmodel/base.rb, line 66 def where(options) items = records.values.select do |r| options.all? do |k, v| if v.is_a?(Enumerable) v.include?(r.send(k)) else r.send(k) == v end end end collection.new(items.deep_dup) end
Public Instance Methods
==(other)
click to toggle source
# File lib/topmodel/base.rb, line 183 def ==(other) other.equal?(self) || (other.instance_of?(self.class) && other.id == id) end
clone()
click to toggle source
# File lib/topmodel/base.rb, line 159 def clone cloned = attributes.reject {|k,v| k == self.class.primary_key } cloned = cloned.inject({}) do |attrs, (k, v)| attrs[k] = v.clone attrs end self.class.new(cloned) end
destroy()
click to toggle source
# File lib/topmodel/base.rb, line 262 def destroy raw_destroy self end
dup()
click to toggle source
# File lib/topmodel/base.rb, line 196 def dup self.class.new.tap do |base| base.attributes = attributes base.new_record = new_record? end end
eql?(other)
click to toggle source
Tests for equality (delegates to ==).
# File lib/topmodel/base.rb, line 188 def eql?(other) self == other end
exists?()
click to toggle source
# File lib/topmodel/base.rb, line 211 def exists? !new? end
Also aliased as: persisted?
has_attribute?(name)
click to toggle source
# File lib/topmodel/base.rb, line 243 def has_attribute?(name) @attributes.has_key?(name) end
hash()
click to toggle source
# File lib/topmodel/base.rb, line 192 def hash id.hash end
id()
click to toggle source
Gets the \id
attribute of the item.
# File lib/topmodel/base.rb, line 174 def id attributes[self.class.primary_key] end
id=(id)
click to toggle source
Sets the \id
attribute of the item.
# File lib/topmodel/base.rb, line 179 def id=(id) attributes[self.class.primary_key] = id end
known_attributes()
click to toggle source
# File lib/topmodel/base.rb, line 147 def known_attributes self.class.known_attributes | self.attributes.keys.map(&:to_s) end
new?()
click to toggle source
# File lib/topmodel/base.rb, line 168 def new? @new_record || false end
Also aliased as: new_record?
reload()
click to toggle source
# File lib/topmodel/base.rb, line 223 def reload return self if new? item = self.class.find(id) load(item.attributes) return self end
respond_to?(method, include_priv = false)
click to toggle source
Calls superclass method
# File lib/topmodel/base.rb, line 249 def respond_to?(method, include_priv = false) method_name = method.to_s if attributes.nil? super elsif known_attributes.include?(method_name) true elsif method_name =~ /(?:=|\?)$/ && attributes.include?($`) true else super end end
Also aliased as: respond_to_without_attributes?
save()
click to toggle source
# File lib/topmodel/base.rb, line 203 def save new? ? create : update end
save!()
click to toggle source
# File lib/topmodel/base.rb, line 207 def save! save || raise(InvalidRecord) end
update_attribute(name, value)
click to toggle source
# File lib/topmodel/base.rb, line 230 def update_attribute(name, value) self.send("#{name}=".to_sym, value) self.save end
update_attributes(attributes)
click to toggle source
# File lib/topmodel/base.rb, line 235 def update_attributes(attributes) load(attributes) && save end
update_attributes!(attributes)
click to toggle source
# File lib/topmodel/base.rb, line 239 def update_attributes!(attributes) update_attributes(attributes) || raise(InvalidRecord) end
Protected Instance Methods
create()
click to toggle source
# File lib/topmodel/base.rb, line 288 def create self.id ||= generate_id self.new_record = false raw_create self.id end
generate_id()
click to toggle source
# File lib/topmodel/base.rb, line 276 def generate_id object_id end
raw_create()
click to toggle source
# File lib/topmodel/base.rb, line 284 def raw_create self.class.records[self.id] = self.dup end
raw_destroy()
click to toggle source
# File lib/topmodel/base.rb, line 280 def raw_destroy self.class.records.delete(self.id) end
raw_update()
click to toggle source
# File lib/topmodel/base.rb, line 295 def raw_update item = self.class.raw_find(id) item.load(attributes) end
read_attribute(name)
click to toggle source
# File lib/topmodel/base.rb, line 268 def read_attribute(name) @attributes[name] end
update()
click to toggle source
# File lib/topmodel/base.rb, line 300 def update raw_update true end
write_attribute(name, value)
click to toggle source
# File lib/topmodel/base.rb, line 272 def write_attribute(name, value) @attributes[name] = value end