Skip to content

Commit

Permalink
Remove deprecated ActionMailer::DeliveryJob and `ActionMailer::Parame…
Browse files Browse the repository at this point in the history
…terized::DeliveryJob`
  • Loading branch information
rafaelfranca committed Nov 17, 2021
1 parent d33c529 commit ddc7fb6
Show file tree
Hide file tree
Showing 12 changed files with 18 additions and 285 deletions.
5 changes: 5 additions & 0 deletions actionmailer/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
* Remove deprecated `ActionMailer::DeliveryJob` and `ActionMailer::Parameterized::DeliveryJob`
in favor of `ActionMailer::MailDeliveryJob`.

*Rafael Mendonça França*

* `email_address_with_name` returns just the address if name is blank.

*Thomas Hutterer*
Expand Down
1 change: 0 additions & 1 deletion actionmailer/lib/action_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ module ActionMailer
autoload :TestCase
autoload :TestHelper
autoload :MessageDelivery
autoload :DeliveryJob
autoload :MailDeliveryJob

def self.eager_load!
Expand Down
2 changes: 1 addition & 1 deletion actionmailer/lib/action_mailer/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@ class Base < AbstractController::Base

helper ActionMailer::MailHelper

class_attribute :delivery_job, default: ::ActionMailer::DeliveryJob
class_attribute :delivery_job, default: ::ActionMailer::MailDeliveryJob
class_attribute :default_params, default: {
mime_version: "1.0",
charset: "UTF-8",
Expand Down
45 changes: 0 additions & 45 deletions actionmailer/lib/action_mailer/delivery_job.rb

This file was deleted.

38 changes: 4 additions & 34 deletions actionmailer/lib/action_mailer/message_delivery.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def processed?
# * <tt>:queue</tt> - Enqueue the email on the specified queue
# * <tt>:priority</tt> - Enqueues the email with the specified priority
#
# By default, the email will be enqueued using <tt>ActionMailer::DeliveryJob</tt>. Each
# By default, the email will be enqueued using <tt>ActionMailer::MailDeliveryJob</tt>. Each
# <tt>ActionMailer::Base</tt> class can specify the job to use by setting the class variable
# +delivery_job+.
#
Expand All @@ -88,7 +88,7 @@ def deliver_later!(options = {})
# * <tt>:queue</tt> - Enqueue the email on the specified queue.
# * <tt>:priority</tt> - Enqueues the email with the specified priority
#
# By default, the email will be enqueued using <tt>ActionMailer::DeliveryJob</tt>. Each
# By default, the email will be enqueued using <tt>ActionMailer::MailDeliveryJob</tt>. Each
# <tt>ActionMailer::Base</tt> class can specify the job to use by setting the class variable
# +delivery_job+.
#
Expand Down Expand Up @@ -140,38 +140,8 @@ def enqueue_delivery(delivery_method, options = {})
"#deliver_later, 2. only touch the message *within your mailer " \
"method*, or 3. use a custom Active Job instead of #deliver_later."
else
job = @mailer_class.delivery_job

if use_new_args?(job)
job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, args: @args)
elsif job <= DeliveryJob
job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, *@args)
else
ActiveSupport::Deprecation.warn(<<~EOM)
In Rails 7.0, Action Mailer will pass the mail arguments inside the `:args` keyword argument.
The `perform` method of the #{job} needs to change and forward the mail arguments
from the `args` keyword argument.
The `perform` method should now look like:
`def perform(mailer, mail_method, delivery, args:)`
EOM

job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, *@args)
end
end
end

def use_new_args?(job)
parameters = job.public_instance_method(:perform).parameters

parameters.find do |key, name|
return true if key == :keyreq && name == :args

key == :keyrest and name != :**
@mailer_class.delivery_job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, args: @args)
end
end
end
Expand Down
26 changes: 2 additions & 24 deletions actionmailer/lib/action_mailer/parameterized.rb
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,6 @@ def respond_to_missing?(method, include_all = false)
end
end

class DeliveryJob < ActionMailer::DeliveryJob # :nodoc:
def perform(mailer, mail_method, delivery_method, params, *args)
mailer.constantize.with(params).public_send(mail_method, *args).send(delivery_method)
end
ruby2_keywords(:perform)
end

