lib/enabler.rb in enabler-0.0.3 vs lib/enabler.rb in enabler-0.0.4

- old
+ new

@@ -1,54 +1,55 @@ +require "singleton" require "enabler/version" + +require "enabler/config" require "enabler/storage/redis" require "enabler/errors/rule_already_defined_error" require "enabler/rule" module Enabler + class << self - def self.store=(val) - @@store = val - end + def store=(val) + @@store = val + end - def self.store - @@store - end + def store + @@store + end - def self.enabled?(feature, object) - enabled_via_rule?(feature, object) || - enabled_via_storage?(feature, object) - end + def enable!(feature, object) + store.add!(feature, object) + config.after_enablings[feature].call(object) if config.after_enablings[feature] + end - def self.enabled_via_storage?(feature, object) - store.enabled?(feature, object) - end + def disable!(feature, object) + store.remove!(feature, object) + config.after_disablings[feature].call(object) if config.after_disablings[feature] + end - def self.enabled_via_rule?(feature, object) - sym = feature.to_sym - r = self.rule(sym) - return false unless r - r.enabled?(object) - end + def enabled?(feature, object) + enabled_via_rule?(feature, object) || enabled_via_storage?(feature, object) + end - def self.enable!(feature, object) - store.add!(feature, object) - end + def config + Enabler::Config.instance + end - def self.disable!(feature, object) - store.remove!(feature, object) - end + def configure(&block) + config.instance_eval &block + end - def self.rules - @@rules ||= [] - end + private - def self.rule(feature) - self.rules.select { |item| item.feature == feature.to_sym }.first - end + def enabled_via_storage?(feature, object) + store.enabled?(feature, object) + end - def self.define_rule!(feature, &block) - sym = feature.to_sym - raise Errors::RuleAlreadyDefinedError if self.rule(sym) - self.rules << Rule.new(sym, block) - end + def enabled_via_rule?(feature, object) + Array(Rule.find(feature.to_sym)).map do |r| + r.enabled? object + end.include? true + end + end end