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

Version Path
config_manager-1.0.4 lib/config_manager/settings/querying.rb
config_manager-1.0.3 lib/config_manager/settings/querying.rb
config_manager-1.0.2 lib/config_manager/settings/querying.rb
config_manager-1.0.0 lib/config_manager/settings/querying.rb
config_manager-0.0.10 lib/config_manager/settings/querying.rb