# File lib/devise/multi_email/parent_model_manager.rb, line 23 def primary_email_record filtered_emails.find(&:primary?) end
class Devise::MultiEmail::ParentModelManager
Public Class Methods
new(parent_record)
click to toggle source
# File lib/devise/multi_email/parent_model_manager.rb, line 7 def initialize(parent_record) @parent_record = parent_record end
Public Instance Methods
change_primary_email_to(new_email, options = {})
click to toggle source
:allow_unconfirmed option sets this email record to primary :skip_confirmations option confirms this email record (without saving) @see `set_primary_record_to`
# File lib/devise/multi_email/parent_model_manager.rb, line 31 def change_primary_email_to(new_email, options = {}) # mark none as primary when set to nil if new_email.nil? filtered_emails.each { |item| item.primary = false } # select or build an email record else record = find_or_build_for_email(new_email) if record.try(:confirmed?) || primary_email_record.nil? || options[:allow_unconfirmed] set_primary_record_to(record, options) end end record end
confirmed_emails()
click to toggle source
# File lib/devise/multi_email/parent_model_manager.rb, line 68 def confirmed_emails filtered_emails.select { |record| record.try(:confirmed?) } end
current_email_record()
click to toggle source
# File lib/devise/multi_email/parent_model_manager.rb, line 11 def current_email_record login_email_record || primary_email_record end
emails()
click to toggle source
# File lib/devise/multi_email/parent_model_manager.rb, line 59 def emails @parent_record.__send__(@parent_record.class.multi_email_association.name) end
filtered_emails(options = {})
click to toggle source
Gets the email records that have not been deleted
# File lib/devise/multi_email/parent_model_manager.rb, line 64 def filtered_emails(options = {}) emails.to_a.reject(&:destroyed?).reject(&:marked_for_destruction?) end
find_or_build_for_email(email)
click to toggle source
# File lib/devise/multi_email/parent_model_manager.rb, line 53 def find_or_build_for_email(email) formatted_email = format_email(email) record = filtered_emails.find { |item| item.email == formatted_email } record || emails.build(email: formatted_email) end
format_email(email)
click to toggle source
Use Devise
formatting settings for emails
# File lib/devise/multi_email/parent_model_manager.rb, line 49 def format_email(email) @parent_record.class.__send__(:devise_parameter_filter).filter(email: email)[:email] end
login_email_record()
click to toggle source
# File lib/devise/multi_email/parent_model_manager.rb, line 15 def login_email_record if @parent_record.current_login_email.present? formatted_email = format_email(@parent_record.current_login_email) filtered_emails.find { |item| item.email == formatted_email } end end
primary_email_record()
click to toggle source
Gets the primary email record.
unconfirmed_emails()
click to toggle source
# File lib/devise/multi_email/parent_model_manager.rb, line 72 def unconfirmed_emails filtered_emails.reject { |record| record.try(:confirmed?) } end
Protected Instance Methods
set_primary_record_to(record, options = {})
click to toggle source
:skip_confirmations option confirms this email record (without saving)
# File lib/devise/multi_email/parent_model_manager.rb, line 79 def set_primary_record_to(record, options = {}) # Toggle primary flag for all emails filtered_emails.each { |other| other.primary = (other.email == record.email) } if options[:skip_confirmations] record.try(:skip_confirmation!) record.try(:skip_reconfirmation!) end end