summaryrefslogtreecommitdiffstats
path: root/app/models/user.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/user.rb')
-rw-r--r--app/models/user.rb19
1 files changed, 12 insertions, 7 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index 0440627c598..4973c68b61b 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -370,15 +370,20 @@ class User < ApplicationRecord
protected
- def send_devise_notification(notification, *args)
+ def send_devise_notification(notification, *args, **kwargs)
# This method can be called in `after_update` and `after_commit` hooks,
# but we must make sure the mailer is actually called *after* commit,
# otherwise it may work on stale data. To do this, figure out if we are
# within a transaction.
+
+ # It seems like devise sends keyword arguments as a hash in the last
+ # positional argument
+ kwargs = args.pop if args.last.is_a?(Hash) && kwargs.empty?
+
if ActiveRecord::Base.connection.current_transaction.try(:records)&.include?(self)
- pending_devise_notifications << [notification, args]
+ pending_devise_notifications << [notification, args, kwargs]
else
- render_and_send_devise_message(notification, *args)
+ render_and_send_devise_message(notification, *args, **kwargs)
end
end
@@ -389,8 +394,8 @@ class User < ApplicationRecord
end
def send_pending_devise_notifications
- pending_devise_notifications.each do |notification, args|
- render_and_send_devise_message(notification, *args)
+ pending_devise_notifications.each do |notification, args, kwargs|
+ render_and_send_devise_message(notification, *args, **kwargs)
end
# Empty the pending notifications array because the
@@ -403,8 +408,8 @@ class User < ApplicationRecord
@pending_devise_notifications ||= []
end
- def render_and_send_devise_message(notification, *args)
- devise_mailer.send(notification, self, *args).deliver_later
+ def render_and_send_devise_message(notification, *args, **kwargs)
+ devise_mailer.send(notification, self, *args, **kwargs).deliver_later
end
def set_approved