mirror of
https://github.com/heartcombo/devise.git
synced 2026-01-09 14:58:05 -05:00
71 lines
2.1 KiB
Ruby
71 lines
2.1 KiB
Ruby
class DeviseMailer < ::ActionMailer::Base
|
|
extend Devise::Controllers::InternalHelpers::ScopedViews
|
|
|
|
# Deliver confirmation instructions when the user is created or its email is
|
|
# updated, and also when confirmation is manually requested
|
|
def confirmation_instructions(record)
|
|
setup_mail(record, :confirmation_instructions)
|
|
end
|
|
|
|
# Deliver reset password instructions when manually requested
|
|
def reset_password_instructions(record)
|
|
setup_mail(record, :reset_password_instructions)
|
|
end
|
|
|
|
def unlock_instructions(record)
|
|
setup_mail(record, :unlock_instructions)
|
|
end
|
|
|
|
private
|
|
|
|
# Configure default email options
|
|
def setup_mail(record, key)
|
|
mapping = Devise::Mapping.find_by_class(record.class)
|
|
raise "Invalid devise resource #{record}" unless mapping
|
|
|
|
subject translate(mapping, key)
|
|
from mailer_sender(mapping)
|
|
recipients record.email
|
|
sent_on Time.now
|
|
content_type 'text/html'
|
|
|
|
@resource = instance_variable_set("@#{mapping.name}", record)
|
|
render_with_scope(key, mapping)
|
|
end
|
|
|
|
def render_with_scope(key, mapping)
|
|
if self.class.scoped_views
|
|
begin
|
|
render :file => "devise_mailer/#{mapping.as}/#{key}"
|
|
rescue ActionView::MissingTemplate
|
|
render :file => "devise_mailer/#{key}"
|
|
end
|
|
else
|
|
render :file => "devise_mailer/#{key}"
|
|
end
|
|
end
|
|
|
|
def mailer_sender(mapping)
|
|
if Devise.mailer_sender.is_a?(Proc)
|
|
block_args = mapping.name if Devise.mailer_sender.arity > 0
|
|
Devise.mailer_sender.call(block_args)
|
|
else
|
|
Devise.mailer_sender
|
|
end
|
|
end
|
|
|
|
# Setup subject namespaced by model. It means you're able to setup your
|
|
# messages using specific resource scope, or provide a default one.
|
|
# Example (i18n locale file):
|
|
#
|
|
# en:
|
|
# devise:
|
|
# mailer:
|
|
# confirmation_instructions: '...'
|
|
# user:
|
|
# confirmation_instructions: '...'
|
|
def translate(mapping, key)
|
|
I18n.t(:"#{mapping.name}.#{key}", :scope => [:devise, :mailer], :default => key)
|
|
end
|
|
end
|