Sha256: 57bef71fe1a8232412270ba8d06e4f33804c14e71f32a0b9673bb40d4ba16c9a

Contents?: true

Size: 1.32 KB

Versions: 5

Compression:

Stored size: 1.32 KB

Contents

module ConfigManager
	module Settings
		module Persistence
			def self.included(base)
				base.extend ClassMethods
			end

			def persist
				Setting.persist(@id, @value, *@tags)
			end

			module ClassMethods
				def build(params)
					tags = (params[:tags] || params[:formatted_tags] || "").
							gsub(/\s*,\s*/,',').
							split(',')
					new(params[:id], params[:value], tags)
				end

				def create(params)
					setting = build(params)
					if setting.valid?
						setting.persist
						find(params[:id], true)
					else
						setting
					end
				end

				def persist(id, value, *indexes)
					$redis.set(generate_key(id), value)
					unless indexes.empty?
						$redis.sadd(generate_tags_key(id), indexes) 
						$redis.sadd(tag_global_key, indexes)
					end
					
					# update global and tag indexes
					indexes = indexes.map{|index| generate_index(index)}
					indexes << global_key
					index_by(id, indexes)
				end

				def delete(id)
					$redis.del(generate_key(id), generate_tags_key(id))
				end

			private
				# stores the setting id under the requested indexes
      	# this allows us to search all keys for a given index
      	# such as the global index returning all keys or a tag
				def index_by(id, indexes)
					indexes.each do |index|
						$redis.sadd(index, generate_key(id))
					end
				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/persistence.rb
config_manager-1.0.3 lib/config_manager/settings/persistence.rb
config_manager-1.0.2 lib/config_manager/settings/persistence.rb
config_manager-1.0.0 lib/config_manager/settings/persistence.rb
config_manager-0.0.10 lib/config_manager/settings/persistence.rb