effective_mailchimp 0.13.3 → 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: 1dbffbf79bcfa6f22f1fd8599abc18a84537380ae16bbf8da55368912d7308ca
4
- data.tar.gz: 2bafa384fc879e4444e51710569eb5e91337d7d46228b7de4927d3f257a27a48
3
+ metadata.gz: 90147038e4ce23be0ac4eb2b378ffa9e7cc6fd062c6edfe9fb347d5ea54d3cae
4
+ data.tar.gz: facdabf1858a42c52610ae372e45ac1e7690a9e0ca81aea49783fd160ce7b119
5
5
  SHA512:
6
- metadata.gz: '018a4244123fc004b0983d6bcd8aa658c6ca0ba3778b9959c373478af51d473ebc4634b912f5935db96afad46910efd46fe51b35b3956c246e8a07224f6197c8'
7
- data.tar.gz: 66a53fc0e6142b267a323874712f859145720624f2ea9375867d024f0156ace6acaaf70b168bd712463bf56ec74de0d066870c1f452202577636a56042a7a15d
6
+ metadata.gz: 5574df9502656c67d8a2c3b4c5a42efe58b3000f4b35a50491db5edaf560888ad07ebdb4835e143f9fa203b1c861afdb483148b548be3a6013cb293ee4446a0f
7
+ data.tar.gz: 9e7f4438f4d049e0a729b7bbb3fa89bac38755f065f5ca50374c5a0f750a65077462bdd8f3601e4b273f7dc2b27acc12b680ba4eccd1e484a706fa08d19f27c3
@@ -29,7 +29,7 @@ module Admin
29
29
  col :last_synced_at
30
30
 
31
31
  actions_col do |member|
32
- dropdown_link_to('Edit', "/admin/users/#{member.user.to_param}/edit#tab-mailchimp", 'data-turbolinks': false)
32
+ dropdown_link_to('Edit', "/admin/users/#{member.user.to_param}/edit#tab-mailchimp", 'data-turbolinks': false, 'data-turbo': false)
33
33
  end
34
34
  end
35
35
 
@@ -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
 
@@ -76,14 +76,14 @@ module Effective
76
76
  def categories(list_id)
77
77
  Rails.logger.info "[effective_mailchimp] Index Interest Categories" if debug?
78
78
 
79
- response = client.lists.get_list_interest_categories(list_id.try(:mailchimp_id) || list_id, count: 1000)
79
+ response = client.lists.get_list_interest_categories(list_id.try(:mailchimp_id) || list_id)
80
80
  Array(response['categories']) - [nil, '', {}]
81
81
  end
82
82
 
83
83
  def interests(list_id, category_id)
84
84
  Rails.logger.info "[effective_mailchimp] Index Interest Category Interests" if debug?
85
85
 
86
- response = client.lists.list_interest_category_interests(list_id, category_id, count: 1000)
86
+ response = client.lists.list_interest_category_interests(list_id, category_id)
87
87
  Array(response['interests']) - [nil, '', {}]
88
88
  end
89
89
 
@@ -95,6 +95,7 @@ module Effective
95
95
  begin
96
96
  client.lists.get_list_member(id.try(:mailchimp_id) || id, subscriber_hash(email))
97
97
  rescue MailchimpMarketing::ApiError => e
98
+ raise unless e.status == 404
98
99
  {}
99
100
  end
100
101
  end
@@ -128,9 +129,18 @@ module Effective
128
129
  Rails.logger.info "[effective_mailchimp] Add List Member" if debug?
129
130
  return if sandbox_mode?
130
131
 
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)
132
+ # Actually add or update
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
134
144
  end
135
145
 
136
146
  def list_member_update(member)
@@ -152,21 +162,16 @@ module Effective
152
162
 
153
163
  payload = {
154
164
  email_address: member.user.email,
155
- status: list_member_status(member),
165
+ status: (member.subscribed ? 'subscribed' : 'unsubscribed'),
156
166
  merge_fields: merge_fields.transform_values { |value| value || '' },
157
167
  interests: member.interests_hash.presence
158
168
  }.compact
159
169
  end
160
170
 
161
- # Mailchimp identifies a list member by the MD5 hash of their lowercase email address
162
171
  def subscriber_hash(email)
163
172
  raise('expected an email') unless email.to_s.include?('@')
164
173
 
165
- Digest::MD5.hexdigest(email.to_s.downcase.strip)
166
- end
167
-
168
- def list_member_status(member)
169
- member.subscribed ? 'subscribed' : 'unsubscribed'
174
+ Digest::MD5.hexdigest(email.to_s.strip.downcase)
170
175
  end
171
176
 
172
177
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveMailchimp
2
- VERSION = '0.13.3'.freeze
2
+ VERSION = '0.15.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_mailchimp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.3
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-05-27 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rails
@@ -253,7 +252,6 @@ homepage: https://github.com/code-and-effect/effective_mailchimp
253
252
  licenses:
254
253
  - MIT
255
254
  metadata: {}
256
- post_install_message:
257
255
  rdoc_options: []
258
256
  require_paths:
259
257
  - lib
@@ -268,8 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
266
  - !ruby/object:Gem::Version
269
267
  version: '0'
270
268
  requirements: []
271
- rubygems_version: 3.5.9
272
- signing_key:
269
+ rubygems_version: 4.0.17
273
270
  specification_version: 4
274
271
  summary: Subscribe and unsubscribe to mailchimp lists.
275
272
  test_files: []