Class: Effective::MailchimpApi

Inherits:
Object
  • Object
show all
Defined in:
app/models/effective/mailchimp_api.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key:, server:) ⇒ MailchimpApi

Returns a new instance of MailchimpApi.



13
14
15
16
17
18
19
20
21
22
# File 'app/models/effective/mailchimp_api.rb', line 13

def initialize(api_key:, server:)
  raise('expected an api key') unless api_key.present?
  raise('expected a server') unless server.present?

  @api_key = api_key
  @server = server

  @client = ::MailchimpMarketing::Client.new()
  @client.set_config(api_key: api_key, server: server)
end

Instance Attribute Details

#api_keyObject

Returns the value of attribute api_key.



9
10
11
# File 'app/models/effective/mailchimp_api.rb', line 9

def api_key
  @api_key
end

#clientObject

Returns the value of attribute client.



11
12
13
# File 'app/models/effective/mailchimp_api.rb', line 11

def client
  @client
end

#serverObject

Returns the value of attribute server.



10
11
12
# File 'app/models/effective/mailchimp_api.rb', line 10

def server
  @server
end

Instance Method Details

#admin_urlObject



24
25
26
# File 'app/models/effective/mailchimp_api.rb', line 24

def admin_url
  "https://#{server}.admin.mailchimp.com"
end

#list(id) ⇒ Object



39
40
41
# File 'app/models/effective/mailchimp_api.rb', line 39

def list(id)
  client.lists.get_list(id.try(:mailchimp_id) || id)
end

#list_member(id, email) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'app/models/effective/mailchimp_api.rb', line 43

def list_member(id, email)
  raise('expected an email') unless email.to_s.include?('@')

  begin
    client.lists.get_list_member(id.try(:mailchimp_id) || id, email)
  rescue MailchimpMarketing::ApiError => e
    {}
  end
end

#list_member_add(member) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/models/effective/mailchimp_api.rb', line 53

def list_member_add(member)
  raise('expected an Effective::MailchimpListMember') unless member.kind_of?(Effective::MailchimpListMember)

  payload = {
    email_address: member.user.email,
    status: (member.subscribed ? 'subscribed' : 'unsubscribed'),
    merge_fields: {
      'FNAME': member.user.try(:first_name),
      'LNAME': member.user.try(:last_name)
    }
  }

  client.lists.add_list_member(member.mailchimp_list.mailchimp_id, payload)
end

#list_member_update(member) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'app/models/effective/mailchimp_api.rb', line 68

def list_member_update(member)
  raise('expected an Effective::MailchimpListMember') unless member.kind_of?(Effective::MailchimpListMember)

  payload = {
    email_address: member.user.email,
    status: (member.subscribed ? 'subscribed' : 'unsubscribed'),
    merge_fields: {
      'FNAME': member.user.try(:first_name),
      'LNAME': member.user.try(:last_name)
    }
  }

  client.lists.update_list_member(member.mailchimp_list.mailchimp_id, member.email, payload)
end

#listsObject

Returns an Array of Lists, which are each Hash Like this [{ …}, { … }]



34
35
36
37
# File 'app/models/effective/mailchimp_api.rb', line 34

def lists
  response = client.lists.get_all_lists()
  Array(response['lists']) - [nil, '', {}]
end

#pingObject



28
29
30
# File 'app/models/effective/mailchimp_api.rb', line 28

def ping
  client.ping.get()
end