Sha256: 1b12878a6e1b8eaf0527de535f43f89d8571f604b073c51a3b5d67f111d382dd
Contents?: true
Size: 1.33 KB
Versions: 4
Compression:
Stored size: 1.33 KB
Contents
module Flipflop module Strategies class SequelStrategy < AbstractStrategy class << self def default_description "Stores features in database. Applies to all users." end def define_feature_class return Flipflop::Feature if defined?(Flipflop::Feature) model = Class.new(Sequel::Model(:flipflop_features)) model.plugin(:timestamps, force: true, update_on_create: true) model.raise_on_save_failure = true Flipflop.const_set(:Feature, model) end end def initialize(**options) @class = options.delete(:class) || self.class.define_feature_class if !@class.kind_of?(Class) @class = ActiveSupport::Inflector.constantize(@class.to_s) end super(**options) end def switchable? true end def enabled?(feature) find(feature).try(:enabled?) end def switch!(feature, enabled) record = find_or_new(feature) record.enabled = enabled record.save end def clear!(feature) find(feature).try(:destroy) end protected def find_or_new(feature) find(feature) || @class.new(key: feature.to_s) end def find(feature) @class.where(key: feature.to_s).first end end end end
Version data entries
4 entries across 4 versions & 1 rubygems