Flippant is a library for feature toggling in Elixir applications
- Add
flippant
to your list of dependencies inmix.exs
:
def deps do
[{:flippant, "~> 2.0"}]
end
- Add an adapter such as
redix
for Redis orpostgrex
for Postgres:
def deps do
[{:redix, "~> 1.0"}]
end
- Set an adapter within your
config.exs
:
config :flippant,
adapter: Flippant.Adapter.Redis,
redis_opts: [url: System.get_env("REDIS_URL"), name: :flippant],
set_key: "flippant-features"
Complete documentation is available online, but here is a brief overview:
Features are comprised of groups
, and rules
. Your application defines named
groups
, and you set rules
to specify which groups
are enabled for a
particular feature. When it comes time to check if a feature is enabled for a
particular actor
(i.e. user or account), all the groups
for a feature are
evaluated. If the actor
belongs to any of the groups
then the feature is
enabled.
All interaction happens directly through the Flippant
module.
Define some basic groups:
Flippant.register("staff", fn %User{staff?: staff?}, _ -> staff?)
Flippant.register("testers", fn %User{id: id}, ids -> id in ids end)
Set a few rules for the "search" feature:
Flippant.enable("search", "staff")
Flippant.enable("search", "testers", [1818, 1819])
Check if the current user has access to a feature:
Flippant.enabled?("search", %User{id: 1817, staff?: false}) #=> true
Flippant.enabled?("search", %User{id: 1818, staff?: false}) #=> false
Flippant.enabled?("search", %User{id: 1820, staff?: true}) #=> true
MIT License, see LICENSE.txt for details.