Class: Devise::MultiEmail::ParentModelManager
- Inherits:
-
Object
- Object
- Devise::MultiEmail::ParentModelManager
- Defined in:
- lib/devise/multi_email/parent_model_manager.rb
Instance Method Summary collapse
-
#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).
- #confirmed_emails ⇒ Object
- #current_email_record ⇒ Object
- #emails ⇒ Object
-
#filtered_emails(options = {}) ⇒ Object
Gets the email records that have not been deleted.
- #find_or_build_for_email(email) ⇒ Object
-
#format_email(email) ⇒ Object
Use Devise formatting settings for emails.
-
#initialize(parent_record) ⇒ ParentModelManager
constructor
A new instance of ParentModelManager.
- #login_email_record ⇒ Object
-
#primary_email_record ⇒ Object
Gets the primary email record.
- #unconfirmed_emails ⇒ Object
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)
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, = {}) # 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? || [:allow_unconfirmed] set_primary_record_to(record, ) end end record end |
#confirmed_emails ⇒ Object
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_record ⇒ Object
11 12 13 |
# File 'lib/devise/multi_email/parent_model_manager.rb', line 11 def current_email_record login_email_record || primary_email_record end |
#emails ⇒ Object
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( = {}) 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_record ⇒ Object
15 16 17 18 19 20 |
# 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 ⇒ Object
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_emails ⇒ Object
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 |