Class: Mailchimp::BaseAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/generators/saaskit/install/templates/app/adapters/mailchimp/base_adapter.rb

Constant Summary collapse

MAILCHIMP_API_KEY =
Rails.application.credentials[:mailchimp][:api_key]
MAILCHIMP_AUDIENCE_ID =
Rails.application.credentials[:mailchimp][:audience_id]

Instance Method Summary collapse

Constructor Details

#initializeBaseAdapter

Returns a new instance of BaseAdapter.



6
7
8
9
10
11
12
# File 'lib/generators/saaskit/install/templates/app/adapters/mailchimp/base_adapter.rb', line 6

def initialize
  @client = ::Gibbon::Request.new(api_key: MAILCHIMP_API_KEY)
  @client.timeout = 30
  @client.open_timeout = 30
  @client.symbolize_keys = true
  @client.debug = false
end

Instance Method Details

#build_options(options) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/generators/saaskit/install/templates/app/adapters/mailchimp/base_adapter.rb', line 42

def build_options(options)
  if options.key?(:user_id)
    user = User.find(options[:user_id])
    {email: user.email, first_name: user.first_name, last_name: user.last_name}
  elsif options.key?(:email)
    {email: options[:email]}
  end
end

#pending_subscribe(options) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/generators/saaskit/install/templates/app/adapters/mailchimp/base_adapter.rb', line 14

def pending_subscribe(options)
  options = build_options(options)

  options = {
    list_id: MAILCHIMP_AUDIENCE_ID,
    status: "pending",
  }.merge!(options)

  body = {
    'email_address': options[:email],
    'status': options[:status],
  }

  body[:merge_fields] = {} if options.key?(:first_name) || options.key?(:last_name)
  body[:merge_fields][:FNAME] = options[:first_name] if options.key?(:first_name)
  body[:merge_fields][:LNAME] = options[:last_name] if options.key?(:last_name)

  email_hash = Digest::MD5.hexdigest(options[:email].downcase)

  begin
    @client.lists(options[:list_id]).members(email_hash).upsert(body: body)
  rescue Gibbon::MailChimpError => exception
    OpenStruct.new(success?: false, error: "Subscribe failed", detail: exception.detail)
  else
    OpenStruct.new(success?: true, error: nil, detail: nil)
  end
end