diff --git a/app/models/supporter.rb b/app/models/supporter.rb index 34e2351..f38aebc 100644 --- a/app/models/supporter.rb +++ b/app/models/supporter.rb @@ -21,8 +21,7 @@ class Supporter field :coordinates, type: Array field :comments, type: String field :language, type: String - field :email2, type: String - field :email3, type: String + field :unsubscribed, type: Boolean, default: false field :duplicate, type: Boolean, default: false validates :first_name, presence: true diff --git a/lib/mail_chimp_batch_update.rb b/lib/mail_chimp_batch_update.rb index e88a953..d696f22 100644 --- a/lib/mail_chimp_batch_update.rb +++ b/lib/mail_chimp_batch_update.rb @@ -1,20 +1,28 @@ class MailChimpBatchUpdate - def self.update_all(api_key, list_id) + def initialize(api_key, list_id) + @mailchimp = Mailchimp::API.new(api_key) + @list_id = list_id + end + + def update_all subscribers = [] - mailchimp = Mailchimp::API.new(api_key) Supporter.each_with_index do |supporter, index| subscribers.push(subscriber supporter) if index.modulo(20) == 0 - mailchimp.lists.batch_subscribe(list_id, subscribers, false, true, false) + batch_subscribe(subscribers) subscribers = [] end end - mailchimp.lists.batch_subscribe(list_id, subscribers, false, true, false) + batch_subscribe(subscribers) end - def self.subscriber(supporter) + def batch_subscribe(subscribers) + @mailchimp.lists.batch_subscribe(@list_id, subscribers, false, true, false) + end + + def subscriber(supporter) { 'EMAIL' => { 'email' => supporter.email }, 'language' => supporter.language, :EMAIL_TYPE => 'html', :merge_vars => { 'EMAIL' => supporter.email, @@ -23,7 +31,16 @@ class MailChimpBatchUpdate 'SUPPORT' => supporter.support, 'MEMBERSHIP' => supporter.li_membership.to_s, 'AGE' => supporter.age_category, - 'LANG' => supporter.language - } } + 'LANG' => supporter.language, + 'ZIP' => supporter.zip } } + end + + def update_unsubscibed + unsubscribed_members = @mailchimp.lists.members(@list_id, 'unsubscribed', limit: 100) + unsubscribed_members['data'].each do |member| + Supporter.where(email: member['email']).each do |supporter| + supporter.update_attributes unsubscribed: true + end + end end end