effective_mailchimp 0.14.0 → 0.15.0
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
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 90147038e4ce23be0ac4eb2b378ffa9e7cc6fd062c6edfe9fb347d5ea54d3cae
|
|
4
|
+
data.tar.gz: facdabf1858a42c52610ae372e45ac1e7690a9e0ca81aea49783fd160ce7b119
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5574df9502656c67d8a2c3b4c5a42efe58b3000f4b35a50491db5edaf560888ad07ebdb4835e143f9fa203b1c861afdb483148b548be3a6013cb293ee4446a0f
|
|
7
|
+
data.tar.gz: 9e7f4438f4d049e0a729b7bbb3fa89bac38755f065f5ca50374c5a0f750a65077462bdd8f3601e4b273f7dc2b27acc12b680ba4eccd1e484a706fa08d19f27c3
|
|
@@ -248,19 +248,17 @@ module EffectiveMailchimpUser
|
|
|
248
248
|
member.assign_mailchimp_attributes(list_member) if list_member.present?
|
|
249
249
|
rescue MailchimpMarketing::ApiError => e
|
|
250
250
|
message = e.to_s.downcase
|
|
251
|
+
compliance_error = e.status == 400 && message.include?('member in compliance state')
|
|
251
252
|
|
|
252
|
-
if message.include?("cannot be subscribed") || message.include?("deleted") || message.include?("unsubscribed") || message.include?("archived") || message.include?("cleaned")
|
|
253
|
+
if compliance_error || message.include?("cannot be subscribed") || message.include?("deleted") || message.include?("unsubscribed") || message.include?("archived") || message.include?("cleaned")
|
|
253
254
|
member.assign_mailchimp_cannot_be_subscribed
|
|
254
|
-
elsif message.include?("already a list member") || message.include?("already in this list")
|
|
255
|
-
existing = api.list_member(member.mailchimp_list, member.user.email)
|
|
256
|
-
member.assign_mailchimp_attributes(existing) if existing.present?
|
|
257
255
|
elsif message.include?("could not be found")
|
|
258
256
|
# Nothing to do
|
|
259
257
|
else
|
|
260
258
|
# Nothing to do.
|
|
261
259
|
end
|
|
262
260
|
|
|
263
|
-
if !EffectiveMailchimp.silence_api_errors?
|
|
261
|
+
if !EffectiveMailchimp.silence_api_errors? && !compliance_error
|
|
264
262
|
EffectiveResources.send_error(e, user_id: id || 'nil')
|
|
265
263
|
end
|
|
266
264
|
|
|
@@ -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
|
|
@@ -92,8 +93,9 @@ 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
|
|
98
|
+
raise unless e.status == 404
|
|
97
99
|
{}
|
|
98
100
|
end
|
|
99
101
|
end
|
|
@@ -128,8 +130,17 @@ module Effective
|
|
|
128
130
|
return if sandbox_mode?
|
|
129
131
|
|
|
130
132
|
# Actually add or update
|
|
131
|
-
payload = list_member_payload(member)
|
|
132
|
-
|
|
133
|
+
payload = list_member_payload(member).merge(status_if_new: (member.subscribed? ? 'subscribed' : 'unsubscribed'))
|
|
134
|
+
list_id = member.mailchimp_list.mailchimp_id
|
|
135
|
+
hash = subscriber_hash(member.user.email)
|
|
136
|
+
|
|
137
|
+
begin
|
|
138
|
+
client.lists.set_list_member(list_id, hash, payload)
|
|
139
|
+
rescue MailchimpMarketing::ApiError => e
|
|
140
|
+
raise unless e.status == 400 && e.to_s.include?('Member Exists')
|
|
141
|
+
|
|
142
|
+
client.lists.update_list_member(list_id, hash, payload.except(:status_if_new))
|
|
143
|
+
end
|
|
133
144
|
end
|
|
134
145
|
|
|
135
146
|
def list_member_update(member)
|
|
@@ -139,7 +150,8 @@ module Effective
|
|
|
139
150
|
return if sandbox_mode?
|
|
140
151
|
|
|
141
152
|
payload = list_member_payload(member)
|
|
142
|
-
|
|
153
|
+
hash = member.mailchimp_id.presence || subscriber_hash(member.email)
|
|
154
|
+
client.lists.update_list_member(member.mailchimp_list.mailchimp_id, hash, payload)
|
|
143
155
|
end
|
|
144
156
|
|
|
145
157
|
def list_member_payload(member)
|
|
@@ -156,5 +168,11 @@ module Effective
|
|
|
156
168
|
}.compact
|
|
157
169
|
end
|
|
158
170
|
|
|
171
|
+
def subscriber_hash(email)
|
|
172
|
+
raise('expected an email') unless email.to_s.include?('@')
|
|
173
|
+
|
|
174
|
+
Digest::MD5.hexdigest(email.to_s.strip.downcase)
|
|
175
|
+
end
|
|
176
|
+
|
|
159
177
|
end
|
|
160
178
|
end
|