mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
c3e7abddfb
The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
34 lines
1.1 KiB
Ruby
34 lines
1.1 KiB
Ruby
require "active_job"
|
|
|
|
module ActionMailer
|
|
# The <tt>ActionMailer::DeliveryJob</tt> class is used when you
|
|
# want to send emails outside of the request-response cycle.
|
|
#
|
|
# Exceptions are rescued and handled by the mailer class.
|
|
class DeliveryJob < ActiveJob::Base # :nodoc:
|
|
queue_as { ActionMailer::Base.deliver_later_queue_name }
|
|
|
|
rescue_from StandardError, with: :handle_exception_with_mailer_class
|
|
|
|
def perform(mailer, mail_method, delivery_method, *args) #:nodoc:
|
|
mailer.constantize.public_send(mail_method, *args).send(delivery_method)
|
|
end
|
|
|
|
private
|
|
# "Deserialize" the mailer class name by hand in case another argument
|
|
# (like a Global ID reference) raised DeserializationError.
|
|
def mailer_class
|
|
if mailer = Array(@serialized_arguments).first || Array(arguments).first
|
|
mailer.constantize
|
|
end
|
|
end
|
|
|
|
def handle_exception_with_mailer_class(exception)
|
|
if klass = mailer_class
|
|
klass.handle_exception exception
|
|
else
|
|
raise exception
|
|
end
|
|
end
|
|
end
|
|
end
|