lib/redis/base_object.rb in redis-objects-0.8.0 vs lib/redis/base_object.rb in redis-objects-0.9.0
- old
+ new
@@ -11,7 +11,39 @@
def redis
@myredis || ::Redis::Objects.redis
end
alias :inspect :to_s # Ruby 1.9.2
+
+ def set_expiration
+ if !@options[:expiration].nil?
+ redis.expire(@key, @options[:expiration]) if redis.ttl(@key) < 0
+ elsif !@options[:expireat].nil?
+ redis.expireat(@key, @options[:expireat].to_i) if redis.ttl(@key) < 0
+ end
+ end
+
+ class << self
+ def expiration_filter(*names)
+ names.each do |name|
+ if ['=', '?', '!'].include? name.to_s[-1]
+ with_name = "#{name[0..-2]}_with_expiration#{name[-1]}".to_sym
+ without_name = "#{name[0..-2]}_without_expiration#{name[-1]}".to_sym
+ else
+ with_name = "#{name}_with_expiration".to_sym
+ without_name = "#{name}_without_expiration".to_sym
+ end
+
+ alias_method without_name, name
+
+ define_method(with_name) do |*args|
+ result = send(without_name, *args)
+ set_expiration
+ result
+ end
+
+ alias_method name, with_name
+ end
+ end
+ end
end
end