effective_mailchimp 0.13.1 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/models/effective/mailchimp_api.rb +21 -16
- data/lib/effective_mailchimp/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1dbffbf79bcfa6f22f1fd8599abc18a84537380ae16bbf8da55368912d7308ca
|
|
4
|
+
data.tar.gz: 2bafa384fc879e4444e51710569eb5e91337d7d46228b7de4927d3f257a27a48
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '018a4244123fc004b0983d6bcd8aa658c6ca0ba3778b9959c373478af51d473ebc4634b912f5935db96afad46910efd46fe51b35b3956c246e8a07224f6197c8'
|
|
7
|
+
data.tar.gz: 66a53fc0e6142b267a323874712f859145720624f2ea9375867d024f0156ace6acaaf70b168bd712463bf56ec74de0d066870c1f452202577636a56042a7a15d
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
# https://mailchimp.com/developer/marketing/api/
|
|
4
4
|
|
|
5
5
|
require 'MailchimpMarketing'
|
|
6
|
+
require 'digest'
|
|
6
7
|
|
|
7
8
|
module Effective
|
|
8
9
|
class MailchimpApi
|
|
@@ -75,14 +76,14 @@ module Effective
|
|
|
75
76
|
def categories(list_id)
|
|
76
77
|
Rails.logger.info "[effective_mailchimp] Index Interest Categories" if debug?
|
|
77
78
|
|
|
78
|
-
response = client.lists.get_list_interest_categories(list_id.try(:mailchimp_id) || list_id)
|
|
79
|
+
response = client.lists.get_list_interest_categories(list_id.try(:mailchimp_id) || list_id, count: 1000)
|
|
79
80
|
Array(response['categories']) - [nil, '', {}]
|
|
80
81
|
end
|
|
81
82
|
|
|
82
83
|
def interests(list_id, category_id)
|
|
83
84
|
Rails.logger.info "[effective_mailchimp] Index Interest Category Interests" if debug?
|
|
84
85
|
|
|
85
|
-
response = client.lists.list_interest_category_interests(list_id, category_id)
|
|
86
|
+
response = client.lists.list_interest_category_interests(list_id, category_id, count: 1000)
|
|
86
87
|
Array(response['interests']) - [nil, '', {}]
|
|
87
88
|
end
|
|
88
89
|
|
|
@@ -92,7 +93,7 @@ module Effective
|
|
|
92
93
|
Rails.logger.info "[effective_mailchimp] Get List Member" if debug?
|
|
93
94
|
|
|
94
95
|
begin
|
|
95
|
-
client.lists.get_list_member(id.try(:mailchimp_id) || id, email)
|
|
96
|
+
client.lists.get_list_member(id.try(:mailchimp_id) || id, subscriber_hash(email))
|
|
96
97
|
rescue MailchimpMarketing::ApiError => e
|
|
97
98
|
{}
|
|
98
99
|
end
|
|
@@ -127,17 +128,9 @@ module Effective
|
|
|
127
128
|
Rails.logger.info "[effective_mailchimp] Add List Member" if debug?
|
|
128
129
|
return if sandbox_mode?
|
|
129
130
|
|
|
130
|
-
#
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if existing.present?
|
|
134
|
-
member.assign_attributes(mailchimp_id: existing['id'])
|
|
135
|
-
return list_member_update(member)
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
# Actually add
|
|
139
|
-
payload = list_member_payload(member)
|
|
140
|
-
client.lists.add_list_member(member.mailchimp_list.mailchimp_id, payload)
|
|
131
|
+
# Actually add or update. set_list_member applies status_if_new when the contact is new
|
|
132
|
+
payload = list_member_payload(member).merge(status_if_new: list_member_status(member))
|
|
133
|
+
client.lists.set_list_member(member.mailchimp_list.mailchimp_id, subscriber_hash(member.user.email), payload)
|
|
141
134
|
end
|
|
142
135
|
|
|
143
136
|
def list_member_update(member)
|
|
@@ -147,7 +140,8 @@ module Effective
|
|
|
147
140
|
return if sandbox_mode?
|
|
148
141
|
|
|
149
142
|
payload = list_member_payload(member)
|
|
150
|
-
|
|
143
|
+
hash = member.mailchimp_id.presence || subscriber_hash(member.email)
|
|
144
|
+
client.lists.update_list_member(member.mailchimp_list.mailchimp_id, hash, payload)
|
|
151
145
|
end
|
|
152
146
|
|
|
153
147
|
def list_member_payload(member)
|
|
@@ -158,11 +152,22 @@ module Effective
|
|
|
158
152
|
|
|
159
153
|
payload = {
|
|
160
154
|
email_address: member.user.email,
|
|
161
|
-
status: (member
|
|
155
|
+
status: list_member_status(member),
|
|
162
156
|
merge_fields: merge_fields.transform_values { |value| value || '' },
|
|
163
157
|
interests: member.interests_hash.presence
|
|
164
158
|
}.compact
|
|
165
159
|
end
|
|
166
160
|
|
|
161
|
+
# Mailchimp identifies a list member by the MD5 hash of their lowercase email address
|
|
162
|
+
def subscriber_hash(email)
|
|
163
|
+
raise('expected an email') unless email.to_s.include?('@')
|
|
164
|
+
|
|
165
|
+
Digest::MD5.hexdigest(email.to_s.downcase.strip)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def list_member_status(member)
|
|
169
|
+
member.subscribed ? 'subscribed' : 'unsubscribed'
|
|
170
|
+
end
|
|
171
|
+
|
|
167
172
|
end
|
|
168
173
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: effective_mailchimp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.13.
|
|
4
|
+
version: 0.13.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Code and Effect
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-05-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|