Feature #26791 » 0003-Optional-Ensure-that-ActiveRecord-Base-objects-are-f.patch
| app/models/mailer.rb | ||
|---|---|---|
| 106 | 106 |
"method*, or 3. use a custom Active Job instead of #deliver_later." |
| 107 | 107 |
else |
| 108 | 108 |
args = 'Mailer', @action.to_s, delivery_method.to_s, *@args |
| 109 |
::ActionMailer::DeliveryJob.set(options).perform_later(*args)
|
|
| 109 |
DeliveryJob.set(options).perform_later(*args) |
|
| 110 | 110 |
end |
| 111 | 111 |
end |
| 112 | 112 |
end |
| 113 | 113 | |
| 114 |
class DeliveryJob < ActionMailer::DeliveryJob |
|
| 115 |
module Arguments |
|
| 116 |
extend ActiveJob::Arguments |
|
| 117 |
extend self |
|
| 118 | ||
| 119 |
private |
|
| 120 | ||
| 121 |
def serialize_argument(argument) |
|
| 122 |
# Ensure that ActiveRecord::Base objects are fully serialized for mail |
|
| 123 |
# sending. This circumvents the globalid gem for this job. |
|
| 124 |
if argument.is_a?(ActiveRecord::Base) |
|
| 125 |
argument.to_yaml |
|
| 126 |
else |
|
| 127 |
super |
|
| 128 |
end |
|
| 129 |
end |
|
| 130 | ||
| 131 |
def deserialize_argument(argument) |
|
| 132 |
if argument.is_a?(ActiveRecord::Base) |
|
| 133 |
argument |
|
| 134 |
else |
|
| 135 |
super |
|
| 136 |
end |
|
| 137 |
end |
|
| 138 |
end |
|
| 139 | ||
| 140 |
private |
|
| 141 | ||
| 142 |
def serialize_arguments(serialized_args) |
|
| 143 |
Arguments.serialize(serialized_args) |
|
| 144 |
end |
|
| 145 | ||
| 146 |
def deserialize_arguments(serialized_args) |
|
| 147 |
Arguments.deserialize(serialized_args) |
|
| 148 |
end |
|
| 149 |
end |
|
| 150 | ||
| 114 | 151 |
def process(action, *args) |
| 115 | 152 |
user = args.shift |
| 116 | 153 |
raise ArgumentError, "First argument has to be a user, was #{user.inspect}" unless user.is_a?(User)
|