Class: Effective::MailchimpList

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/effective/mailchimp_list.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.sync!Object

Creates or builds all the Lists



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/models/effective/mailchimp_list.rb', line 29

def self.sync!
  # All the Lists from Mailchimp
  lists = EffectiveMailchimp.api.lists

  # Get all our existing Effective::MailchimpList records
  mailchimp_lists = all()

  # Find or create Effective::Mailchimp based on existing lists
  lists.each do |list|
    mailchimp_id = list['id']
    web_id = list['web_id']
    name = list['name']

    mailchimp_list = mailchimp_lists.find { |ml| ml.mailchimp_id == mailchimp_id } || new()
    mailchimp_list.assign_attributes(mailchimp_id: mailchimp_id, web_id: web_id, name: name)
    mailchimp_list.save!
  end

  # Destroy any Effective::Mailchimp resources if they no longer returned by lists
  mailchimp_lists.each do |mailchimp_list|
    list = lists.find { |list| list['id'] == mailchimp_list.mailchimp_id }
    mailchimp_list.destroy! unless list.present?
  end

  true
end

Instance Method Details

#can_subscribe!Object



84
85
86
# File 'app/models/effective/mailchimp_list.rb', line 84

def can_subscribe!
  update!(can_subscribe: true)
end

#cannot_subscribe!Object



88
89
90
# File 'app/models/effective/mailchimp_list.rb', line 88

def cannot_subscribe!
  update!(can_subscribe: false)
end

#create_mailchimp_merge_fields!(merge_fields) ⇒ Object

This creates our local merge fields ON Mailchimp



57
58
59
60
61
62
63
64
65
# File 'app/models/effective/mailchimp_list.rb', line 57

def create_mailchimp_merge_fields!(merge_fields)
  raise('expected a Hash of merge fields') unless merge_fields.kind_of?(Hash)

  merge_fields.keys.each do |name|
    EffectiveMailchimp.api.add_merge_field(mailchimp_id, name: name)
  end

  true
end

#force_subscribe!Object



92
93
94
# File 'app/models/effective/mailchimp_list.rb', line 92

def force_subscribe!
  update!(force_subscribe: true)
end

#members_urlObject



76
77
78
# File 'app/models/effective/mailchimp_list.rb', line 76

def members_url
  EffectiveMailchimp.api.admin_url + "/lists/members?id=#{web_id}"
end

#merge_fieldsObject



67
68
69
70
# File 'app/models/effective/mailchimp_list.rb', line 67

def merge_fields
  return [] unless mailchimp_id
  EffectiveMailchimp.api.list_merge_fields(mailchimp_id).map { |hash| hash['tag'] }.sort
end

#merge_fields_urlObject



80
81
82
# File 'app/models/effective/mailchimp_list.rb', line 80

def merge_fields_url
  EffectiveMailchimp.api.admin_url + "/lists/settings/merge-tags?id=#{web_id}"
end

#to_sObject



20
21
22
# File 'app/models/effective/mailchimp_list.rb', line 20

def to_s
  name.presence || model_name.human
end

#unforce_subscribe!Object



96
97
98
# File 'app/models/effective/mailchimp_list.rb', line 96

def unforce_subscribe!
  update!(force_subscribe: false)
end

#urlObject



72
73
74
# File 'app/models/effective/mailchimp_list.rb', line 72

def url
  EffectiveMailchimp.api.admin_url + "/campaigns/#f_list:#{web_id}"
end