Sha256: 216f98c17588f76295693ccf54ad05f9e47497bb16c724668b106b4d7068a04f

Contents?: true

Size: 1.33 KB

Versions: 48

Compression:

Stored size: 1.33 KB

Contents

module Pageflow
  # @api private
  module FeatureTarget
    STATE_MAPPING = {
      true => 'enabled',
      false => 'disabled',
      nil => 'default'
    }

    extend ActiveSupport::Concern

    included do
      serialize :features_configuration, JSON
    end

    def enabled_feature_names
      Pageflow.config.features.select do |feature|
        feature_state(feature.name) == true
      end.map(&:name)
    end

    def feature_state(name)
      state = own_feature_state(name)
      state == nil ? inherited_feature_state(name) : state
    end

    def own_feature_state(name)
      features_configuration[name]
    end

    def inherited_feature_state(name)
      Pageflow.config.features.enabled_by_default?(name)
    end

    def feature_states=(states)
      boolean_states = states.each_with_object({}) do |(key, value), result|
        if value == true || value == STATE_MAPPING[true]
          result[key] = true
        elsif value == false || value == STATE_MAPPING[false]
          result[key] = false
        elsif value.blank? || value == STATE_MAPPING[nil]
          result[key] = nil
        end
      end

      self.features_configuration = features_configuration
        .merge(boolean_states)
        .reject { |_, value| value.nil? }
    end

    def features_configuration
      self[:features_configuration] || {}
    end
  end
end

Version data entries

48 entries across 48 versions & 1 rubygems

Version Path
pageflow-14.5.2 app/models/concerns/pageflow/feature_target.rb
pageflow-15.1.0.beta2 app/models/concerns/pageflow/feature_target.rb
pageflow-15.1.0.beta1 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.2 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.1 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.0 app/models/concerns/pageflow/feature_target.rb
pageflow-14.5.1 app/models/concerns/pageflow/feature_target.rb
pageflow-14.5.0 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.0.rc2 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.0.rc1 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.0.beta4 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.0.beta3 app/models/concerns/pageflow/feature_target.rb
pageflow-14.4.0 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.0.beta2 app/models/concerns/pageflow/feature_target.rb
pageflow-15.0.0.beta1 app/models/concerns/pageflow/feature_target.rb
pageflow-14.3.0 app/models/concerns/pageflow/feature_target.rb
pageflow-14.2.1 app/models/concerns/pageflow/feature_target.rb
pageflow-14.2.0 app/models/concerns/pageflow/feature_target.rb
pageflow-14.1.1 app/models/concerns/pageflow/feature_target.rb
pageflow-14.1.0 app/models/concerns/pageflow/feature_target.rb