mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 21:43:02 +12:00
improvement: add update_actor
to Ash.Plughelpers
(#532)
This commit is contained in:
parent
9132af470f
commit
dc2cb7b86f
1 changed files with 32 additions and 0 deletions
|
@ -83,6 +83,38 @@ if Code.ensure_loaded?(Plug.Conn) do
|
||||||
def get_actor(%{private: %{ash: %{actor: actor}}}), do: actor
|
def get_actor(%{private: %{ash: %{actor: actor}}}), do: actor
|
||||||
def get_actor(_), do: nil
|
def get_actor(_), do: nil
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Updates the actor inside the Plug connection.
|
||||||
|
|
||||||
|
The actor is stored inside the [connection's private
|
||||||
|
fields](https://hexdocs.pm/plug/Plug.Conn.html#module-private-fields).
|
||||||
|
|
||||||
|
## 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
|
||||||
|
"""
|
||||||
|
@spec update_actor(Conn.t(), (nil | Ash.Resource.record() -> nil | Ash.Resource.record())) ::
|
||||||
|
Conn.t()
|
||||||
|
def update_actor(conn, callback) do
|
||||||
|
case get_actor(conn) do
|
||||||
|
nil ->
|
||||||
|
conn
|
||||||
|
|
||||||
|
actor ->
|
||||||
|
conn
|
||||||
|
|> set_actor(callback.(actor))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Sets the tenant inside the Plug connection.
|
Sets the tenant inside the Plug connection.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue