ExAbby (ex_abby v0.5.1)
Copy MarkdownExAbby: an Elixir/Phoenix library for A/B testing.
Provides a unified interface for both Phoenix controllers and LiveView, automatically detecting and handling each case appropriately.
Summary
Functions
Excludes every active trial belonging to the supplied session IDs.
Gets or creates a trial for a single experiment. Convenience wrapper around get_variations.
Gets or creates trials for multiple experiments.
Links session-based trials to a user. This allows tracking experiments across both session and user contexts.
Records a success for a single experiment. Convenience wrapper around record_successes.
Records successes for multiple experiments.
Restores every excluded trial belonging to the supplied session IDs.
Saves session info to socket. Used on pages where you call success so you do not create a new experiment before you call results
Sets a specific variation for an experiment. Returns {:ok, trial} if successful, {:error, reason} otherwise.
Functions
Excludes every active trial belonging to the supplied session IDs.
Excluded trials remain available for audit and can be restored with
restore_session_trials/1. Returns {:ok, count} where count is the
number of rows changed.
Gets or creates a trial for a single experiment. Convenience wrapper around get_variations.
Examples:
# In Phoenix controller:
{conn, variation} = ExAbby.get_variation(conn, "experiment_name")
# In LiveView:
socket = ExAbby.get_variation(socket, session, "experiment_name")
# For user-based:
variation = ExAbby.get_variation(user, "experiment_name")
Gets or creates trials for multiple experiments.
Examples:
# In Phoenix controller:
{conn, variations} = ExAbby.get_variations(conn, ["exp1", "exp2"])
# In LiveView:
socket = ExAbby.get_variations(socket, session, ["exp1", "exp2"])
# For user-based:
variations = ExAbby.get_variations(user, ["exp1", "exp2"])
Links session-based trials to a user. This allows tracking experiments across both session and user contexts.
Examples:
# Link all session experiments (default):
conn = ExAbby.link_session_to_user(conn, user)
# Link specific experiments:
conn = ExAbby.link_session_to_user(conn, user, ["exp1", "exp2"])
# In LiveView:
socket = ExAbby.link_session_to_user(socket, user)
# With user_id directly:
conn = ExAbby.link_session_to_user(conn, user_id)Returns updated conn/socket with the link operation results.
Records a success for a single experiment. Convenience wrapper around record_successes.
Records successes for multiple experiments.
Options
:amount- Optional numeric value to track with the success (default: 0.0):success_type- Type of success to record, either:success1or:success2(default::success1)
Examples:
# In Phoenix controller:
{:ok, results} = ExAbby.record_successes(conn, ["exp1", "exp2"])
{:error, %{successful: ["exp1"], failed: ["exp2"]}} = ExAbby.record_successes(conn, ["exp1", "exp2"])
# In LiveView:
{:ok, results} = ExAbby.record_successes(socket, ["exp1", "exp2"])
# For user-based:
{:ok, results} = ExAbby.record_successes(user, ["exp1", "exp2"])Returns either:
{:ok, %{experiment_name => {:ok, trial}}}if all successful{:error, %{successful: [...], failed: [...]}}if any failed
Restores every excluded trial belonging to the supplied session IDs.
Returns {:ok, count} where count is the number of rows changed.
@spec save_session_data(Phoenix.LiveView.Socket.t(), map()) :: map()
Saves session info to socket. Used on pages where you call success so you do not create a new experiment before you call results
Sets a specific variation for an experiment. Returns {:ok, trial} if successful, {:error, reason} otherwise.
Examples:
# In Phoenix controller:
{:ok, trial} = ExAbby.set_variation(conn, "experiment_name", "variation_name")
# In LiveView:
{:ok, trial} = ExAbby.set_variation(socket, "experiment_name", "variation_name")
# For user-based:
{:ok, trial} = ExAbby.set_variation(user, "experiment_name", "variation_name")
See ExAbby.Experiments.upsert_experiment_and_update_weights/4.