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