Sha256: a290db7d15d4cc19394a0db580e7795c19f356d799d05ec386a3d13e9a0c2141
Contents?: true
Size: 1.5 KB
Versions: 1
Compression:
Stored size: 1.5 KB
Contents
class RedisClassy class << self attr_accessor :redis def inherited(subclass) raise Error.new('RedisClassy.redis is not assigned') unless RedisClassy.redis subclass.redis = Redis::Namespace.new(subclass.name, redis: RedisClassy.redis) end def singletons(*args) args.each do |key| define_singleton_method(key) do new key end end end def singleton @singleton = true end def keys(pattern = nil) @redis.keys(pattern || '*') end def on(key) new(key) end def method_missing(command, *args, &block) if @singleton new('singleton').send(command, *args, &block) else super end end end # Instance methods attr_accessor :key, :redis, :object def initialize(object) @redis = self.class.redis @object = object case object when String, Symbol, Integer @key = object.to_s else if object.respond_to?(:id) @key = object.id.to_s else raise ArgumentError, 'object must be a string, symbol, integer or respond to :id method' end end end KEYLESS_COMMANDS = [:multi, :pipelined, :exec, :eval] def method_missing(command, *args, &block) if @redis.respond_to?(command) case command when *KEYLESS_COMMANDS @redis.send(command, *args, &block) else @redis.send(command, @key, *args, &block) end else super end end Error = Class.new(StandardError) end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
redis-classy-2.0.0 | lib/redis_classy.rb |