Class: Devise::MultiEmail::ParentModelManager

Inherits:
Object
  • Object
show all
Defined in:
lib/devise/multi_email/parent_model_manager.rb

Instance Method Summary collapse

Constructor Details

#initialize(parent_record) ⇒ ParentModelManager

Returns a new instance of ParentModelManager.



7
8
9
# File 'lib/devise/multi_email/parent_model_manager.rb', line 7

def initialize(parent_record)
  @parent_record = parent_record
end

Instance Method Details

#change_primary_email_to(new_email, options = {}) ⇒ Object

:allow_unconfirmed option sets this email record to primary :skip_confirmations option confirms this email record (without saving)

See Also:

  • `set_primary_record_to`


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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_emailsObject



68
69
70
# File 'lib/devise/multi_email/parent_model_manager.rb', line 68

def confirmed_emails
  filtered_emails.select { |record| record.try(:confirmed?) }
end

#current_email_recordObject



11
12
13
# File 'lib/devise/multi_email/parent_model_manager.rb', line 11

def current_email_record
   || primary_email_record
end

#emailsObject



59
60
61
# 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 = {}) ⇒ Object

Gets the email records that have not been deleted



64
65
66
# File 'lib/devise/multi_email/parent_model_manager.rb', line 64

def filtered_emails(options = {})
  emails.lazy.reject(&:destroyed?).reject(&:marked_for_destruction?).to_a
end

#find_or_build_for_email(email) ⇒ Object



53
54
55
56
57
# 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) ⇒ Object

Use Devise formatting settings for emails



49
50
51
# 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_recordObject



15
16
17
18
19
20
# File 'lib/devise/multi_email/parent_model_manager.rb', line 15

def 
  if @parent_record..present?
    formatted_email = format_email(@parent_record.)
    filtered_emails.find { |item| item.email == formatted_email }
  end
end

#primary_email_recordObject

Gets the primary email record.



23
24
25
# File 'lib/devise/multi_email/parent_model_manager.rb', line 23

def primary_email_record
  filtered_emails.find(&:primary?)
end

#unconfirmed_emailsObject



72
73
74
# File 'lib/devise/multi_email/parent_model_manager.rb', line 72

def unconfirmed_emails
  filtered_emails.reject { |record| record.try(:confirmed?) }
end