class MailchimpSyncJob < Struct.new(:mailchimp_kit, :options) def self.merged_person(kit, loser_email, winner_id, new_lists) return if kit.cancelled? job = new(kit, { :type => "merged_person", :loser_email => loser_email, :winner_id => winner_id, :new_lists => new_lists }) Delayed::Job.enqueue(job, :queue => "mailchimp") end def perform send(options[:type]) end def initial_sync mailchimp_kit.count_from_mailchimp = 0 mailchimp_kit.count_merged_mailchimp = 0 mailchimp_kit.save list_ids.each do |list_id| mailchimp_kit.create_webhooks(list_id) mailchimp_kit.sync_mailchimp_to_artfully_update_members(list_id) mailchimp_kit.sync_mailchimp_to_artfully_new_members(list_id) end ProducerMailer.mailchimp_kit_initial_sync_notification( mailchimp_kit, mailchimp_kit.organization.owner, added_list_names, removed_list_names ).deliver end def list_removal mailchimp_kit.destroy_webhooks(list_id) mailchimp_kit.unsubscribe_old_members(list_id) end def merged_person mailchimp_kit.sync_merged_loser_to_mailchimp(options[:loser_email]) mailchimp_kit.sync_merged_winner_to_mailchimp(options[:winner_id], options[:new_lists]) end def webhook_cleaned mailchimp_kit.sync_mailchimp_webhook_cleaned(list_id, data) end def webhook_subscribe mailchimp_kit.sync_mailchimp_webhook_new_subscriber(list_id, data) end def webhook_profile mailchimp_kit.sync_mailchimp_webhook_update_person(list_id, data) end def webhook_upemail mailchimp_kit.sync_mailchimp_webhook_update_person_email(list_id, data) end def webhook_unsubscribe mailchimp_kit.sync_mailchimp_webhook_member_unsubscribe(list_id, data) end def webhook_campaign mailchimp_kit.sync_mailchimp_webhook_campaign_sent(list_id, data) end def person_update_to_mailchimp mailchimp_kit.sync_artfully_person_update(options[:person_id], options[:person_changes], options[:bounced_list_ids]) end def kit_cancelled mailchimp_kit.attached_lists.each do |list| mailchimp_kit.destroy_webhooks(list[:list_id]) end mailchimp_kit.organization.people.each do |person| person.subscribed_lists = [] person.save! end end def person_subscribe mailchimp_kit.sync_artfully_person_subscribe(person_id, list_id, single_optin) end def person_unsubscribe mailchimp_kit.sync_artfully_person_unsubscribe(person_id, list_id) end def subscribe_segment mailchimp_kit.sync_artfully_segment(segment_id, list_id) end def add_group_segment mailchimp_kit.sync_artfully_segment_add_group(segment_id, grouping) end def subscribe_to_advanced_search_segment mailchimp_kit.sync_artfully_advanced_search_segment(advanced_search_segment_id, list_id) end def add_group_to_advanced_search_segment mailchimp_kit.sync_artfully_advanced_search_segment_add_group(advanced_search_segment_id, grouping) end def subscribe_search mailchimp_kit.sync_artfully_search(search_id, list_id) end def add_group_search mailchimp_kit.sync_artfully_search_add_group(search_id, grouping) end def subscribe_advanced_search mailchimp_kit.sync_artfully_advanced_search(advanced_search_id, list_id) end def add_group_advanced_search mailchimp_kit.sync_artfully_advanced_search_add_group(advanced_search_id, grouping) end def open_check mailchimp_kit.sync_artfully_open_check(campaign_id) end def grouping_update mailchimp_kit.sync_artfully_grouping_update(person_id) end private def_each :list_id, :list_ids, :added_list_names, :removed_list_names, :data, :person_id, :segment_id, :advanced_search_segment_id, :search_id, :advanced_search_id, :campaign_id, :grouping, :single_optin do |method_name| options[method_name] end end