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