lib/redis/objects.rb in redis-objects-1.0.1 vs lib/redis/objects.rb in redis-objects-1.1.0

- old
+ new

@@ -1,8 +1,9 @@ # Redis::Objects - Lightweight object layer around redis-rb # See README.rdoc for usage and approach. require 'redis' +require 'redis/objects/connection_pool_proxy' class Redis autoload :Counter, 'redis/counter' autoload :List, 'redis/list' autoload :Lock, 'redis/lock' @@ -58,11 +59,11 @@ class NotConnected < StandardError; end class NilObjectId < StandardError; end class << self def redis=(conn) - @redis = conn + @redis = Objects::ConnectionPoolProxy.proxy_if_needed(conn) end def redis @redis || $redis || Redis.current || raise(NotConnected, "Redis::Objects.redis not set to a Redis.new connection") end @@ -86,11 +87,14 @@ end # Class methods that appear in your class when you include Redis::Objects. module ClassMethods # Enable per-class connections (eg, User and Post can use diff redis-server) - attr_writer :redis + def redis=(conn) + @redis = Objects::ConnectionPoolProxy.proxy_if_needed(conn) + end + def redis @redis || Objects.redis end # Internal list of objects @@ -107,13 +111,23 @@ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). downcase end + def redis_options(name) + klass = first_ancestor_with(name) + return klass.redis_objects[name.to_sym] || {} + end + def redis_field_redis(name) #:nodoc: klass = first_ancestor_with(name) - return klass.redis_objects[name.to_sym][:redis] || self.redis + override_redis = klass.redis_objects[name.to_sym][:redis] + if override_redis + Objects::ConnectionPoolProxy.proxy_if_needed(override_redis) + else + self.redis + end end def redis_field_key(name, id=nil, context=self) #:nodoc: klass = first_ancestor_with(name) # READ THIS: This can never ever ever ever change or upgrades will corrupt all data @@ -141,18 +155,28 @@ superclass.first_ancestor_with(name) end end def redis_id_field(id=nil) - @redis_id_field = id || @redis_id_field || :id + @redis_id_field = id || @redis_id_field + + if superclass && superclass.respond_to?(:redis_id_field) + @redis_id_field ||= superclass.redis_id_field + end + + @redis_id_field ||= :id end end # Instance methods that appear in your class when you include Redis::Objects. module InstanceMethods # Map up one level to make modular extend/include approach sane def redis() self.class.redis end def redis_objects() self.class.redis_objects end + + def redis_options(name) #:nodoc: + return self.class.redis_options(name) + end def redis_field_redis(name) #:nodoc: return self.class.redis_field_redis(name) end