lib/redis/objects.rb in redis-objects-0.6.1 vs lib/redis/objects.rb in redis-objects-0.7.0

- old
+ new

@@ -1,9 +1,18 @@ # Redis::Objects - Lightweight object layer around redis-rb # See README.rdoc for usage and approach. require 'redis' + class Redis + autoload :Counter, 'redis/counter' + autoload :List, 'redis/list' + autoload :Lock, 'redis/lock' + autoload :Set, 'redis/set' + autoload :SortedSet, 'redis/sorted_set' + autoload :Value, 'redis/value' + autoload :HashKey, 'redis/hash_key' + # # Redis::Objects enables high-performance atomic operations in your app # by leveraging the atomic features of the Redis server. To use Redis::Objects, # first include it in any class you want. (This example uses an ActiveRecord # subclass, but that is *not* required.) Then, use +counter+, +lock+, +set+, etc @@ -15,11 +24,11 @@ # counter :joined_players # counter :active_players, :key => 'game:#{id}:act_plyr' # lock :archive_game # set :player_ids # end - # + # # The, you can use these counters both for bookeeping and as atomic actions: # # @game = Game.find(id) # @game_user = @game.joined_players.increment do |val| # break if val > @game.max_players @@ -36,34 +45,37 @@ # # module Objects dir = File.expand_path(__FILE__.sub(/\.rb$/,'')) - autoload :Counters, File.join(dir, 'counters') - autoload :Lists, File.join(dir, 'lists') - autoload :Locks, File.join(dir, 'locks') - autoload :Sets, File.join(dir, 'sets') - autoload :SortedSets, File.join(dir, 'sorted_sets') - autoload :Values, File.join(dir, 'values') - autoload :Hashes, File.join(dir, 'hashes') + autoload :Counters, 'redis/objects/counters' + autoload :Lists, 'redis/objects/lists' + autoload :Locks, 'redis/objects/locks' + autoload :Sets, 'redis/objects/sets' + autoload :SortedSets, 'redis/objects/sorted_sets' + autoload :Values, 'redis/objects/values' + autoload :Hashes, 'redis/objects/hashes' class NotConnected < StandardError; end class NilObjectId < StandardError; end class << self - def redis=(conn) @redis = conn end + def redis=(conn) + @redis = conn + end def redis - @redis ||= $redis || Redis.current || raise(NotConnected, "Redis::Objects.redis not set to a Redis.new connection") + @redis || $redis || Redis.current || + raise(NotConnected, "Redis::Objects.redis not set to a Redis.new connection") end def included(klass) # Core (this file) - klass.instance_variable_set('@redis', @redis) + klass.instance_variable_set('@redis', nil) klass.instance_variable_set('@redis_objects', {}) klass.send :include, InstanceMethods klass.extend ClassMethods - + # Pull in each object type klass.send :include, Redis::Objects::Counters klass.send :include, Redis::Objects::Lists klass.send :include, Redis::Objects::Locks klass.send :include, Redis::Objects::Sets @@ -73,12 +85,20 @@ end end # Class methods that appear in your class when you include Redis::Objects. module ClassMethods - attr_writer :redis - attr_accessor :redis_objects - def redis() @redis ||= Objects.redis end + # Enable per-class connections (eg, User and Post can use diff redis-server) + attr_writer :redis + def redis + @redis || Objects.redis + end + + # Internal list of objects + attr_writer :redis_objects + def redis_objects + @redis_objects ||= {} + end # Set the Redis redis_prefix to use. Defaults to model_name def redis_prefix=(redis_prefix) @redis_prefix = redis_prefix end def redis_prefix(klass = self) #:nodoc: @redis_prefix ||= klass.name.to_s.