Sha256: de604ceeb9b73b499245b5cd0ecb730a490e699db560b3f7c40e9b47011beecc
Contents?: true
Size: 1.97 KB
Versions: 1
Compression:
Stored size: 1.97 KB
Contents
require 'active_support' require 'redis-store-with-cas' require 'active_support/cache/redis_store' module ActiveSupport module Cache module RedisStoreCas attr_accessor :read_only def cas name,options=nil options = merged_options(options) key = normalize_key(name, options) instrument(:cas, name, options) do ttl = cas_expiration options @data.cas(key,ttl) do |entry| value = yield entry.value break true if read_only options[:raw].present? ? value : Entry.new(value, options) end end end def cas_multi(*names) options = names.extract_options! return if names.empty? options = merged_options(options) keys_to_names = Hash[names.map { |name| [normalize_key(name, options), name] }] instrument(:cas_multi, names, options) do @data.cas_multi(*(keys_to_names.keys), {:expires_in => cas_expiration(options)}) do |raw_values| values = {} raw_values.each do |key, entry| values[keys_to_names[key]] = entry.value unless entry.expired? end values = yield values break true if read_only mapped_values = values.map do |name,value| [normalize_key(name, options),options[:raw].present? ? value : Entry.new(value, options)] end Hash[mapped_values] end true end end private def cas_expiration(options) if options[:expires_in].present? && options[:race_condition_ttl].present? && options[:raw].blank? options[:expires_in].to_f + options[:race_condition_ttl].to_f else nil end end end class RedisStoreWithCas < RedisStore def initialize(*adresses) super check_and_extend_cas end private def check_and_extend_cas extend RedisStoreCas end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
redis-activesupport-with-cas-0.0.4 | lib/active_support/cache/redis_store_with_cas.rb |