module Devise::Models::Async
Protected Instance Methods
devise_pending_notifications()
click to toggle source
# File lib/devise/async/model.rb, line 57 def devise_pending_notifications @devise_pending_notifications ||= [] end
send_devise_notification(notification, *args)
click to toggle source
This method overwrites devise's own `send_devise_notification` to capture all email notifications and enqueue it for background processing instead of sending it inline as devise does by default.
Calls superclass method
# File lib/devise/async/model.rb, line 27 def send_devise_notification(notification, *args) return super unless Devise::Async.enabled # The current locale has to be remembered until the actual sending # of an email because it is scoped to the current thread. Hence, # using asynchronous mechanisms that use another thread to send an # email the currently used locale will be gone later. args = args_with_current_locale(args) # If the record is dirty we keep pending notifications to be enqueued # by the callback and avoid before commit job processing. if changed? devise_pending_notifications << [ notification, args ] # If the record isn't dirty (aka has already been saved) enqueue right away # because the callback has already been triggered. else Devise::Async::Worker.enqueue(notification, self.class.name, self.id.to_s, *args) end end
send_devise_pending_notifications()
click to toggle source
Send all pending notifications.
# File lib/devise/async/model.rb, line 48 def send_devise_pending_notifications devise_pending_notifications.each do |notification, args| # Use `id.to_s` to avoid problems with mongoid 2.4.X ids being serialized # wrong with YAJL. Devise::Async::Worker.enqueue(notification, self.class.name, self.id.to_s, *args) end @devise_pending_notifications = [] end
Private Instance Methods
add_current_locale_to_args(args)
click to toggle source
# File lib/devise/async/model.rb, line 70 def add_current_locale_to_args(args) # Devise expects a hash as the last parameter for Mailer methods. opts = args.last.is_a?(Hash) ? args.pop : {} opts['locale'] = I18n.locale args.push(opts) end
args_with_current_locale(args)
click to toggle source
# File lib/devise/async/model.rb, line 63 def args_with_current_locale(args) # The default_locale is taken in any case. Hence, the args do not have # to be adapted if default_locale and current locale are equal. args = add_current_locale_to_args(args) if I18n.locale != I18n.default_locale args end