Sha256: 43db953d71a077d75d77be23cf33cf6fb9eec839fea9c1fd830f76e2f687f334

Contents?: true

Size: 1.18 KB

Versions: 11

Compression:

Stored size: 1.18 KB

Contents

module Flipflop
  module Strategies
    class CookieStrategy < AbstractStrategy
      class << self
        def default_description
          "Stores features in a browser cookie. Applies to current user."
        end
      end

      def initialize(**options)
        # TODO: Support :expires as a runtime-evaluated option?
        @options = options.extract!(:path, :domain, :secure, :httponly).freeze
        @prefix = options.delete(:prefix).to_s.freeze
        super(**options)
      end

      def switchable?
        request?
      end

      def enabled?(feature)
        return unless request?
        return unless request.cookie_jar.has_key?(cookie_key(feature))
        cookie = request.cookie_jar[cookie_key(feature)]
        cookie_value = cookie.is_a?(Hash) ? cookie["value"] : cookie
        cookie_value === "1"
      end

      def switch!(feature, enabled)
        value = @options.merge(value: enabled ? "1" : "0")
        request.cookie_jar[cookie_key(feature)] = value
      end

      def clear!(feature)
        request.cookie_jar.delete(cookie_key(feature), **@options)
      end

      protected

      def cookie_key(feature)
        @prefix + feature.to_s
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
flipflop-2.8.0 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.7.1 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.7.0 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.6.0 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.5.0 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.4.0 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.3.1 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.3.0 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.2.1 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.2.0 lib/flipflop/strategies/cookie_strategy.rb
flipflop-2.1.0 lib/flipflop/strategies/cookie_strategy.rb