Home

Awesome

Flippant

Build Status Coverage Status Hex version Inline docs

Flippant is a library for feature toggling in Elixir applications

Installation

  1. Add flippant to your list of dependencies in mix.exs:
def deps do
  [{:flippant, "~> 2.0"}]
end
  1. Add an adapter such as redix for Redis or postgrex for Postgres:
def deps do
  [{:redix, "~> 1.0"}]
end
  1. 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"

Usage

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

License

MIT License, see LICENSE.txt for details.