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
- MANIFEST_PREFIX =
"_m".freeze
- MANIFEST_KEY =
"manifest_file".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.
- #read_manifest_backup ⇒ Object
- #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
- #write_manifest_backup(yaml_as_string) ⇒ Object
Constructor Details
#initialize(redis) ⇒ Redis
Returns a new instance of Redis.
14 15 16 |
# File 'lib/feature_flagger/storage/redis.rb', line 14 def initialize(redis) @redis = redis end |
Class Method Details
.default_client ⇒ Object
18 19 20 21 22 |
# File 'lib/feature_flagger/storage/redis.rb', line 18 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
35 36 37 38 39 40 41 42 |
# File 'lib/feature_flagger/storage/redis.rb', line 35 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
58 59 60 61 |
# File 'lib/feature_flagger/storage/redis.rb', line 58 def add_all(global_key, key) @redis.sadd(global_key, key) remove_feature_key_from_resources(key) end |
#all_values(key) ⇒ Object
63 64 65 |
# File 'lib/feature_flagger/storage/redis.rb', line 63 def all_values(key) @redis.smembers(key) end |
#feature_keys ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/feature_flagger/storage/redis.rb', line 73 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}:") next if key.start_with?("#{MANIFEST_PREFIX}:") feature_keys << key end feature_keys end |
#fetch_releases(resource_name, resource_id, global_key) ⇒ Object
24 25 26 27 28 29 |
# File 'lib/feature_flagger/storage/redis.rb', line 24 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
31 32 33 |
# File 'lib/feature_flagger/storage/redis.rb', line 31 def has_value?(key, value) @redis.sismember(key, value) end |
#read_manifest_backup ⇒ Object
95 96 97 |
# File 'lib/feature_flagger/storage/redis.rb', line 95 def read_manifest_backup @redis.get("#{MANIFEST_PREFIX}:#{MANIFEST_KEY}") end |
#remove(feature_key, resource_name, resource_id) ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/feature_flagger/storage/redis.rb', line 44 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
53 54 55 56 |
# File 'lib/feature_flagger/storage/redis.rb', line 53 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.
69 70 71 |
# File 'lib/feature_flagger/storage/redis.rb', line 69 def search_keys(query) @redis.scan_each(match: query) end |
#synchronize_feature_and_resource ⇒ Object
88 89 90 91 92 93 |
# File 'lib/feature_flagger/storage/redis.rb', line 88 def synchronize_feature_and_resource FeatureFlagger::Storage::FeatureKeysMigration.new( @redis, FeatureFlagger.control, ).call end |
#write_manifest_backup(yaml_as_string) ⇒ Object
99 100 101 |
# File 'lib/feature_flagger/storage/redis.rb', line 99 def write_manifest_backup(yaml_as_string) @redis.set("#{MANIFEST_PREFIX}:#{MANIFEST_KEY}", yaml_as_string) end |