1
0
mirror of https://github.com/meineerde/redmine.git synced 2025-12-19 15:01:14 +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:
Jean-Philippe Lang 2018-10-06 13:10:22 +00:00
parent 5416ed1022
commit 323ef3182b

View File

@ -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)