class FlipFab::ContextualFeature

Attributes

context[R]
feature[R]

Public Class Methods

new(feature, context) click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 5
def initialize(feature, context)
  @feature = feature
  @context = context
  return unless overridden?

  @state = override
  persist
end

Public Instance Methods

as_json(options = {}) click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 14
def as_json(options = {})
  {
    'feature' => feature.as_json(options)
  }
end
disable() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 32
def disable
  self.state = :disabled
end
disabled?() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 24
def disabled?
  !enabled?
end
enable() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 28
def enable
  self.state = :enabled
end
enabled?() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 20
def enabled?
  state == :enabled
end
persist() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 44
def persist
  persistence_adapters.each { |adapter| adapter.write state }
end
state=(value) click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 36
def state=(value)
  raise "Invalid state provided: `#{value}`, possible states are :enabled, :disabled" unless %i[enabled disabled].include? value
  return if overridden?

  @state = value
  persist
end

Private Instance Methods

default_state() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 70
def default_state
  feature.default
end
first_adapter_with_state() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 66
def first_adapter_with_state
  persistence_adapters.detect { |adapter| !adapter.read.nil? }
end
overridden?() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 83
def overridden?
  !override.nil?
end
override() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 74
def override
  return unless context.respond_to? :params

  override = context.params[feature.name.to_s]
  return unless %w[enabled disabled].include? override

  override.to_sym
end
persistence_adapters() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 50
def persistence_adapters
  @persistence_adapters ||= feature.persistence_adapters.map { |adapter_class| adapter_class.new feature.name, context }
end
state() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 54
def state
  @state ||= state_in_context? ? state_from_context : default_state
end
state_from_context() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 62
def state_from_context
  first_adapter_with_state.read
end
state_in_context?() click to toggle source
# File lib/flip_fab/contextual_feature.rb, line 58
def state_in_context?
  !first_adapter_with_state.nil?
end