Sha256: a872d1cfbee924bfbb75af1db73c93f53d4c011e61b5b02a943915a0125d2358

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

module Flipflop
  module Strategies
    class ActiveRecordStrategy < 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(ActiveRecord::Base)
          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).first.try(:enabled?)
      end

      def switch!(feature, enabled)
        record = find(feature).first_or_initialize
        record.enabled = enabled
        record.save!
      end

      def clear!(feature)
        find(feature).first.try(:destroy)
      end

      protected

      def find(feature)
        @class.where(key: feature.to_s)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
flipflop-2.7.1 lib/flipflop/strategies/active_record_strategy.rb
flipflop-2.7.0 lib/flipflop/strategies/active_record_strategy.rb
flipflop-2.6.0 lib/flipflop/strategies/active_record_strategy.rb
flipflop-2.5.0 lib/flipflop/strategies/active_record_strategy.rb