Packages
ash_oban
0.8.10
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0-rc.1
0.8.0-rc.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.3-rc.1
0.2.3-rc.0
0.2.2
0.2.1
0.2.0
0.1.14
0.1.13
0.1.12
0.1.11
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
The extension for integrating Ash resources with Oban.
Current section
Files
Jump to
Current section
Files
usage-rules/working_with_actors.md
<!--
SPDX-FileCopyrightText: 2020 Zach Daniel
SPDX-License-Identifier: MIT
-->
# Working with Actors
AshOban can persist the actor that triggered a job, making it available when the job runs:
## Setting up Actor Persistence
```elixir
# Define an actor persister module
defmodule MyApp.ObanActorPersister do
@behaviour AshOban.PersistActor
@impl true
def store(actor) do
# Convert actor to a format that can be stored in JSON
Jason.encode!(actor)
end
@impl true
def lookup(actor_json) do
# Convert the stored JSON back to an actor
case Jason.decode(actor_json) do
{:ok, data} -> {:ok, MyApp.Accounts.get_user!(data["id"])}
error -> error
end
end
end
# Configure it
config :ash_oban, :actor_persister, MyApp.ObanActorPersister
```
## Using Actor in Triggers
```elixir
# Specify actor_persister for a specific trigger
trigger :process do
action :process
actor_persister MyApp.ObanActorPersister
end
# Pass the actor when triggering a job
AshOban.run_trigger(record, :process, actor: current_user)
```