mirror of
https://github.com/meineerde/redmine.git
synced 2025-10-17 17:01:01 +00:00
Ensure that ActiveRecord::Base objects are fully serialized for mail sending (#26791).
Patch by Holger Just. git-svn-id: http://svn.redmine.org/redmine/trunk@17585 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
5416ed1022
commit
323ef3182b
@ -107,11 +107,48 @@ class Mailer < ActionMailer::Base
|
||||
"method*, or 3. use a custom Active Job instead of #deliver_later."
|
||||
else
|
||||
args = 'Mailer', @action.to_s, delivery_method.to_s, *@args
|
||||
::ActionMailer::DeliveryJob.set(options).perform_later(*args)
|
||||
DeliveryJob.set(options).perform_later(*args)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class DeliveryJob < ActionMailer::DeliveryJob
|
||||
module Arguments
|
||||
extend ActiveJob::Arguments
|
||||
extend self
|
||||
|
||||
private
|
||||
|
||||
def serialize_argument(argument)
|
||||
# Ensure that ActiveRecord::Base objects are fully serialized for mail
|
||||
# sending. This circumvents the globalid gem for this job.
|
||||
if argument.is_a?(ActiveRecord::Base)
|
||||
argument.to_yaml
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def deserialize_argument(argument)
|
||||
if argument.is_a?(ActiveRecord::Base)
|
||||
argument
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def serialize_arguments(serialized_args)
|
||||
Arguments.serialize(serialized_args)
|
||||
end
|
||||
|
||||
def deserialize_arguments(serialized_args)
|
||||
Arguments.deserialize(serialized_args)
|
||||
end
|
||||
end
|
||||
|
||||
def process(action, *args)
|
||||
user = args.shift
|
||||
raise ArgumentError, "First argument has to be a user, was #{user.inspect}" unless user.is_a?(User)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user