fun_with_flags v1.5.1 FunWithFlags.Store.Persistent behaviour View Source

A behaviour module for implementing persistence adapters.

The package ships with peristence adapters for Redis and Ecto, but you can provide your own adapters by adopting this behaviour.

Link to this section Summary

Callbacks

Retrieves all the names of the persisted flags.

Retrieves all the persisted flags.

Deletes an entire flag, identified by name.

Deletes a gate from a flag, identified by name.

Retrieves a flag by name.

Persists a gate for a flag, identified by name.

A persistent adapter should return either a child specification if it needs any process to be started and supervised, or nil if it does not.

Link to this section Callbacks

Link to this callback

all_flag_names()

View Source
all_flag_names() :: {:ok, [atom()]}

Retrieves all the names of the persisted flags.

Link to this callback

all_flags()

View Source
all_flags() :: {:ok, [FunWithFlags.Flag.t()]}

Retrieves all the persisted flags.

Link to this callback

delete(flag_name)

View Source
delete(flag_name :: atom()) :: {:ok, FunWithFlags.Flag.t()} | {:error, any()}

Deletes an entire flag, identified by name.

Link to this callback

delete(flag_name, gate)

View Source
delete(flag_name :: atom(), gate :: FunWithFlags.Gate.t()) ::
  {:ok, FunWithFlags.Flag.t()} | {:error, any()}

Deletes a gate from a flag, identified by name.

Link to this callback

get(flag_name)

View Source
get(flag_name :: atom()) :: {:ok, FunWithFlags.Flag.t()}

Retrieves a flag by name.

Link to this callback

put(flag_name, gate)

View Source
put(flag_name :: atom(), gate :: FunWithFlags.Gate.t()) ::
  {:ok, FunWithFlags.Flag.t()} | {:error, any()}

Persists a gate for a flag, identified by name.

Link to this callback

worker_spec()

View Source
worker_spec() :: Supervisor.child_spec() | nil

A persistent adapter should return either a child specification if it needs any process to be started and supervised, or nil if it does not.

For example, the builtin Redis persistence adapter implements this function by delegating to Redix.child_spec/1 because it needs the Redix processes to work. On the other hand, the builtin Ecto adapter implements this function by returning nil, because the Ecto repo is provided to this package by the host application, and it's assumed that the Ecto process tree is started and supervised somewhere else.

This custom worker_spec/0 function is used instead of the typical child_spec/1 function because this function can return nil if the adapter doesn't need to be supervised, whereas child_spec/1 must return a valid child spec map.