effective_mailchimp 0.13.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d2fb7ef831960e02b9595a85f8996165fa2d6d317b559bce63835ad7750f8a6
4
- data.tar.gz: 7b66339e2d64a85d10fbd269e7a73ba6e11f0fc6995eb0e172b9ed17c2cc5c29
3
+ metadata.gz: 1dbffbf79bcfa6f22f1fd8599abc18a84537380ae16bbf8da55368912d7308ca
4
+ data.tar.gz: 2bafa384fc879e4444e51710569eb5e91337d7d46228b7de4927d3f257a27a48
5
5
  SHA512:
6
- metadata.gz: bde7eab43dc5279cf94b762750f9f846bbb1e3faf7685894e33275495d49ec618e2acf2ffbe6ee65b7f264b9e84d415c6c175b9fcde074aa2c94b438389d8750
7
- data.tar.gz: 6f70c30c2a155a93ad73faaafebd686897ca21591145d581d04857a5faf787cb580f0b3dc02df21c7325440d04ac14ef3896910ca313294144222ceaac4cedf7
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,9 +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
- # Actually add or update
131
- payload = list_member_payload(member)
132
- client.lists.set_list_member(member.mailchimp_list.mailchimp_id, member.email, 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)
133
134
  end
134
135
 
135
136
  def list_member_update(member)
@@ -139,7 +140,8 @@ module Effective
139
140
  return if sandbox_mode?
140
141
 
141
142
  payload = list_member_payload(member)
142
- client.lists.update_list_member(member.mailchimp_list.mailchimp_id, member.email, payload)
143
+ hash = member.mailchimp_id.presence || subscriber_hash(member.email)
144
+ client.lists.update_list_member(member.mailchimp_list.mailchimp_id, hash, payload)
143
145
  end
144
146
 
145
147
  def list_member_payload(member)
@@ -150,11 +152,22 @@ module Effective
150
152
 
151
153
  payload = {
152
154
  email_address: member.user.email,
153
- status: (member.subscribed ? 'subscribed' : 'unsubscribed'),
155
+ status: list_member_status(member),
154
156
  merge_fields: merge_fields.transform_values { |value| value || '' },
155
157
  interests: member.interests_hash.presence
156
158
  }.compact
157
159
  end
158
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
+
159
172
  end
160
173
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveMailchimp
2
- VERSION = '0.13.2'.freeze
2
+ VERSION = '0.13.3'.freeze
3
3
  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.2
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-04-15 00:00:00.000000000 Z
11
+ date: 2026-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails