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



28
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
# File 'app/models/effective/mailchimp_list.rb', line 28

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



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

def can_subscribe!
  update!(can_subscribe: true)
end

#cannot_subscribe!Object



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

def cannot_subscribe!
  update!(can_subscribe: false)
end

#create_mailchimp_merge_fields!(merge_fields) ⇒ Object

This creates our local merge fields ON Mailchimp



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

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



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

def force_subscribe!
  update!(force_subscribe: true)
end

#members_urlObject



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

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

#merge_fieldsObject



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

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

#merge_fields_urlObject



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

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

#to_sObject



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

def to_s
  name.presence || model_name.human
end

#unforce_subscribe!Object



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

def unforce_subscribe!
  update!(force_subscribe: false)
end

#urlObject



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

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