Module: EffectiveMailchimpUser
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/effective_mailchimp_user.rb
Overview
EffectiveMailchimpUser
Mark your user model with effective_mailchimp_user to get a few helpers And user specific point required scores
Defined Under Namespace
Modules: Base, ClassMethods
Instance Method Summary collapse
-
#build_mailchimp_list_member(mailchimp_list:) ⇒ Object
Find or build.
- #mailchimp_last_synced_at ⇒ Object
- #mailchimp_list_member(mailchimp_list:) ⇒ Object
- #mailchimp_list_members_changed? ⇒ Boolean
- #mailchimp_member_update_required?(member) ⇒ Boolean
- #mailchimp_subscribed_lists ⇒ Object
-
#mailchimp_sync!(force: true) ⇒ Object
Pulls the current status from Mailchimp API into the Mailchimp List Member objects Run before the mailchimp fields are displayed.
- #mailchimp_sync_required? ⇒ Boolean
-
#mailchimp_update!(force: true) ⇒ Object
Pushes the current Mailchimp List Member objects to Mailchimp when needed.
Instance Method Details
#build_mailchimp_list_member(mailchimp_list:) ⇒ Object
Find or build
42 43 44 45 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 42 def build_mailchimp_list_member(mailchimp_list:) raise('expected a MailchimpList') unless mailchimp_list.kind_of?(Effective::MailchimpList) mailchimp_list_member(mailchimp_list: mailchimp_list) || mailchimp_list_members.build(mailchimp_list: mailchimp_list) end |
#mailchimp_last_synced_at ⇒ Object
51 52 53 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 51 def mailchimp_last_synced_at mailchimp_list_members.map(&:last_synced_at).min end |
#mailchimp_list_member(mailchimp_list:) ⇒ Object
36 37 38 39 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 36 def mailchimp_list_member(mailchimp_list:) raise('expected a MailchimpList') unless mailchimp_list.kind_of?(Effective::MailchimpList) mailchimp_list_members.find { |mlm| mlm.mailchimp_list_id == mailchimp_list.id } end |
#mailchimp_list_members_changed? ⇒ Boolean
47 48 49 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 47 def mailchimp_list_members_changed? mailchimp_list_members.any? { |mlm| mlm.changes.present? || mlm.marked_for_destruction? } end |
#mailchimp_member_update_required?(member) ⇒ Boolean
104 105 106 107 108 109 110 111 112 113 114 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 104 def mailchimp_member_update_required?(member) require_update = ['email', 'last_name', 'first_name'] return true if (changes.keys & require_update).present? return true if (previous_changes.keys & require_update).present? return true if member.changes.present? return true if member.previous_changes.present? false end |
#mailchimp_subscribed_lists ⇒ Object
32 33 34 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 32 def mailchimp_subscribed_lists mailchimp_list_members.select(&:subscribed?).map(&:mailchimp_list) end |
#mailchimp_sync!(force: true) ⇒ Object
Pulls the current status from Mailchimp API into the Mailchimp List Member objects Run before the mailchimp fields are displayed
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 62 def mailchimp_sync!(force: true) api = EffectiveMailchimp.api lists = Effective::MailchimpList.subscribable.sorted.to_a return if lists.length == mailchimp_list_members.length && !(force || mailchimp_sync_required?) lists.each do |mailchimp_list| member = build_mailchimp_list_member(mailchimp_list: mailchimp_list) list_member = api.list_member(mailchimp_list, email) || {} member.assign_mailchimp_attributes(list_member) end mailchimp_list_members.each do |member| list = lists.find { |list| list.id == member.mailchimp_list_id } member.mark_for_destruction unless list.present? end save! if mailchimp_list_members_changed? true end |
#mailchimp_sync_required? ⇒ Boolean
55 56 57 58 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 55 def mailchimp_sync_required? return true if mailchimp_last_synced_at.blank? mailchimp_last_synced_at < (Time.zone.now - 1.day) end |
#mailchimp_update!(force: true) ⇒ Object
Pushes the current Mailchimp List Member objects to Mailchimp when needed
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/models/concerns/effective_mailchimp_user.rb', line 85 def mailchimp_update!(force: true) api = EffectiveMailchimp.api assign_attributes(mailchimp_user_form_action: nil) mailchimp_list_members.map do |member| if member.mailchimp_id.blank? && member.subscribed? list_member = api.list_member_add(member) member.assign_mailchimp_attributes(list_member) elsif member.mailchimp_id.present? && (force || mailchimp_member_update_required?(member)) list_member = api.list_member_update(member) member.assign_mailchimp_attributes(list_member) end end save! if mailchimp_list_members_changed? true end |