lib/devise/async/model.rb in devise-async-0.9.0 vs lib/devise/async/model.rb in devise-async-0.10.1.alpha

- old
+ new

@@ -25,10 +25,16 @@ # processing instead of sending it inline as devise does by # default. 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 @@ -49,8 +55,25 @@ end def devise_pending_notifications @devise_pending_notifications ||= [] end + + private + + 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 + + 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 + end end end