class MailchimpClient
Attributes
previous_response[R]
Public Class Methods
new(api_key, timeout)
click to toggle source
# File lib/mcmailer/mailchimp_client.rb, line 23 def initialize(api_key, timeout) @api_key = api_key @gibbon = Gibbon.new(@api_key) @gibbon.timeout = timeout end
Public Instance Methods
batch_destroy!(emails)
click to toggle source
# File lib/mcmailer/mailchimp_client.rb, line 87 def batch_destroy!(emails) @previous_response = @gibbon.list_batch_unsubscribe(:id => @list['id'], :emails => emails, :delete_member => true, :send_goodbye => false, :send_notify => false) rescue Timeout::Error raise RequestTimeout end
batch_subscribe(batch)
click to toggle source
# File lib/mcmailer/mailchimp_client.rb, line 75 def batch_subscribe(batch) @previous_response = @gibbon.list_batch_subscribe(:id => @list['id'], :batch => batch, :double_optin => false, :update_existing => true) rescue Timeout::Error raise RequestTimeout end
destroy!(email)
click to toggle source
# File lib/mcmailer/mailchimp_client.rb, line 81 def destroy!(email) @previous_response = @gibbon.list_unsubscribe(:id => @list['id'], :email_address => email, :delete_member => true, :send_goodbye => false, :send_notify => false) rescue Timeout::Error raise RequestTimeout end
destroy_all_subscribers!()
click to toggle source
WARNING: For large lists this is much slower than deleting all subscribers through Mailchimp's website, but it should work. It's useful for scenarios that require automation like Mailchimp unit tests.
# File lib/mcmailer/mailchimp_client.rb, line 97 def destroy_all_subscribers! responses = [] batch_size = 1500 until subscribers.count.zero? do begin emails = self.subscribers(0, batch_size).collect {|s| s['email']} batch_destroy!(emails) rescue UnexpectedResponse raise end responses << @previous_response break if @previous_response['success_count'].zero? end @previous_response = responses rescue Timeout::Error raise RequestTimeout end
subscribe(email, merge_vars={})
click to toggle source
# File lib/mcmailer/mailchimp_client.rb, line 63 def subscribe(email, merge_vars={}) @previous_response = @gibbon.list_subscribe(:id => @list['id'], :email_address => email, :double_optin => false, :update_existing => true, :merge_vars => merge_vars) rescue Timeout::Error raise RequestTimeout end
subscriber_info(email)
click to toggle source
# File lib/mcmailer/mailchimp_client.rb, line 69 def subscriber_info(email) @previous_response = @gibbon.list_member_info(:id => @list['id'], :email_address => [email]) rescue Timeout::Error raise RequestTimeout end
subscribers(start=0, limit=100)
click to toggle source
# File lib/mcmailer/mailchimp_client.rb, line 52 def subscribers(start=0, limit=100) @previous_response = @gibbon.list_members(:id => @list['id'], :start => start, :limit => limit) if !@previous_response.has_key?('data') raise UnexpectedResponse, "response hash did not have a 'data' key" end @previous_response['data'] rescue Timeout::Error raise RequestTimeout end
use_list(name)
click to toggle source
# File lib/mcmailer/mailchimp_client.rb, line 29 def use_list(name) begin @previous_response = @gibbon.lists rescue Timeout::Error raise RequestTimeout end if @previous_response.has_key?('data') lists = @previous_response['data'] matches = lists.select {|list| list.has_key?('name') && list['name'] == name} if matches.empty? raise ListNotFound, "provided name => '#{name}'" elsif matches.length > 1 raise UnexpectedResponse, "list names should be unique but found #{matches.length} lists by the name of '#{name}'" else @list = matches.first end else raise UnexpectedResponse, "response hash did not have a 'data' key" end end