lib/flipper/adapter.rb in flipper-0.11.0.beta1 vs lib/flipper/adapter.rb in flipper-0.11.0.beta3
- old
+ new
@@ -1,8 +1,25 @@
module Flipper
# Adding a module include so we have some hooks for stuff down the road
module Adapter
+ def self.included(base)
+ base.extend(ClassMethods)
+ end
+
+ module ClassMethods
+ # Public: Default config for a feature's gate values.
+ def default_config
+ {
+ boolean: nil,
+ groups: Set.new,
+ actors: Set.new,
+ percentage_of_actors: nil,
+ percentage_of_time: nil,
+ }
+ end
+ end
+
# Public: Get multiple features in one call. Defaults to one get per
# feature. Feel free to override per adapter to make this more efficient and
# reduce network calls.
def get_multi(features)
result = {}
@@ -10,16 +27,57 @@
result[feature.key] = get(feature)
end
result
end
+ # Public: Wipe features and gate values and then import features and gate
+ # values from provided adapter.
+ #
+ # Returns nothing.
+ def import(source_adapter)
+ wipe
+ copy_features_and_gates(source_adapter)
+ nil
+ end
+
+ # Public: Default config for a feature's gate values.
def default_config
- {
- boolean: nil,
- groups: Set.new,
- actors: Set.new,
- percentage_of_actors: nil,
- percentage_of_time: nil,
- }
+ self.class.default_config
+ end
+
+ private
+
+ # Private: Copy source adapter features and gate values into self.
+ def copy_features_and_gates(source_adapter)
+ source_adapter.features.each do |key|
+ source_feature = Flipper::Feature.new(key, source_adapter)
+ destination_feature = Flipper::Feature.new(key, self)
+
+ case source_feature.state
+ when :on
+ destination_feature.enable
+ when :conditional
+ source_feature.groups_value.each do |value|
+ destination_feature.enable_group(value)
+ end
+
+ source_feature.actors_value.each do |value|
+ destination_feature.enable_actor(Flipper::Actor.new(value))
+ end
+
+ destination_feature.enable_percentage_of_actors(source_feature.percentage_of_actors_value)
+ destination_feature.enable_percentage_of_time(source_feature.percentage_of_time_value)
+ when :off
+ destination_feature.add
+ end
+ end
+ end
+
+ # Private: Completely wipe adapter features and gate values.
+ def wipe
+ features.each do |key|
+ feature = Flipper::Feature.new(key, self)
+ remove(feature)
+ end
end
end
end