Skip to content

Commit b97acae

Browse files
committed
Revert "Remove sucker_punch ActiveJob::Queue adapter (rails#52935)"
This reverts commit 6d1252c.
1 parent 9716991 commit b97acae

File tree

9 files changed

+70
-2
lines changed

9 files changed

+70
-2
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ group :job do
104104
gem "resque", require: false
105105
gem "resque-scheduler", require: false
106106
gem "sidekiq", require: false
107+
gem "sucker_punch", require: false
107108
gem "delayed_job", require: false
108109
gem "queue_classic", ">= 4.0.0", require: false, platforms: :ruby
109110
gem "sneakers", require: false

Gemfile.lock

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,8 @@ GEM
585585
stimulus-rails (1.3.0)
586586
railties (>= 6.0.0)
587587
stringio (3.1.1)
588+
sucker_punch (3.2.0)
589+
concurrent-ruby (~> 1.0)
588590
syntax_tree (6.1.1)
589591
prettier_print (>= 1.2.0)
590592
tailwindcss-rails (2.1.0)
@@ -712,6 +714,7 @@ DEPENDENCIES
712714
sqlite3 (>= 2.0)
713715
stackprof
714716
stimulus-rails
717+
sucker_punch
715718
syntax_tree (= 6.1.1)
716719
tailwindcss-rails
717720
terser (>= 1.1.4)

activejob/Rakefile

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

33
require "rake/testtask"
44

5-
ACTIVEJOB_ADAPTERS = %w(async inline delayed_job queue_classic resque sidekiq sneakers backburner test)
5+
ACTIVEJOB_ADAPTERS = %w(async inline delayed_job queue_classic resque sidekiq sneakers sucker_punch backburner test)
66
ACTIVEJOB_ADAPTERS.delete("queue_classic") if defined?(JRUBY_VERSION)
77

88
task default: :test

activejob/lib/active_job/queue_adapters.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ module QueueAdapters
121121
autoload :ResqueAdapter
122122
autoload :SidekiqAdapter
123123
autoload :SneakersAdapter
124+
autoload :SuckerPunchAdapter
124125
autoload :TestAdapter
125126

126127
ADAPTER = "Adapter"
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# frozen_string_literal: true
2+
3+
require "sucker_punch"
4+
5+
module ActiveJob
6+
module QueueAdapters
7+
# = Sucker Punch adapter for Active Job
8+
#
9+
# Sucker Punch is a single-process Ruby asynchronous processing library.
10+
# This reduces the cost of hosting on a service like Heroku along
11+
# with the memory footprint of having to maintain additional jobs if
12+
# hosting on a dedicated server. All queues can run within a
13+
# single application (e.g. \Rails, Sinatra, etc.) process.
14+
#
15+
# Read more about Sucker Punch {here}[https://github.com/brandonhilkert/sucker_punch].
16+
#
17+
# To use Sucker Punch set the queue_adapter config to +:sucker_punch+.
18+
#
19+
# Rails.application.config.active_job.queue_adapter = :sucker_punch
20+
class SuckerPunchAdapter < AbstractAdapter
21+
def enqueue(job) # :nodoc:
22+
if JobWrapper.respond_to?(:perform_async)
23+
# sucker_punch 2.0 API
24+
JobWrapper.perform_async job.serialize
25+
else
26+
# sucker_punch 1.0 API
27+
JobWrapper.new.async.perform job.serialize
28+
end
29+
end
30+
31+
def enqueue_at(job, timestamp) # :nodoc:
32+
if JobWrapper.respond_to?(:perform_in)
33+
delay = timestamp - Time.current.to_f
34+
JobWrapper.perform_in delay, job.serialize
35+
else
36+
raise NotImplementedError, "sucker_punch 1.0 does not support `enqueue_at`. Please upgrade to version ~> 2.0.0 to enable this behavior."
37+
end
38+
end
39+
40+
class JobWrapper # :nodoc:
41+
include SuckerPunch::Job
42+
43+
def perform(job_data)
44+
Base.execute job_data
45+
end
46+
end
47+
end
48+
end
49+
end
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# frozen_string_literal: true
2+
3+
require "sucker_punch/testing/inline"
4+
ActiveJob::Base.queue_adapter = :sucker_punch

activejob/test/cases/test_case_test.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ def test_set_test_adapter
4141
ActiveJob::QueueAdapters::SidekiqAdapter
4242
when :sneakers
4343
ActiveJob::QueueAdapters::SneakersAdapter
44+
when :sucker_punch
45+
ActiveJob::QueueAdapters::SuckerPunchAdapter
4446
else
4547
raise NotImplementedError.new
4648
end

activejob/test/integration/queuing_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class QueuingTest < ActiveSupport::TestCase
1313
assert_job_executed
1414
end
1515

16-
unless adapter_is?(:inline, :async)
16+
unless adapter_is?(:inline, :async, :sucker_punch)
1717
test "should not run jobs queued on a non-listening queue" do
1818
old_queue = TestJob.queue_name
1919

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# frozen_string_literal: true
2+
3+
module SuckerPunchJobsManager
4+
def setup
5+
ActiveJob::Base.queue_adapter = :sucker_punch
6+
SuckerPunch.logger = nil
7+
end
8+
end

0 commit comments

Comments
 (0)