ActiveSupportCacheStore adapter
An ActiveSupportCacheStore adapter for Flipper.
Installation
Add this line to your application's Gemfile:
gem 'flipper-active_support_cache_store'
And then execute:
$ bundle
Or install it yourself with:
$ gem install flipper-active_support_cache_store
Usage
require 'active_support/cache'
require 'flipper/adapters/active_support_cache_store'
Flipper.configure do |config|
config.adapter do
Flipper::Adapters::ActiveSupportCacheStore.new(
Flipper::Adapters::Memory.new,
ActiveSupport::Cache::MemoryStore.new, # Or Rails.cache
expires_in: 5.minutes
)
end
end
Setting expires_in
is optional and will set an expiration time on Flipper cache keys. If specified, all flipper keys will use this expires_in
over the expires_in
passed to your ActiveSupport cache constructor.
Internals
Each feature is stored in the underlying cache store.
This is an example using ActiveSupport::Cache::MemoryStore
with the Flipper memory adapter.
Each key is namespaced under flipper/v1/feature/
require 'active_support/cache'
require 'flipper/adapters/active_support_cache_store'
memory_adapter = Flipper::Adapters::Memory.new
cache = ActiveSupport::Cache::MemoryStore.new
adapter = Flipper::Adapters::ActiveSupportCacheStore.new(memory_adapter, cache)
flipper = Flipper.new(adapter)
# Register a few groups.
Flipper.register(:admins) { |thing| thing.admin? }
Flipper.register(:early_access) { |thing| thing.early_access? }
# Create a user class that has flipper_id instance method.
User = Struct.new(:flipper_id)
flipper[:stats].enable
flipper[:stats].enable_group :admins
flipper[:stats].enable_group :early_access
flipper[:stats].enable_actor User.new('25')
flipper[:stats].enable_actor User.new('90')
flipper[:stats].enable_actor User.new('180')
flipper[:stats].enable_percentage_of_time 15
flipper[:stats].enable_percentage_of_actors 45
flipper[:search].enable
# reading all feature keys
pp cache.read("flipper/v1/features")
#<Set: {"stats", "search"}>
# reading a single feature
pp cache.read("flipper/v1/feature/stats")
{
:boolean=>"true",
:groups=>#<Set: {"admins", "early_access"}>,
:actors=>#<Set: {"25", "90", "180"}>,
:percentage_of_actors=>"45",
:percentage_of_time=>"15"
}
# flipper get of feature
pp adapter.get(flipper[:stats])
{
:boolean=>"true",
:groups=>#<Set: {"admins", "early_access"}>,
:actors=>#<Set: {"25", "90", "180"}>,
:percentage_of_actors=>"45",
:percentage_of_time=>"15"
}