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
- RESOURCE_PREFIX =
"_r".freeze
- SCAN_EACH_BATCH_SIZE =
1000.freeze
Class Method Summary collapse
Instance Method Summary collapse
- #add(feature_key, resource_name, resource_id) ⇒ Object
- #add_all(global_key, key) ⇒ Object
- #all_values(key) ⇒ Object
- #feature_keys ⇒ Object
- #fetch_releases(resource_name, resource_id, global_key) ⇒ Object
- #has_value?(key, value) ⇒ Boolean
-
#initialize(redis) ⇒ Redis
constructor
A new instance of Redis.
- #remove(feature_key, resource_name, resource_id) ⇒ Object
- #remove_all(global_key, feature_key) ⇒ Object
-
#search_keys(query) ⇒ Object
DEPRECATED: this method will be removed from public api on v2.0 version.
- #synchronize_feature_and_resource ⇒ Object
Constructor Details
#initialize(redis) ⇒ Redis
Returns a new instance of Redis.
12 13 14 |
# File 'lib/feature_flagger/storage/redis.rb', line 12 def initialize(redis) @redis = redis end |
Class Method Details
.default_client ⇒ Object
16 17 18 19 20 |
# File 'lib/feature_flagger/storage/redis.rb', line 16 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_id) ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/feature_flagger/storage/redis.rb', line 31 def add(feature_key, resource_name, resource_id) resource_key = resource_key(resource_name, resource_id) @redis.multi do |redis| redis.sadd(feature_key, resource_id) redis.sadd(resource_key, feature_key) end end |
#add_all(global_key, key) ⇒ Object
54 55 56 57 |
# File 'lib/feature_flagger/storage/redis.rb', line 54 def add_all(global_key, key) @redis.sadd(global_key, key) remove_feature_key_from_resources(key) end |
#all_values(key) ⇒ Object
59 60 61 |
# File 'lib/feature_flagger/storage/redis.rb', line 59 def all_values(key) @redis.smembers(key) end |
#feature_keys ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/feature_flagger/storage/redis.rb', line 69 def feature_keys feature_keys = [] @redis.scan_each(match: "*") do |key| # Reject keys related to feature responsible for return # released features for a given account. next if key.start_with?("#{RESOURCE_PREFIX}:") feature_keys << key end feature_keys end |
#fetch_releases(resource_name, resource_id, global_key) ⇒ Object
22 23 24 25 |
# File 'lib/feature_flagger/storage/redis.rb', line 22 def fetch_releases(resource_name, resource_id, global_key) resource_key = resource_key(resource_name, resource_id) @redis.sunion(resource_key, global_key) end |
#has_value?(key, value) ⇒ Boolean
27 28 29 |
# File 'lib/feature_flagger/storage/redis.rb', line 27 def has_value?(key, value) @redis.sismember(key, value) end |
#remove(feature_key, resource_name, resource_id) ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/feature_flagger/storage/redis.rb', line 40 def remove(feature_key, resource_name, resource_id) resource_key = resource_key(resource_name, resource_id) @redis.multi do |redis| redis.srem(feature_key, resource_id) redis.srem(resource_key, feature_key) end end |
#remove_all(global_key, feature_key) ⇒ Object
49 50 51 52 |
# File 'lib/feature_flagger/storage/redis.rb', line 49 def remove_all(global_key, feature_key) @redis.srem(global_key, feature_key) remove_feature_key_from_resources(feature_key) end |
#search_keys(query) ⇒ Object
DEPRECATED: this method will be removed from public api on v2.0 version. use instead the feature_keys method.
65 66 67 |
# File 'lib/feature_flagger/storage/redis.rb', line 65 def search_keys(query) @redis.scan_each(match: query) end |
#synchronize_feature_and_resource ⇒ Object
83 84 85 86 87 88 |
# File 'lib/feature_flagger/storage/redis.rb', line 83 def synchronize_feature_and_resource FeatureFlagger::Storage::FeatureKeysMigration.new( @redis, FeatureFlagger.control, ).call end |