Class: Unleash::FeatureToggle
- Inherits:
-
Object
- Object
- Unleash::FeatureToggle
- Defined in:
- lib/unleash/feature_toggle.rb
Instance Attribute Summary collapse
-
#enabled ⇒ Object
Returns the value of attribute enabled.
-
#name ⇒ Object
Returns the value of attribute name.
-
#strategies ⇒ Object
Returns the value of attribute strategies.
-
#variant_definitions ⇒ Object
Returns the value of attribute variant_definitions.
Instance Method Summary collapse
- #get_variant(context, fallback_variant = disabled_variant) ⇒ Object
-
#initialize(params = {}) ⇒ FeatureToggle
constructor
A new instance of FeatureToggle.
- #is_enabled?(context, default_result) ⇒ Boolean
- #to_s ⇒ Object
Constructor Details
#initialize(params = {}) ⇒ FeatureToggle
Returns a new instance of FeatureToggle.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/unleash/feature_toggle.rb', line 11 def initialize(params = {}) params = {} if params.nil? self.name = params.fetch('name', nil) self.enabled = params.fetch('enabled', false) self.strategies = params.fetch('strategies', []) .select{ |s| s.has_key?('name') && Unleash::STRATEGIES.has_key?(s['name'].to_sym) } .map{ |s| ActivationStrategy.new(s['name'], s['parameters'] || {}) } || [] self.variant_definitions = (params.fetch('variants', []) || []) .select{ |v| v.is_a?(Hash) && v.has_key?('name') } .map do |v| VariantDefinition.new( v.fetch('name', ''), v.fetch('weight', 0), v.fetch('payload', nil), v.fetch('overrides', []) ) end || [] end |
Instance Attribute Details
#enabled ⇒ Object
Returns the value of attribute enabled.
9 10 11 |
# File 'lib/unleash/feature_toggle.rb', line 9 def enabled @enabled end |
#name ⇒ Object
Returns the value of attribute name.
9 10 11 |
# File 'lib/unleash/feature_toggle.rb', line 9 def name @name end |
#strategies ⇒ Object
Returns the value of attribute strategies.
9 10 11 |
# File 'lib/unleash/feature_toggle.rb', line 9 def strategies @strategies end |
#variant_definitions ⇒ Object
Returns the value of attribute variant_definitions.
9 10 11 |
# File 'lib/unleash/feature_toggle.rb', line 9 def variant_definitions @variant_definitions end |
Instance Method Details
#get_variant(context, fallback_variant = disabled_variant) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/unleash/feature_toggle.rb', line 45 def get_variant(context, fallback_variant = disabled_variant) raise ArgumentError, "Provided fallback_variant is not of type Unleash::Variant" if fallback_variant.class.name != 'Unleash::Variant' context = ensure_valid_context(context) return disabled_variant unless self.enabled && am_enabled?(context, true) return disabled_variant if sum_variant_defs_weights <= 0 variant = variant_from_override_match(context) variant = variant_from_weights(context) if variant.nil? Unleash.toggle_metrics.increment_variant(self.name, variant.name) unless Unleash.configuration.disable_metrics variant end |
#is_enabled?(context, default_result) ⇒ Boolean
36 37 38 39 40 41 42 43 |
# File 'lib/unleash/feature_toggle.rb', line 36 def is_enabled?(context, default_result) result = am_enabled?(context, default_result) choice = result ? :yes : :no Unleash.toggle_metrics.increment(name, choice) unless Unleash.configuration.disable_metrics result end |
#to_s ⇒ Object
32 33 34 |
# File 'lib/unleash/feature_toggle.rb', line 32 def to_s "<FeatureToggle: name=#{name},enabled=#{enabled},strategies=#{strategies},variant_definitions=#{variant_definitions}>" end |