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