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!(api: EffectiveMailchimp.api, merge_fields: nil) ⇒ Object

Creates or builds all the Lists



26
27
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/models/effective/mailchimp_list.rb', line 26

def self.sync!(api: EffectiveMailchimp.api, merge_fields: nil)
  # All the Lists from Mailchimp
  lists = 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']

    mailchimp_list = mailchimp_lists.find { |ml| ml.mailchimp_id == mailchimp_id } || new()
    mailchimp_list.assign_attributes(
      mailchimp_id: mailchimp_id,

      web_id: list['web_id'],
      name: list['name'],
      updated_at: Time.zone.now
    )

    mailchimp_list.assign_attributes(can_subscribe: true) if mailchimp_list.new_record?
    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

  # Sync merge fields
  if merge_fields.present?
    merge_field_keys = merge_fields.keys.map(&:to_s)

    mailchimp_lists.reject(&:destroyed?).each do |mailchimp_list|
      existing = api.list_merge_fields(mailchimp_list).map { |hash| hash['tag'] }
      (merge_field_keys - existing).each do |name| 
        puts "Adding merge field #{name} to #{mailchimp_list}"
        api.add_merge_field(mailchimp_list, name: name)
      end
    end
  end

  true
end

Instance Method Details

#grouped?Boolean

Returns:

  • (Boolean)


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

def grouped?
  mailchimp_categories.present? && mailchimp_categories.any? { |category| category.mailchimp_interests.present? }
end

#members_urlObject



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

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

#merge_fieldsObject



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

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

#merge_fields_urlObject



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

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

#to_sObject



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

def to_s
  name.presence || model_name.human
end

#ungrouped?Boolean

Returns:

  • (Boolean)


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

def ungrouped?
  !grouped?
end