class MessageDelivery < ActionMailer::MessageDelivery # :nodoc:
def initialize(mailer_class, action, params, *args)
super(mailer_class, action, *args)
Expand All @@ -148,23 +141,8 @@ def enqueue_delivery(delivery_method, options = {})
if processed?
super
else
job = delivery_job_class

if job <= MailDeliveryJob
job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, params: @params, args: @args)
else
job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, @params, *@args)
end
end
end

def delivery_job_class
if @mailer_class.delivery_job <= MailDeliveryJob
@mailer_class.delivery_job
else
Parameterized::DeliveryJob
@mailer_class.delivery_job.set(options).perform_later(
@mailer_class.name, @action.to_s, delivery_method.to_s, params: @params, args: @args)
end
end
end
Expand Down
3 changes: 1 addition & 2 deletions actionmailer/lib/action_mailer/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,7 @@ def assert_no_enqueued_emails(&block)
def delivery_job_filter(job)
job_class = job.is_a?(Hash) ? job.fetch(:job) : job.class

Base.descendants.map(&:delivery_job).include?(job_class) ||
ActionMailer::Parameterized::DeliveryJob == job_class
Base.descendants.map(&:delivery_job).include?(job_class)
end
end
end
127 changes: 0 additions & 127 deletions actionmailer/test/legacy_delivery_job_test.rb

This file was deleted.

28 changes: 0 additions & 28 deletions actionmailer/test/test_helper_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -214,20 +214,6 @@ def test_assert_enqueued_emails
end
end

def test_assert_enqueued_emails_with_legacy_delivery_job
previous_delivery_job = TestHelperMailer.delivery_job
TestHelperMailer.delivery_job = ActionMailer::DeliveryJob
assert_nothing_raised do
assert_enqueued_emails 1 do
silence_stream($stdout) do
TestHelperMailer.test.deliver_later
end
end
end
ensure
TestHelperMailer.delivery_job = previous_delivery_job
end

def test_assert_enqueued_parameterized_emails
assert_nothing_raised do
assert_enqueued_emails 1 do
Expand All @@ -238,20 +224,6 @@ def test_assert_enqueued_parameterized_emails
end
end

def test_assert_enqueued_parameterized_emails_with_legacy_delivery_job
previous_delivery_job = TestHelperMailer.delivery_job
TestHelperMailer.delivery_job = ActionMailer::DeliveryJob
assert_nothing_raised do
assert_enqueued_emails 1 do
silence_stream($stdout) do
TestHelperMailer.with(a: 1).test.deliver_later
end
end
end
ensure
TestHelperMailer.delivery_job = previous_delivery_job
end

def test_assert_enqueued_emails_too_few_sent
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_enqueued_emails 2 do
Expand Down
3 changes: 3 additions & 0 deletions guides/source/7_0_release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ Please refer to the [Changelog][action-mailer] for detailed changes.

### Removals

* Remove deprecated `ActionMailer::DeliveryJob` and `ActionMailer::Parameterized::DeliveryJob`
in favor of `ActionMailer::MailDeliveryJob`.

### Deprecations

### Notable changes
Expand Down
2 changes: 1 addition & 1 deletion guides/source/configuring.md
Original file line number Diff line number Diff line change
Expand Up @@ -1797,7 +1797,7 @@ Accepts a string for the HTML tag used to wrap attachments. Defaults to `"action
- `config.action_controller.raise_on_open_redirects`: `false`
- `config.action_controller.urlsafe_csrf_tokens`: `false`
- `config.action_dispatch.cookies_same_site_protection`: `nil`
- `config.action_mailer.delivery_job`: `ActionMailer::DeliveryJob`
- `config.action_mailer.delivery_job`: `ActionMailer::MailDeliveryJob`
- `config.action_view.form_with_generates_ids`: `false`
- `config.action_view.preload_links_header`: `nil`
- `config.action_view.button_to_generates_button_tag`: `false`
Expand Down
Loading

0 comments on commit ddc7fb6

Please sign in to comment.