class Featurer::RedisAdapter
Public Instance Methods
add(feature, value)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 12 def add(feature, value) save_set(feature, value) end
delete(feature)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 16 def delete(feature) delete_key(feature) end
enabled_features(value = true)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 27 def enabled_features(value = true) all_features.select { |feature| on?(feature, value) } rescue => e @config[:logger].warn e [] end
feature_list()
click to toggle source
# File lib/featurer/adapters/redis.rb, line 45 def feature_list full_feature_names.map do |full_feature_name| { name: short_feature_name(full_feature_name), matching_values: @redis.smembers(full_feature_name) } end end
off(feature, value)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 34 def off(feature, value) remove_from_set(feature, value) end
on?(feature, value = true)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 20 def on?(feature, value = true) fetch_from_set(feature, value) rescue => e @config[:logger].warn e false end
prepare()
click to toggle source
# File lib/featurer/adapters/redis.rb, line 6 def prepare @redis = @config[:client] || ::Redis.new(host: @config[:host], port: @config[:port], db: @config[:db]) end
register(feature, value = true)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 38 def register(feature, value = true) return if feature.nil? || feature.empty? delete(feature) save_set(feature, value) end
Private Instance Methods
all_features()
click to toggle source
# File lib/featurer/adapters/redis.rb, line 88 def all_features full_feature_names.map do |key| short_feature_name(key) end end
delete_key(name)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 60 def delete_key(name) @redis.del key(name) end
fetch_from_set(name, value)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 68 def fetch_from_set(name, value) matching_values = @redis.smembers(key(name)) matching_values.each do |matching_value| return true if matching_value == 'true' # Globally enabled feature if value.is_a?(String) && matching_value =~ /\(\?-mix:.+\)/ # Regexp matching return true if Regexp.new(matching_value).match(value) elsif matching_value == value.to_s # By exact value return true end end false end
full_feature_names()
click to toggle source
# File lib/featurer/adapters/redis.rb, line 94 def full_feature_names @redis.keys("#{@config[:prefix]}:feature:*") end
key(name)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 56 def key(name) "#{@config[:prefix]}:feature:#{name}" end
remove_from_set(name, id)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 84 def remove_from_set(name, id) @redis.srem(key(name), id) end
save_set(name, value)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 64 def save_set(name, value) @redis.sadd key(name), value end
short_feature_name(full_feature_name)
click to toggle source
# File lib/featurer/adapters/redis.rb, line 98 def short_feature_name(full_feature_name) full_feature_name.split("#{@config[:prefix]}:feature:").last.to_sym end