Skip to content

Commit 5aa8398

Browse files
committed
Correctly handle jobs when ActiveSupport.parse_json_times is enabled
1 parent 6dc5c66 commit 5aa8398

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

app/models/solid_queue/job.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ class EnqueueError < StandardError; end
66

77
include Executable, Clearable, Recurrable
88

9-
serialize :arguments, coder: JSON
9+
if Rails.gem_version < Gem::Version.new("8.1")
10+
serialize :arguments, coder: ::SolidQueue::Coders::JSON
11+
else
12+
serialize :arguments, coder: ::SolidQueue::Coders::JSON.new
13+
end
1014

1115
class << self
1216
def enqueue_all(active_jobs)

lib/solid_queue.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require "solid_queue/version"
44
require "solid_queue/engine"
5+
require "solid_queue/coders/json"
56

67
require "active_job"
78
require "active_job/queue_adapters"

lib/solid_queue/coders/json.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# frozen_string_literal: true
2+
3+
if Rails.gem_version < Gem::Version.new("8.1")
4+
module SolidQueue
5+
module Coders
6+
class JSON
7+
class << self
8+
delegate :dump, to: ::ActiveRecord::Coders::JSON
9+
end
10+
11+
def self.load(json)
12+
::JSON.parse(json) unless json.blank?
13+
end
14+
end
15+
end
16+
end
17+
else
18+
module SolidQueue
19+
module Coders
20+
class JSON < ::ActiveRecord::Coders::JSON
21+
def load(json)
22+
::JSON.parse(json, @options) unless json.blank?
23+
end
24+
end
25+
end
26+
end
27+
end

test/models/solid_queue/job_test.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,30 @@ class DiscardableNonOverlappingGroupedJob2 < NonOverlappingJob
6464
assert_equal 8, execution.priority
6565
end
6666

67+
test "enqueue active job to be executed right away when active support is set to parse dates" do
68+
ActiveSupport.parse_json_times = true
69+
active_job = AddToBufferJob.new(1).set(priority: 8, queue: "test")
70+
71+
assert_ready do
72+
SolidQueue::Job.enqueue(active_job)
73+
end
74+
75+
solid_queue_job = SolidQueue::Job.last
76+
assert solid_queue_job.ready?
77+
assert_equal :ready, solid_queue_job.status
78+
assert_equal solid_queue_job.id, active_job.provider_job_id
79+
assert_equal 8, solid_queue_job.priority
80+
assert_equal "test", solid_queue_job.queue_name
81+
assert_equal "AddToBufferJob", solid_queue_job.class_name
82+
assert Time.now >= solid_queue_job.scheduled_at
83+
assert_equal [ 1 ], solid_queue_job.arguments["arguments"]
84+
85+
execution = SolidQueue::ReadyExecution.last
86+
assert_equal solid_queue_job, execution.job
87+
assert_equal "test", execution.queue_name
88+
assert_equal 8, execution.priority
89+
end
90+
6791
test "enqueue active job to be scheduled in the future" do
6892
active_job = AddToBufferJob.new(1).set(priority: 8, queue: "test")
6993

0 commit comments

Comments
 (0)