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
33 34 35 36 37 38 39 40 |
# File 'lib/feature_flagger/storage/redis.rb', line 33 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
56 57 58 59 |
# File 'lib/feature_flagger/storage/redis.rb', line 56 def add_all(global_key, key) @redis.sadd(global_key, key) remove_feature_key_from_resources(key) end |
#all_values(key) ⇒ Object
61 62 63 |
# File 'lib/feature_flagger/storage/redis.rb', line 61 def all_values(key) @redis.smembers(key) end |
#feature_keys ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/feature_flagger/storage/redis.rb', line 71 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 26 27 |
# 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) releases = @redis.sunion(resource_key, global_key) releases.select{ |release| release.start_with?(resource_name) } end |
#has_value?(key, value) ⇒ Boolean
29 30 31 |
# File 'lib/feature_flagger/storage/redis.rb', line 29 def has_value?(key, value) @redis.sismember(key, value) end |
#remove(feature_key, resource_name, resource_id) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/feature_flagger/storage/redis.rb', line 42 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
51 52 53 54 |
# File 'lib/feature_flagger/storage/redis.rb', line 51 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.
67 68 69 |
# File 'lib/feature_flagger/storage/redis.rb', line 67 def search_keys(query) @redis.scan_each(match: query) end |
#synchronize_feature_and_resource ⇒ Object
85 86 87 88 89 90 |
# File 'lib/feature_flagger/storage/redis.rb', line 85 def synchronize_feature_and_resource FeatureFlagger::Storage::FeatureKeysMigration.new( @redis, FeatureFlagger.control, ).call end |