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