Sha256: 2dd6748d754769e02bfd8cac66d063f02e379236cfbf2bafca1ed1869fd2fd0e
Contents?: true
Size: 1.21 KB
Versions: 5
Compression:
Stored size: 1.21 KB
Contents
module ConfigManager module Settings module Querying def self.included(base) base.extend ClassMethods end module ClassMethods def find(id, with_tags=false) key = generate_key(id) value = $redis.get(key) return nil unless value index = generate_tags_key(id) tags = with_tags ? $redis.smembers(index) : [] new(id, value, tags) end def all keys = $redis.smembers(global_key) return [] if keys.empty? values = $redis.mget(*keys) # remove deleted keys obsolete_keys = Range.new(0, keys.size, true).inject([]) do |memo, i| values.at(i) ? memo : (memo << keys.at(i)) end unless obsolete_keys.empty? Rails.logger.info("DELETING OBSOLETE KEYS IN GLOBAL INDEX: #{obsolete_keys}") $redis.srem(global_key, obsolete_keys) keys = keys - obsolete_keys values.compact! end # get tags ids = keys.map {|k| k.gsub("#{prefix}:", '') } tag_keys = ids.map {|id| generate_tags_key(id) } tags = tag_keys.map {|key| $redis.smembers(key) } ids.zip(values, tags).map do |i,v, t| Setting.new(i, v, t) end end def tags $redis.smembers(tag_global_key) end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems