class FeatureFlagger::Storage::FeatureKeysMigration

Public Class Methods

new(from_redis, to_control) click to toggle source
# File lib/feature_flagger/storage/feature_keys_migration.rb, line 7
def initialize(from_redis, to_control)
  @from_redis = from_redis
  @to_control = to_control
end

Public Instance Methods

call() click to toggle source

call migrates features key from the old fashioned to the new format.

It must replicate feature keys with changes:

from “avenue:traffic_lights” => 42 to “avenue:42” => traffic_lights

# File lib/feature_flagger/storage/feature_keys_migration.rb, line 19
def call
  @from_redis.scan_each(match: "*", count: FeatureFlagger::Storage::Redis::SCAN_EACH_BATCH_SIZE) do |redis_key|
    # filter out resource_keys
    next if redis_key.start_with?("#{FeatureFlagger::Storage::Redis::RESOURCE_PREFIX}:")

    migrate_key(redis_key)
  end
end

Private Instance Methods

feature_released_to_all?(key) click to toggle source
# File lib/feature_flagger/storage/feature_keys_migration.rb, line 44
def feature_released_to_all?(key)
  FeatureFlagger::Control::RELEASED_FEATURES == key
end
migrate_key(key) click to toggle source
# File lib/feature_flagger/storage/feature_keys_migration.rb, line 30
def migrate_key(key)
  return migrate_release_to_all(key) if feature_released_to_all?(key)

  migrate_release(key)
end
migrate_release(key) click to toggle source
# File lib/feature_flagger/storage/feature_keys_migration.rb, line 48
def migrate_release(key)
  resource_ids = @from_redis.smembers(key)

  resource_ids.each do |id|
    @to_control.release(key, id)
  end
end
migrate_release_to_all(key) click to toggle source
# File lib/feature_flagger/storage/feature_keys_migration.rb, line 36
def migrate_release_to_all(key)
  features = @from_redis.smembers(key)

  features.each do |feature_key|
    @to_control.release_to_all(feature_key)
  end
end