Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion app/models/solid_queue/job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ class EnqueueError < StandardError; end

include Executable, Clearable, Recurrable

serialize :arguments, coder: JSON
if Rails.gem_version < Gem::Version.new("8.1")
serialize :arguments, coder: ::SolidQueue::Coders::JSON
else
serialize :arguments, coder: ::SolidQueue::Coders::JSON.new
end

class << self
def enqueue_all(active_jobs)
Expand Down
2 changes: 2 additions & 0 deletions lib/solid_queue.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

require "solid_queue/version"
require "solid_queue/engine"
require "solid_queue/coders/json"

require "active_job"
require "active_job/queue_adapters"
Expand All @@ -15,6 +16,7 @@
loader.ignore("#{__dir__}/solid_queue/tasks.rb")
loader.ignore("#{__dir__}/generators")
loader.ignore("#{__dir__}/puma")
loader.inflector.inflect("json" => "JSON")
loader.setup

module SolidQueue
Expand Down
27 changes: 27 additions & 0 deletions lib/solid_queue/coders/json.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal: true

if Rails.gem_version < Gem::Version.new("8.1")
module SolidQueue
module Coders
class JSON
class << self
delegate :dump, to: ::ActiveRecord::Coders::JSON
end

def self.load(json)
::JSON.parse(json) unless json.blank?
end
end
end
end
else
module SolidQueue
module Coders
class JSON < ::ActiveRecord::Coders::JSON
def load(json)
::JSON.parse(json, @options) unless json.blank?
end
end
end
end
end
24 changes: 24 additions & 0 deletions test/models/solid_queue/job_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,30 @@ class DiscardableNonOverlappingGroupedJob2 < NonOverlappingJob
assert_equal 8, execution.priority
end

test "enqueue active job to be executed right away when active support is set to parse dates" do
ActiveSupport.parse_json_times = true
active_job = AddToBufferJob.new(1).set(priority: 8, queue: "test")

assert_ready do
SolidQueue::Job.enqueue(active_job)
end

solid_queue_job = SolidQueue::Job.last
assert solid_queue_job.ready?
assert_equal :ready, solid_queue_job.status
assert_equal solid_queue_job.id, active_job.provider_job_id
assert_equal 8, solid_queue_job.priority
assert_equal "test", solid_queue_job.queue_name
assert_equal "AddToBufferJob", solid_queue_job.class_name
assert Time.now >= solid_queue_job.scheduled_at
assert_equal [ 1 ], solid_queue_job.arguments["arguments"]

execution = SolidQueue::ReadyExecution.last
assert_equal solid_queue_job, execution.job
assert_equal "test", execution.queue_name
assert_equal 8, execution.priority
end

test "enqueue active job to be scheduled in the future" do
active_job = AddToBufferJob.new(1).set(priority: 8, queue: "test")

Expand Down
Loading