View Source Toggle.Flags (toggle v0.1.1)

Provides a set of functions for managing feature flags.

A feature flag in Toggle is a named boolean value that can be enabled or disabled on two levels:

  • Globally: The flag is either enabled or disabled for all resources.
  • Individually: The flag can be enabled or disabled for a specific resource.

A resource is a key-value pair that can be used to enable or disable a flag for a specific entity, for example: org_id: 123 or user_id: 456.

When a flag is enabled for a resource, that resource's value takes precedence over the global value, for example:

iex> Flags.create_flag(%{name: "my_flag", enabled: true})
iex> Flags.enabled?("my_flag")
true
iex> Flags.enabled?("my_flag", org_id: 123)
true
iex> Flags.disable!("my_flag", org_id: 123)
iex> Flags.enabled?("my_flag")
true
iex> Flags.enabled?("my_flag", org_id: 353)
true
iex> Flags.enabled?("my_flag", org_id: 123)
false

Summary

Functions

Creates a new flag.

Deletes a flag.

Globally disables the given flag. Will create the given flag if it does not exist.

Disable the given flag for the given resource. Will create the given flag if it does not exist.

Is the given flag disabled?

Returns if the given flag is disabled for the given entity.

Globally enables the given flag. Will create the given flag if it does not exist.

Enable the given flag for the given resource. Will create the given flag if it does not exist.

Is the given flag enabled?

Returns if the given flag is enabled for the given resource.

Get a flag by the given filters.

Get all flags by the given filters.

Updates a flag.

Types

resource()

@type resource() :: [{resource_key(), resource_value()}]

resource_key()

@type resource_key() :: atom() | String.t() | number()

resource_value()

@type resource_value() :: atom() | String.t() | number()

Functions

create_flag(attrs)

@spec create_flag(attrs :: map()) ::
  {:ok, Toggle.Flags.Flag.t()} | {:error, Ecto.Changeset.t()}

Creates a new flag.

delete_flag(flag)

@spec delete_flag(flag :: Toggle.Flags.Flag.t()) ::
  {:ok, Toggle.Flags.Flag.t()} | {:error, Ecto.Changeset.t()}

Deletes a flag.

disable!(flag)

@spec disable!(flag :: Toggle.Flags.Flag.t()) :: :ok
@spec disable!(String.t()) :: :ok
@spec disable!(atom()) :: :ok

Globally disables the given flag. Will create the given flag if it does not exist.

disable!(flag, list)

@spec disable!(flag :: Toggle.Flags.Flag.t(), meta :: resource()) :: :ok

Disable the given flag for the given resource. Will create the given flag if it does not exist.

disabled?(flag_or_flag_name)

@spec disabled?(flag :: Toggle.Flags.Flag.t()) :: boolean()
@spec disabled?(String.t()) :: boolean()
@spec disabled?(atom()) :: boolean()

Is the given flag disabled?

disabled?(flag_or_flag_name, meta)

Returns if the given flag is disabled for the given entity.

enable!(flag)

@spec enable!(flag :: Toggle.Flags.Flag.t()) :: :ok
@spec enable!(String.t()) :: :ok
@spec enable!(atom()) :: :ok

Globally enables the given flag. Will create the given flag if it does not exist.

enable!(flag, list)

@spec enable!(flag :: Toggle.Flags.Flag.t(), meta :: resource()) :: :ok

Enable the given flag for the given resource. Will create the given flag if it does not exist.

enabled?(flag)

@spec enabled?(flag :: Toggle.Flags.Flag.t()) :: boolean()
@spec enabled?(String.t()) :: boolean()
@spec enabled?(atom()) :: boolean()

Is the given flag enabled?

enabled?(flag, arg2)

@spec enabled?(flag :: Toggle.Flags.Flag.t(), meta :: resource()) :: boolean()

Returns if the given flag is enabled for the given resource.

get_flag(flag_name)

@spec get_flag(filters :: Keyword.t()) :: Toggle.Flags.Flag.t() | nil
@spec get_flag(String.t() | atom()) :: Toggle.Flags.Flag.t() | nil

get_flag(flag_name, filters)

@spec get_flag(String.t() | atom(), filters :: Keyword.t()) ::
  Toggle.Flags.Flag.t() | nil

Get a flag by the given filters.

list_flags(filters \\ [])

@spec list_flags(filters :: Keyword.t()) :: [Toggle.Flags.Flag.t()]

Get all flags by the given filters.

update_flag(flag, attrs)

@spec update_flag(flag :: Toggle.Flags.Flag.t(), attrs :: map()) ::
  {:ok, Toggle.Flags.Flag.t()} | {:error, Ecto.Changeset.t()}

Updates a flag.