Skip to content

Commit

Permalink
Merge pull request #34692 from gmcgibbon/use_mail_delivery_job_in_6.0…
Browse files Browse the repository at this point in the history
…_defaults

Move MailDeliveryJob default to 6.0 defaults
  • Loading branch information
rafaelfranca committed Jan 9, 2019
2 parents 28bb21b + 5d6578d commit 9f1a07a
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 7 deletions.
2 changes: 1 addition & 1 deletion actionmailer/lib/action_mailer/base.rb
Expand Up @@ -461,7 +461,7 @@ def _protected_ivars # :nodoc:

helper ActionMailer::MailHelper

class_attribute :delivery_job, default: ::ActionMailer::MailDeliveryJob
class_attribute :delivery_job, default: ::ActionMailer::DeliveryJob
class_attribute :default_params, default: {
mime_version: "1.0",
charset: "UTF-8",
Expand Down
10 changes: 9 additions & 1 deletion actionmailer/lib/action_mailer/parameterized.rb
Expand Up @@ -145,12 +145,20 @@ def enqueue_delivery(delivery_method, options = {})
if processed?
super
else
job = @mailer_class.delivery_job
job = delivery_job_class
args = arguments_for(job, delivery_method)
job.set(options).perform_later(*args)
end
end

def delivery_job_class
if @mailer_class.delivery_job <= MailDeliveryJob
@mailer_class.delivery_job
else
Parameterized::DeliveryJob
end
end

def arguments_for(delivery_job, delivery_method)
if delivery_job <= MailDeliveryJob
[@mailer_class.name, @action.to_s, delivery_method.to_s, params: @params, args: @args]
Expand Down
4 changes: 4 additions & 0 deletions actionmailer/lib/action_mailer/railtie.rb
Expand Up @@ -46,6 +46,10 @@ class Railtie < Rails::Railtie # :nodoc:
register_preview_interceptors(options.delete(:preview_interceptors))
register_observers(options.delete(:observers))

if delivery_job = options.delete(:delivery_job)
self.delivery_job = delivery_job.constantize
end

options.each { |k, v| send("#{k}=", v) }
end

Expand Down
2 changes: 2 additions & 0 deletions actionmailer/test/abstract_unit.rb
Expand Up @@ -33,6 +33,8 @@ def self.root
FIXTURE_LOAD_PATH = File.expand_path("fixtures", __dir__)
ActionMailer::Base.view_paths = FIXTURE_LOAD_PATH

ActionMailer::Base.delivery_job = ActionMailer::MailDeliveryJob

class ActiveSupport::TestCase
include ActiveSupport::Testing::MethodCallAssertions

Expand Down
7 changes: 2 additions & 5 deletions actionmailer/test/legacy_delivery_job_test.rb
Expand Up @@ -11,9 +11,6 @@ class LegacyDeliveryJobTest < ActiveSupport::TestCase
class LegacyDeliveryJob < ActionMailer::DeliveryJob
end

class LegacyParmeterizedDeliveryJob < ActionMailer::Parameterized::DeliveryJob
end

setup do
@previous_logger = ActiveJob::Base.logger
ActiveJob::Base.logger = Logger.new(nil)
Expand Down Expand Up @@ -42,9 +39,9 @@ class LegacyParmeterizedDeliveryJob < ActionMailer::Parameterized::DeliveryJob
{ inviter: "david@basecamp.com", invitee: "jason@basecamp.com" },
]

with_delivery_job(LegacyParmeterizedDeliveryJob) do
with_delivery_job(LegacyDeliveryJob) do
assert_deprecated do
assert_performed_with(job: LegacyParmeterizedDeliveryJob, args: args) do
assert_performed_with(job: ActionMailer::Parameterized::DeliveryJob, args: args) do
mail.deliver_later
end
end
Expand Down
4 changes: 4 additions & 0 deletions railties/lib/rails/application/configuration.rb
Expand Up @@ -130,6 +130,10 @@ def load_defaults(target_version)
action_dispatch.use_cookies_with_metadata = true
end

if respond_to?(:action_mailer)
action_mailer.delivery_job = "ActionMailer::MailDeliveryJob"
end

if respond_to?(:active_job)
active_job.return_false_on_aborted_enqueue = true
end
Expand Down
Expand Up @@ -22,3 +22,12 @@
# Send Active Storage analysis and purge jobs to dedicated queues.
# Rails.application.config.active_storage.queues.analysis = :active_storage_analysis
# Rails.application.config.active_storage.queues.purge = :active_storage_purge

# Use ActionMailer::MailDeliveryJob for sending parameterized and normal mail.
#
# The default delivery job (ActionMailer::DeliveryJob), will be removed in Rails 6.1.
# This setting is not backwards compatible with earlier Rails versions.
# If you send mail in the background, job workers need to have a copy of
# MailDeliveryJob to ensure all delivery jobs are processed properly.
# Make sure your entire app is migrated and stable on 6.0 before using this setting.
# Rails.application.config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob"
27 changes: 27 additions & 0 deletions railties/test/application/configuration_test.rb
Expand Up @@ -2325,6 +2325,33 @@ class MyLogger < ::Logger
assert_equal :another_queue, ActionMailbox.queues[:routing]
end

test "ActionMailer::Base.delivery_job is ActionMailer::MailDeliveryJob by default" do
app "development"

assert_equal ActionMailer::MailDeliveryJob, ActionMailer::Base.delivery_job
end

test "ActionMailer::Base.delivery_job is ActionMailer::DeliveryJob in the 5.x defaults" do
remove_from_config '.*config\.load_defaults.*\n'
add_to_config 'config.load_defaults "5.2"'

app "development"

assert_equal ActionMailer::DeliveryJob, ActionMailer::Base.delivery_job
end

test "ActionMailer::Base.delivery_job can be configured in the new framework defaults" do
remove_from_config '.*config\.load_defaults.*\n'

app_file "config/initializers/new_framework_defaults_6_0.rb", <<-RUBY
Rails.application.config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob"
RUBY

app "development"

assert_equal ActionMailer::MailDeliveryJob, ActionMailer::Base.delivery_job
end

test "ActiveRecord::Base.filter_attributes should equal to filter_parameters" do
app_file "config/initializers/filter_parameters_logging.rb", <<-RUBY
Rails.application.config.filter_parameters += [ :password, :credit_card_number ]
Expand Down

0 comments on commit 9f1a07a

Please sign in to comment.