#
View Source Ash.PlugHelpers (ash v2.14.2)

Helpers for working with the Plug connection.

# Link to this section Summary

## Functions

get_actor(arg1)

Retrieves the actor from the Plug connection.

get_context(arg1)

Retrieves the context from the Plug connection.

get_tenant(arg1)

Retrieves the tenant from the Plug connection.

set_actor(conn, actor)

Sets the actor inside the Plug connection.

set_context(conn, context)

Sets the context inside the Plug connection.

set_tenant(conn, tenant)

Sets the tenant inside the Plug connection.

update_actor(conn, callback)

Updates the actor inside the Plug connection.

update_context(conn, callback)

Updates the context inside the Plug connection.

# Link to this section Functions

Link to this function

# get_actor(arg1)

View Source

    @spec get_actor(Plug.Conn.t()) :: nil | Ash.Resource.record()

Retrieves the actor from the Plug connection.

The actor is stored inside the connection's private fields.

##

deprecation-warning

Deprecation warning

This function checks to see if the actor is already set in the `@actor` assign, and if so will emit a deprecation warning.

This is to allow apps using the previous method a chance to update.

Rather than setting the actor in the assigns, please use the `set_actor/2` method.

##

example

Example

    iex> actor = build_actor(%{email: "marty@1985.retro"})
    ...> conn = build_conn() |> put_private(:ash, %{actor: actor})
    ...> actor = get_actor(conn)
    %{email: "marty@1985.retro"} = actor

    iex> actor = build_actor(%{email: "marty@1985.retro"})
    ...> conn = build_conn() |> assign(:actor, actor)
    ...> actor = get_actor(conn)
    %{email: "marty@1985.retro"} = actor

Link to this function

# get_context(arg1)

View Source

    @spec get_context(Plug.Conn.t()) :: nil | Ash.Resource.record()

Retrieves the context from the Plug connection.

The context is stored inside the connection's private fields.

##

example

Example

    iex> context = %{fraud_score: 0.427}
    ...> conn = build_conn() |> put_private(:ash, %{context: context})
    ...> context = get_context(conn)
    %{fraud_score: 0.427}

Link to this function

# get_tenant(arg1)

View Source

    @spec get_tenant(Plug.Conn.t()) :: nil | Ash.Resource.record()

Retrieves the tenant from the Plug connection.

The tenant is stored inside the connection's private fields.

##

deprecation-warning

Deprecation warning

This function checks to see if the tenant is already set in the `@tenant` assign, and if so will emit a deprecation warning.

This is to allow apps using the previous method a chance to update.

Rather than setting the tenant in the assigns, please use the `set_tenant/2` method.

##

example

Example

    iex> conn = build_conn() |> put_private(:ash, %{tenant: "my-tenant"})
    ...> tenant = get_tenant(conn)
    "my_tenant" = tenant

    iex> conn = build_conn() |> assign(:tenant, "my-tenant")
    ...> tenant = get_tenant(conn)
    "my_tenant" = tenant

Link to this function

# set_actor(conn, actor)

View Source

    @spec set_actor(Plug.Conn.t(), Ash.Resource.record()) :: Plug.Conn.t()

Sets the actor inside the Plug connection.

The actor is stored inside the connection's private fields.

##

example

Example

    iex> actor = build_actor(%{email: "marty@1985.retro"})
    ...> conn = build_conn() |> set_actor(actor)
    %Plug.Conn{private: %{ash: %{actor: %{email: "marty@1985.retro"}}}} = conn

Link to this function

# set_context(conn, context)

View Source

    @spec set_context(Plug.Conn.t(), Ash.Resource.record()) :: Plug.Conn.t()

Sets the context inside the Plug connection.

Context can be used to store abitrary data about the user, connection, or anything else you like that doesn't belong as part of the actor or tenant.

The context is stored inside the connection's private fields.

##

example

Example

    iex> context = %{fraud_score: 0.427}
    ...> conn = build_conn() |> set_context(context)
    %Plug.Conn{private: %{ash: %{context: %{fraud_score: 0.427}}}}

Link to this function

# set_tenant(conn, tenant)

View Source

    @spec set_tenant(Plug.Conn.t(), String.t()) :: Plug.Conn.t()

Sets the tenant inside the Plug connection.

The tenant is stored inside the connection's private fields.

##

example

Example

    iex> conn = build_conn() |> set_tenant("my-tenant")
    %Plug.Conn{private: %{ash: %{tenant: "my-tenant}}} = conn

Link to this function

# update_actor(conn, callback)

View Source

    @spec update_actor(
      Plug.Conn.t(),
      (nil | Ash.Resource.record() -> nil | Ash.Resource.record())
    ) ::
      Plug.Conn.t()

Updates the actor inside the Plug connection.

The actor is stored inside the connection's private fields.

##

example

Example

    iex> actor = build_actor(%{email: "marty@1985.retro"})
    ...> conn = build_conn() |> put_private(:ash, %{actor: actor})
    ...> actor = get_actor(conn)
    %{email: "marty@1985.retro"} = actor
    ...> conn = update_actor(conn, fn actor -> Map.put(actor, :name, "Marty Retro") end)
    ...> actor = get_actor(conn)
    %{email: "marty@1985.retro", name: "Marty Retro"} = actor
    ...> conn = update_actor(conn, fn actor -> Map.delete(actor, :email) end)
    ...> actor = get_actor(conn)
    %{name: "Marty Retro"} = actor

Link to this function

# update_context(conn, callback)

View Source

    @spec update_context(
      Plug.Conn.t(),
      (nil | Ash.Resource.record() -> nil | Ash.Resource.record())
    ) ::
      Plug.Conn.t()

Updates the context inside the Plug connection.

The context is stored inside the connection's private fields.

##

example

Example

    iex> context = %{species: "Fythetropozoat"}
    ...> conn = build_conn() |> put_private(:ash, %{context: context})
    ...> context = get_context(conn)
    %{fraud_score: 0.427}
    ...> conn = update_context(conn, fn context -> Map.put(context, :location, "Barnard's Loop") end)
    ...> context = get_context(conn)
    %{species: "Fythetropozoat", location: "Barnard's Loop"}
    ...> conn = update_context(conn, fn context -> Map.delete(context, :fraud_score) end)
    ...> context = get_context(conn)
    %{location: "Barnard's Loop"}