View Source Changelog for Oban v2.15
🌟 Looking for changes to Web or Pro? Check the Oban.Pro Changelog or the Oban.Web Changelog. 🌟
🐑 Oban Instance Module
New facade modules allow you to call Oban
functions on instances with custom names, e.g. not
Oban
, without passing a 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"} #=> false
The 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]
v2.16.0 — 2023-09-22
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
, andlog
query options inuse Oban.Testing
For changes prior to v2.16 see the v2.15 docs.