Empêcher Devise d'envoyer des emails de confirmation

Je suis sur le point de publier un énorme projet Rails sur lequel je travaille depuis un bon moment. Ce projet est destiné à remplacer une ancienne application qui gère une base de données de clients avec des emails. Le nouveau projet Rails utilise Devise pour l’authentification.
Avant de déployer la mise à jour finale sur le serveur de production, nous devons trouver un moyen d’importer les utilisateurs sans envoyer d’emails de confirmation, mais en les laissant non confirmés jusqu’à ce qu’ils se connectent réellement au nouveau système et fournissent un mot de passe. Les nouvelles inscriptions doivent également rester confirmables.
J’ai donc dû trouver un moyen de surcharger une méthode d’instance. C’est facile à faire avec un simple module :
# Module to be included in a User instance whenever we don't want to send an email
# Useful when importing users or for testing
module SkipConfirmationEmail
def self.included(base)
base.send(:include, InstanceMethods)
base.class_eval do
alias_method :send_confirmation_instructions, :return_false
end
end
# Instance methods
module InstanceMethods
def return_false
false
end
end
end
Ce que cela fait essentiellement, c’est créer un alias de la méthode send_confirmation_instructions vers une nouvelle méthode d’instance return_false que nous pouvons injecter dans notre modèle comme ceci :
user = User.new
user.send(:include, SkipConfirmationEmail)
user.send_confirmation_instructions
#> false
Par conséquent, mes utilisateurs devront toujours confirmer leur compte lors de leur première connexion au nouveau système, mais ne seront pas notifiés lorsque j’importerai la base de données quelques jours avant le lancement.
Cela peut facilement être adapté à plusieurs cas d’utilisation, chaque fois que vous devez surcharger une méthode d’instance dans une classe Ruby existante, comme indiqué dans ce GitHub gist.
MoskitoHero