class Workarea::MailChimp::Gateway::Members

Public Class Methods

new(default_list_id) click to toggle source
# File lib/integrations/workarea/mail_chimp/gateway/members.rb, line 4
def initialize(default_list_id)
  @default_list_id = default_list_id
end

Public Instance Methods

details(email) click to toggle source

Returns Hash or nil

# File lib/integrations/workarea/mail_chimp/gateway/members.rb, line 10
def details(email)
  response ||= begin
    MailChimp.request.lists(@default_list_id).members(digest_email(email)).retrieve
    rescue ::Gibbon::MailChimpError => e
      response_error_handler(e)
    end

  extract_member_details(response)
end
subscribe(subscribe_argument) click to toggle source
# File lib/integrations/workarea/mail_chimp/gateway/members.rb, line 28
def subscribe(subscribe_argument)
  return unless subscribe_argument[:email_address]
  begin
    MailChimp.request.lists(@default_list_id).members(digest_email(subscribe_argument[:email_address])).upsert(body: subscribe_argument.merge("status" => "subscribed"))
  rescue ::Gibbon::MailChimpError => e
    response_error_handler(e)
  end
end
unsubscribe(email, options = {}) click to toggle source
# File lib/integrations/workarea/mail_chimp/gateway/members.rb, line 20
def unsubscribe(email, options = {})
  begin
    MailChimp.request.lists(@default_list_id).members(digest_email(email)).update(body: { status: "unsubscribed" })
  rescue ::Gibbon::MailChimpError => e
    response_error_handler(e)
  end
end

Private Instance Methods

digest_email(email) click to toggle source
# File lib/integrations/workarea/mail_chimp/gateway/members.rb, line 54
def digest_email(email)
  md5 = Digest::MD5.new
  md5.update(email.downcase)
  md5.hexdigest
end
extract_member_details(details) click to toggle source

Returns

  • Hash of details for subscribed emails

  • nil if email does not exist

  • nil if email is unsubscribed

# File lib/integrations/workarea/mail_chimp/gateway/members.rb, line 44
def extract_member_details(details)
  if details["error"].present?
    nil
  elsif details["status"] == "unsubscribed"
    nil
  else
    details
  end
end