class FailMail::Member

Attributes

email[R]
name[R]

Public Class Methods

new(email, name, client=FailMail.client) click to toggle source
Calls superclass method FailMail::Base::new
# File lib/fail_mail/member.rb, line 5
def initialize email, name, client=FailMail.client
  super client
  @email = email
  @name = name
end

Public Instance Methods

subscribe!(list_name) click to toggle source
# File lib/fail_mail/member.rb, line 11
def subscribe! list_name
  create_member list_name
rescue Savon::SOAPFault => exception
  member_id = extract_member_id_from_exception exception.message, list_name
  subscribe_member member_id, list_name if member_id
end
subscriptions() click to toggle source
# File lib/fail_mail/member.rb, line 23
def subscriptions
  @subscriptions ||= begin
    response = call :select_members_ex, message: {
      FieldsToFetch: { string: %w[MemberID ListName MemberType] },
      FilterCriteriaArray: { string: ["EmailAddress = #{email}", "MemberType = normal"] }
    }
    result = response.body[:select_members_ex_response] || {}
    subscriptions = result.fetch(:return, {}).fetch(:item, [])
    subscriptions.shift
    subscriptions.map do |list|
      member_id, list_name, _ = list[:item]
      FailMail::Subscription.new list_name, member_id, self
    end
  end
end
unsubscribe!(list_name) click to toggle source
# File lib/fail_mail/member.rb, line 18
def unsubscribe! list_name
  subscription = subscriptions.find { |sub| sub.list_name == list_name }
  subscription.unsubscribe! if subscription
end

Private Instance Methods

create_member(list_name) click to toggle source
# File lib/fail_mail/member.rb, line 41
def create_member list_name
  response = call :create_single_member, message: {
    EmailAddress: email,
    FullName: name,
    ListName: list_name
  }
  member_id = response.body[:create_single_member_response][:return]
  FailMail::Subscription.new list_name, member_id, self
end
extract_member_id_from_exception(message, list_name) click to toggle source
# File lib/fail_mail/member.rb, line 65
def extract_member_id_from_exception message, list_name
  e_list_name, e_email, member_id = message.scan(/'([^']*)'/).map &:first
  member_id if e_list_name == list_name && e_email == email
end
subscribe_member(member_id, list_name) click to toggle source
# File lib/fail_mail/member.rb, line 51
def subscribe_member member_id, list_name
  response = call :update_member_status, message: {
    MemberStatus: 'needs-confirm',
    SimpleMemberStructIn: {
      MemberID: member_id,
      EmailAddress: email,
      ListName: list_name
    }
  }
  if response.body[:update_member_status_response][:return]
    FailMail::Subscription.new list_name, member_id, self
  end
end