lib/ohm.rb in ohm-0.0.3 vs lib/ohm.rb in ohm-0.0.4

- old
+ new

@@ -1,15 +1,26 @@ -require "rubygems" -require "redis" +require File.join(File.dirname(__FILE__), "ohm", "redis") require File.join(File.dirname(__FILE__), "ohm", "validations") module Ohm + def redis + @redis + end + + def connect(*attrs) + @redis = Ohm::Redis.new(*attrs) + end + + def flush + @redis.flushdb + end + def key(*args) args.join(":") end - module_function :key + module_function :key, :connect, :flush, :redis module Attributes class Collection < Array attr_accessor :key, :db @@ -20,44 +31,44 @@ end end class List < Collection def retrieve - db.list_range(key, 0, -1) + db.list(key) end def << value - super(value) if db.push_tail(key, value) + super(value) if db.rpush(key, value) end end class Set < Collection def retrieve - db.set_members(key).sort + db.smembers(key).sort end def << value - super(value) if db.set_add(key, value) + super(value) if db.sadd(key, value) end def delete(value) - super(value) if db.set_delete(key, value) + super(value) if db.srem(key, value) end def include?(value) - db.set_member?(key, value) + db.sismember(key, value) end end end class Model module Validations include Ohm::Validations def assert_unique(attrs) index_key = index_key_for(attrs, read_locals(attrs)) - assert(db.set_count(index_key).zero? || db.set_member?(index_key, id), [attrs, :not_unique]) + assert(db.scard(index_key).zero? || db.sismember(index_key, id), [attrs, :not_unique]) end end include Validations @@ -133,14 +144,11 @@ def self.create(*args) new(*args).create end - # TODO Add a method that receives several arguments and returns a - # string with the values separated by colons. def self.find(attribute, value) - # filter("#{attribute}:#{value}") filter(Ohm.key(attribute, value)) end def initialize(attrs = {}) @_attributes = Hash.new {|hash,key| hash[key] = read_remote(key) } @@ -198,47 +206,47 @@ end private def self.db - $redis + Ohm.redis end def self.key(*args) Ohm.key(*args.unshift(self)) end def self.filter(name) - db.set_members(key(name)).map do |id| + db.smembers(key(name)).map do |id| new(:id => id) end end def self.exists?(id) - db.set_member?(key(:all), id) + db.sismember(key(:all), id) end def initialize_id self.id = db.incr(self.class.key("id")) end def db - self.class.db + Ohm.redis end def delete_attributes(atts) atts.each do |att| - db.delete(key(att)) + db.del(key(att)) end end def create_model_membership - db.set_add(self.class.key(:all), id) + db.sadd(self.class.key(:all), id) end def delete_model_membership - db.set_delete(self.class.key(:all), id) + db.srem(self.class.key(:all), id) end def save! attributes.each { |att| write_remote(att, send(att)) } self @@ -249,17 +257,17 @@ add_to_indices end def add_to_indices indices.each do |attrs| - db.set_add(index_key_for(attrs, read_locals(attrs)), id) + db.sadd(index_key_for(attrs, read_locals(attrs)), id) end end def delete_from_indices indices.each do |attrs| - db.set_delete(index_key_for(attrs, read_remotes(attrs)), id) + db.srem(index_key_for(attrs, read_remotes(attrs)), id) end end def read_local(att) @_attributes[att] @@ -268,14 +276,14 @@ def write_local(att, value) @_attributes[att] = value end def read_remote(att) - id && db[key(att)] + id && db.get(key(att)) end def write_remote(att, value) - db[key(att)] = value + db.set(key(att), value) end def read_locals(attrs) attrs.map do |att| read_local(att)