v2.16.0
🐑 Oban Instance Module
New facade modules allow you to call Oban functions on instances with custom names, e.g. not Oban, without passing a t:Oban.name/0 as the first argument.
For example, rather than calling Oban.config/1, you'd call MyOban.config/0:
MyOban.config()It also makes piping into Oban functions far more convenient:
%{some: :args}
|> MyWorker.new()
|> MyOban.insert()🧩 Partial Matches in Testing Assertions
It's now possible to match a subset of fields on args or meta with all_enqueued, assert_enqueued, and refute_enqueued. For example, the following assertion will now pass:
# Given a job with these args: %{id: 123, mode: "active"}
assert_enqueued args: %{id: 123} #=> true
assert_enqueued args: %{mode: "active"} #=> true
assert_enqueued args: %{id: 321, mode: "active"} #=> falseThe change applies to args and meta queries for all_enqueued/2, assert_enqueued/2 and refute_enqueued/2 helpers.
⏲️ Unique Timestamp Option
Jobs are frequently scheduled for a time far in the future and it's often desirable for to consider scheduled jobs for uniqueness, but unique jobs only checked the :inserted_at timestamp.
Now unique has a timestamp option that allows checking the :scheduled_at timestamp instead:
use Oban.Worker, unique: [period: 120, timestamp: :scheduled_at]Bug Fixes
-
[Reindexer] Correct relname match for reindexer plugin
We can safely assume all indexes start with
oban_jobs. The previous pattern was based on an outdated index format from older migrations. -
[Testing] Support
repo,prefix, andlogquery options inuse Oban.Testing