hyde

Feature Toggles for Elixir - Basic Redis backed feature toggles for individual users or named groups



Documentation

Mr. Hyde

Hyde

Feature Toggles for Elixir

Basic Redis backed module to make flipping features on/off for individuals or named groups a snap

WARNING - Alpha software: likely to change APIs significantly as it is under active development

Installation

If available in Hex, the package can be installed as:

  1. Add hyde to your list of dependencies in mix.exs:

    def deps do
      [{:hyde, "~> 0.0.1"}]
    end
    
  2. Ensure hyde is started before your application:

    def application do
      [applications: [:hyde]]
    end
    

Usage

Hyde is a convenience wrapper around ExRedis that exposes basic toggling capabilities by checking if a feature is active? using:

  • a global feature name
  • custom unique (user) id
  • the name of a group.

Hyde.active? will return {:ok, true} or false

Global

{:ok, client} = Exredis.start_link

if Hyde.active?(client, :my_feature) do
  # Do Feature Code
end

case Hyde.active?(client, :my_feature) do
  {:ok, true} -> 
    # Do Feature Code
  false ->
    # Do Nada
end

# Turn on a feature for all
client |> Hyde.activate(:my_feature)

# Query a feature for all
client |> Hyde.active?(:my_feature) 
#true

client |> Hyde.inactive?(:my_feature) 
#false

ID Based

{:ok, user} = YourApp.User()
{:ok, client} = Exredis.start_link

if Hyde.active?(client, :my_feature, user.id) do
  # Do Feature Code
end

# Turn on a feature for single user
client |> Hyde.activate(:my_feature, user.id)

# Query a feature for single user
client |> Hyde.active?(:my_feature, user.id) 
#true

client |> Hyde.inactive?(:my_feature, user.id) 
#false

Named Group Based

{:ok, user} = YourApp.User()
{:ok, client} = Exredis.start_link

if Hyde.active?(client, :my_feature, :admins) do
  # Do Feature Code
end

# Turn on a feature for single user
client |> Hyde.activate(:my_feature, :admins)

# Query a feature for single user
client |> Hyde.active?(:my_feature, :admins) 
#true

client |> Hyde.inactive?(:my_feature, :admins) 
#false

TODO

  • Move Redis client creation to initialization/lazy vs passing it in all the time