lib/ohm.rb in ohm-1.2.0 vs lib/ohm.rb in ohm-1.3.0
- old
+ new
@@ -778,10 +778,12 @@
# u = User.create(:email => "foo@bar.com")
# u == User.with(:email, "foo@bar.com")
# # => true
#
def self.with(att, val)
+ raise IndexNotFound unless uniques.include?(att)
+
id = db.hget(key[:uniques][att], val)
id && self[id]
end
# Find values in indexed fields.
@@ -1017,10 +1019,12 @@
# @attributes[:name] = name
# end
# end
#
def self.attribute(name, cast = nil)
+ attributes << name unless attributes.include?(name)
+
if cast
define_method(name) do
cast[@attributes[name]]
end
else
@@ -1394,29 +1398,33 @@
def self.uniques
@uniques ||= []
end
- def self.counters
+ def self.counters
@counters ||= []
end
def self.collections
@collections ||= []
end
+ def self.attributes
+ @attributes ||= []
+ end
+
def self.filters(dict)
unless dict.kind_of?(Hash)
raise ArgumentError,
"You need to supply a hash with filters. " +
"If you want to find by ID, use #{self}[id] instead."
end
- dict.map { |k, v| toindices(k, v) }.flatten
+ dict.map { |k, v| to_indices(k, v) }.flatten
end
- def self.toindices(att, val)
+ def self.to_indices(att, val)
raise IndexNotFound unless indices.include?(att)
if val.kind_of?(Enumerable)
val.map { |v| key[:indices][att][v] }
else
@@ -1496,31 +1504,26 @@
db.hset(unique, val, id)
db.hset(key[:_uniques], unique, val)
end
end
- def _delete_uniques(_uniques)
- _uniques.each do |unique, val|
+ def _delete_uniques(uniques)
+ uniques.each do |unique, val|
db.hdel(unique, val)
db.hdel(key[:_uniques], unique)
end
end
- def _delete_indices(_indices)
- _indices.each do |index|
+ def _delete_indices(indices)
+ indices.each do |index|
db.srem(index, id)
db.srem(key[:_indices], index)
end
- # model.indices.each do |att|
- # val = atts[att.to_s]
-
- # db.srem(model.key[:indices][att][val], id)
- # end
end
def _save_indices(indices)
indices.each do |att, val|
- model.toindices(att, val).each do |index|
+ model.to_indices(att, val).each do |index|
db.sadd(index, id)
db.sadd(key[:_indices], index)
end
end
end