Class: FeatureFlagger::Storage::Redis
- Inherits:
-
Object
- Object
- FeatureFlagger::Storage::Redis
- Defined in:
- lib/feature_flagger/storage/redis.rb
Constant Summary collapse
- DEFAULT_NAMESPACE =
:feature_flagger
Class Method Summary collapse
Instance Method Summary collapse
- #add(feature_key, resource_name, resource_ids) ⇒ Object
- #add_all(global_features_key, feature_key, resource_name) ⇒ Object
- #all_feature_keys(global_features_key, resource_name, resource_id = nil) ⇒ Object
- #all_values(feature_key, resource_name) ⇒ Object
- #has_value?(feature_key, resource_name, resource_id) ⇒ Boolean
-
#initialize(redis) ⇒ Redis
constructor
A new instance of Redis.
- #remove(feature_key, resource_name, resource_ids) ⇒ Object
- #remove_all(feature_key, resource_name) ⇒ Object
- #search_keys(pattern) ⇒ Object
Constructor Details
#initialize(redis) ⇒ Redis
Returns a new instance of Redis.
11 12 13 |
# File 'lib/feature_flagger/storage/redis.rb', line 11 def initialize(redis) @redis = redis end |
Class Method Details
.default_client ⇒ Object
15 16 17 18 19 |
# File 'lib/feature_flagger/storage/redis.rb', line 15 def self.default_client redis = ::Redis.new(url: ENV['REDIS_URL']) ns = ::Redis::Namespace.new(DEFAULT_NAMESPACE, redis: redis) new(ns) end |
Instance Method Details
#add(feature_key, resource_name, resource_ids) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/feature_flagger/storage/redis.rb', line 25 def add(feature_key, resource_name, resource_ids) @redis.multi do |redis| Array(resource_ids).each do |resource_id| redis.sadd("#{resource_name}:#{resource_id}", feature_key) end end end |
#add_all(global_features_key, feature_key, resource_name) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/feature_flagger/storage/redis.rb', line 62 def add_all(global_features_key, feature_key, resource_name) keys = search_keys("#{resource_name}:*") - ["#{resource_name}:#{global_features_key}"] add(feature_key, resource_name, global_features_key) @redis.multi do |redis| keys.map do |key| redis.srem(key.to_s, feature_key) end end end |
#all_feature_keys(global_features_key, resource_name, resource_id = nil) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/feature_flagger/storage/redis.rb', line 41 def all_feature_keys(global_features_key, resource_name, resource_id = nil) if resource_id return @redis.sunion( "#{resource_name}:#{global_features_key}", "#{resource_name}:#{resource_id}" ) end @redis.smembers("#{resource_name}:#{global_features_key}") end |
#all_values(feature_key, resource_name) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/feature_flagger/storage/redis.rb', line 74 def all_values(feature_key, resource_name) keys = search_keys("#{resource_name}:*") query = {} @redis.pipelined do |redis| keys.map do |key| query[key] = redis.sismember(key, feature_key) end end query.map do |key, in_redis| next unless in_redis.value == true key.gsub("#{resource_name}:", '') end.compact end |
#has_value?(feature_key, resource_name, resource_id) ⇒ Boolean
21 22 23 |
# File 'lib/feature_flagger/storage/redis.rb', line 21 def has_value?(feature_key, resource_name, resource_id) @redis.sismember("#{resource_name}:#{resource_id}", feature_key) end |
#remove(feature_key, resource_name, resource_ids) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/feature_flagger/storage/redis.rb', line 33 def remove(feature_key, resource_name, resource_ids) @redis.multi do |redis| Array(resource_ids).each do |resource_id| redis.srem("#{resource_name}:#{resource_id}", feature_key) end end end |
#remove_all(feature_key, resource_name) ⇒ Object
52 53 54 55 56 57 58 59 60 |
# File 'lib/feature_flagger/storage/redis.rb', line 52 def remove_all(feature_key, resource_name) keys = search_keys("#{resource_name}:*") @redis.multi do |redis| keys.map do |key| redis.srem(key, feature_key) end end end |
#search_keys(pattern) ⇒ Object
90 91 92 |
# File 'lib/feature_flagger/storage/redis.rb', line 90 def search_keys(pattern) @redis.keys(pattern) end |