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: a07cfa0848bd0afa0554d8b0e28cd0693d1313c96fc71f389e6004271a3c15c5
4
- data.tar.gz: 6ee97205509d1245c04a35a9bc5f0d403ba80f010b1199aa7abcdee174b5b951
3
+ metadata.gz: 90147038e4ce23be0ac4eb2b378ffa9e7cc6fd062c6edfe9fb347d5ea54d3cae
4
+ data.tar.gz: facdabf1858a42c52610ae372e45ac1e7690a9e0ca81aea49783fd160ce7b119
5
5
  SHA512:
6
- metadata.gz: 45a62c470f53e14ae07423aed2384d4123470f268d2af736182618888bd7cc65c0b54a69c9972a16ef2d026e1b82230a80ad79029bcbabba6598bb9bffcb350b
7
- data.tar.gz: 1af0cf34cb91cd0041573647b5d67ea9d4439fe0c74e9bb2543a6c93c0cd8b59c8f840dc3d1722bcef598ba10eec5486097e1dcdea0b6a030235eb9534b58332
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
- client.lists.set_list_member(member.mailchimp_list.mailchimp_id, member.email, payload)
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
- client.lists.update_list_member(member.mailchimp_list.mailchimp_id, member.email, payload)
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
@@ -1,3 +1,3 @@
1
1
  module EffectiveMailchimp
2
- VERSION = '0.14.0'.freeze
2
+ VERSION = '0.15.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_mailchimp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect