Flippant is a library for feature toggling in Elixir applications
- Add
flippantto your list of dependencies inmix.exs:
def deps do
[{:flippant, "~> 2.0"}]
end- Add an adapter such as
redixfor Redis orpostgrexfor 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}) #=> trueMIT License, see LICENSE.txt for details.