class SimpleSwitch::FeatureManagerDb

Attributes

feature_config[R]

Public Class Methods

instance() click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 10
def self.instance
  return @@instance ||= send(:new)
end

Private Class Methods

new() click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 6
def initialize
  @feature_config = load_config
end

Public Instance Methods

add_environment(options) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 31
def add_environment(options)
  SimpleSwitch::Environment.find_or_create_by(name: options[:name])

  reload_config!
end
add_feature(options) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 20
def add_feature(options)
  feature = SimpleSwitch::Feature.find_or_create_by(name: options[:name])
  feature.update(description: options[:description])

  reload_config!
end
add_state(options) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 37
def add_state(options)
  feature     = SimpleSwitch::Feature.find_by_name(options[:feature])
  environment = SimpleSwitch::Environment.find_by_name(options[:environment])

  feature.states.create(status: options[:status], environment: environment)
  reload_config!
end
delete(feature) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 51
def delete(feature)
  feature_config.delete(feature) if valid_feature_name?(feature)

  SimpleSwitch::Feature.find_by_name(feature).destroy
end
has_environment?(environment) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 27
def has_environment?(environment)
  SimpleSwitch::Environment.find_by_name(environment).present?
end
has_feature?(feature) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 16
def has_feature?(feature)
  SimpleSwitch::Feature.find_by_name(feature).present?
end
update(feature, env, value) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 45
def update(feature, env, value)
  states(feature)[env][0] = value if valid_feature_name_for_env?(feature, env)

  SimpleSwitch::State.update(states(feature)[env][1], status: value)
end

Private Instance Methods

load_config() click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 59
def load_config
  features = SimpleSwitch::Feature.includes([:states, :environments]).all

  HashWithIndifferentAccess.new(
    features.inject({}) do |hash, f|
      hash.merge(
        f.name => {
          description: f.description,
          states:      f.states.inject({}) { |h, s| h.merge(s.environment.name => [s.status, s.id]) }
        })
    end
  )
end
valid_feature_name_for_env_with_message?(feature, env=Rails.env) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 79
def valid_feature_name_for_env_with_message?(feature, env=Rails.env)
  return true if valid_feature_name_for_env_without_message?(feature, env)

  raise "Cannot find environment '#{env}' for feature '#{feature}', check out your database."
end
valid_feature_name_with_message?(feature) click to toggle source
# File lib/simple_switch/feature_manager_db.rb, line 73
def valid_feature_name_with_message?(feature)
  return true if valid_feature_name_without_message?(feature)

  raise "Cannot find feature '#{feature}', check out your database."
end