diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6e3d9f87..b4b36ffe 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,6 +18,7 @@ jobs: max-parallel: 1 matrix: ruby: + - '3.3.0' - '3.3' - '3.4' - '4.0' diff --git a/CHANGELOG.md b/CHANGELOG.md index 7aabaf8f..51363886 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ - [OpenAPI] Add `openapi:validate` Rake task for OpenAPI tags validation (#163). +### Fixed + +- Correctly enqueue deferred tasks with only positional arguments on Ruby < 3.3.4 (#385). + ## [1.27.0] - 2026-08-06 ### Added diff --git a/lib/rage/deferred/task.rb b/lib/rage/deferred/task.rb index 2e650aef..b24c9dd7 100644 --- a/lib/rage/deferred/task.rb +++ b/lib/rage/deferred/task.rb @@ -73,6 +73,7 @@ def __perform(context) Rage.logger.with_context(task_log_context) do args = Rage::Deferred::Context.get_args(context) kwargs = Rage::Deferred::Context.get_kwargs(context) + kwargs ||= {} if RUBY_VERSION.start_with?("3.3.") perform(*args, **kwargs) end diff --git a/spec/deferred/task_spec.rb b/spec/deferred/task_spec.rb index c5fe1481..fb68b34c 100644 --- a/spec/deferred/task_spec.rb +++ b/spec/deferred/task_spec.rb @@ -319,6 +319,17 @@ def perform(arg, kwarg:) expect(task).to have_received(:perform).with("arg1", kwarg: "kwarg1") end + context "without keyword arugments" do + before do + allow(Rage::Deferred::Context).to receive(:get_kwargs).with(context).and_return(nil) + end + + it "calls perform with correct arguments" do + task.__perform(context) + expect(task).to have_received(:perform).with("arg1") + end + end + it "logs with context and tag" do task.__perform(context) expect(logger).to have_received(:with_context).with({ task: "MyTask", attempt: 2 })