devise

https://github.com/plataformatec/devise

Ruby

Flexible authentication solution for Rails with Warden.

Devise::Models::Authenticatable#send_devise_notification

This is an internal method called every time Devise needs
to send a notification/mail. This can be overridden if you
need to customize the e-mail delivery logic. For instance,
if you are using a queue to deliver e-mails (delayed job,
sidekiq, resque, etc), you must add the delivery to the queue
just after the transaction was committed. To achieve this,
you can override send_devise_notification to store the
deliveries until the after_commit callback is triggered:

    class User
      devise :database_authenticatable, :confirmable

      after_commit :send_pending_notifications

      protected

      def send_devise_notification(notification, *args)
        # If the record is new or changed then delay the
        # delivery until the after_commit callback otherwise
        # send now because after_commit will not be called.
        if new_record? || changed?
          pending_notifications << [notification, args]
        else
          message = devise_mailer.send(notification, self, *args)
          Remove once we move to Rails 4.2+ only.
          if message.respond_to?(:deliver_now)
            message.deliver_now
          else
            message.deliver
          end
        end
      end

      def send_pending_notifications
        pending_notifications.each do |notification, args|
          message = devise_mailer.send(notification, self, *args)
          Remove once we move to Rails 4.2+ only.
          if message.respond_to?(:deliver_now)
            message.deliver_now
          else
            message.deliver
          end
        end

        # Empty the pending notifications array because the
        # after_commit hook can be called multiple times which
        # could cause multiple emails to be sent.
        pending_notifications.clear
      end

      def pending_notifications
        @pending_notifications ||= []
      end
    end

Source | Google | Stack overflow

Edit

git clone [email protected]:plataformatec/devise.git

cd devise

open lib/devise/models/authenticatable.rb

Contribute

# Make a new branch

git checkout -b -your-name--update-docs-Devise--Models--Authenticatable-send_devise_notification-for-pr


# Commit to git

git add lib/devise/models/authenticatable.rbgit commit -m "better docs for Devise::Models::Authenticatable#send_devise_notification"


# Open pull request

gem install hub # on a mac you can `brew install hub`

hub fork

git push <your name> -your-name--update-docs-Devise--Models--Authenticatable-send_devise_notification-for-pr

hub pull-request


# Celebrate!