aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer
diff options
context:
space:
mode:
authorMatthew Mongeau <halogenandtoast@gmail.com>2017-06-15 16:12:44 +0900
committerMatthew Mongeau <halogenandtoast@gmail.com>2017-06-15 16:41:23 +0900
commitd9bbde09fc57b29b889baadda18da943428fb06a (patch)
treeef40e7ea76e823d5562ada434a51501e5affcc28 /actionmailer
parentf2af91a7908d3474746e20781a3118379189a7aa (diff)
downloadrails-d9bbde09fc57b29b889baadda18da943428fb06a.tar.gz
rails-d9bbde09fc57b29b889baadda18da943428fb06a.tar.bz2
rails-d9bbde09fc57b29b889baadda18da943428fb06a.zip
Allow mailers to configure their delivery job
Setting delivery_job on a mailer class will cause MessageDelivery to use the specified job instead of ActionMailer::DeliveryJob: class MyMailer < ApplicationMailer self.delivery_job = MyCustomDeliveryJob ... end
Diffstat (limited to 'actionmailer')
-rw-r--r--actionmailer/CHANGELOG.md10
-rw-r--r--actionmailer/lib/action_mailer/base.rb1
-rw-r--r--actionmailer/lib/action_mailer/message_delivery.rb3
-rw-r--r--actionmailer/test/message_delivery_test.rb13
4 files changed, 26 insertions, 1 deletions
diff --git a/actionmailer/CHANGELOG.md b/actionmailer/CHANGELOG.md
index e488d867de..83067dfd38 100644
--- a/actionmailer/CHANGELOG.md
+++ b/actionmailer/CHANGELOG.md
@@ -1 +1,11 @@
+* Allow ActionMailer classes to configure their delivery job
+
+ class MyMailer < ApplicationMailer
+ self.delivery_job = MyCustomDeliveryJob
+
+ ...
+ end
+
+ *Matthew Mongeau*
+
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/actionmailer/CHANGELOG.md) for previous changes.
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index 7133670b65..f8aa54bd44 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -459,6 +459,7 @@ module ActionMailer
helper ActionMailer::MailHelper
+ class_attribute :delivery_job, default: ::ActionMailer::DeliveryJob
class_attribute :default_params, default: {
mime_version: "1.0",
charset: "UTF-8",
diff --git a/actionmailer/lib/action_mailer/message_delivery.rb b/actionmailer/lib/action_mailer/message_delivery.rb
index cf7c57e6bf..595646d002 100644
--- a/actionmailer/lib/action_mailer/message_delivery.rb
+++ b/actionmailer/lib/action_mailer/message_delivery.rb
@@ -118,7 +118,8 @@ module ActionMailer
"method*, or 3. use a custom Active Job instead of #deliver_later."
else
args = @mailer_class.name, @action.to_s, delivery_method.to_s, *@args
- ::ActionMailer::DeliveryJob.set(options).perform_later(*args)
+ job = @mailer_class.delivery_job
+ job.set(options).perform_later(*args)
end
end
end
diff --git a/actionmailer/test/message_delivery_test.rb b/actionmailer/test/message_delivery_test.rb
index c0683be94d..51f10b0bf1 100644
--- a/actionmailer/test/message_delivery_test.rb
+++ b/actionmailer/test/message_delivery_test.rb
@@ -95,6 +95,19 @@ class MessageDeliveryTest < ActiveSupport::TestCase
end
end
+ test "should enqueue the job with the correct delivery job" do
+ old_delivery_job = DelayedMailer.delivery_job
+ DelayedMailer.delivery_job = DummyJob
+
+ assert_performed_with(job: DummyJob, args: ["DelayedMailer", "test_message", "deliver_now", 1, 2, 3]) do
+ @mail.deliver_later
+ end
+
+ DelayedMailer.delivery_job = old_delivery_job
+ end
+
+ class DummyJob < ActionMailer::DeliveryJob; end
+
test "can override the queue when enqueuing mail" do
assert_performed_with(job: ActionMailer::DeliveryJob, args: ["DelayedMailer", "test_message", "deliver_now", 1, 2, 3], queue: "another_queue") do
@mail.deliver_later(queue: :another_queue)