customerio 5.1.0 → 5.2.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: 18279a486386052aa99a48c56652ac566bf6abc973a6428af4d5886ec2ac3b85
4
- data.tar.gz: dcaef6f328effd4cf6dc820e81b27661e440ce79d2af33b6736da544be30a0e7
3
+ metadata.gz: 8ad688e060a453d3f02dfcdacc1407a4376fd355deb6feb6a531d4f2b9ebbad6
4
+ data.tar.gz: ea3401fa18f031f4ecb70fc79ee8817b0278294debe53f2f78adb403873f32a5
5
5
  SHA512:
6
- metadata.gz: bad65a5e1d2097aa9db014e71d2c1c310546ec57ce4efa002484a28d6a9031fd5db48a221659d74861ce7a7ff07489b4b8ac956ba11b7b7cadab4eabed730a98
7
- data.tar.gz: ce94e157fd6145afdaf303b1a6a91a5f2eeb9e8ea581d60acad95834e39bba788489c50e164070e83d4232bdb4c692315772bc52c0220676c216d26eeb217f1a
6
+ metadata.gz: 8b708a8aba7b91c3a270b2829cc7ba24cad4d72e8030f04cc266dcf97adcb9de8579f0fe159eeed5c95669890dd30376f05c28b43540894feb8dd15f25a516d4
7
+ data.tar.gz: 128500f502747de7b3d4e92a201ebcf23fa2ebe731f529fb57d72f2919f95f81f3cb8e59917a621e9e475c957c234302641581415d21cfa2189d3aa994889557
@@ -6,7 +6,7 @@ jobs:
6
6
  test:
7
7
  strategy:
8
8
  matrix:
9
- ruby: ['2.5', '2.6', '2.7']
9
+ ruby: ['2.5', '2.6', '2.7', '3.0', '3.1', '3.2']
10
10
  runs-on: ubuntu-latest
11
11
  env:
12
12
  BUNDLE_PATH: ${{ github.workspace }}/vendor/bundle
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,7 @@
1
+ ## Customerio 5.2.0 - December 8, 2023
2
+ ### Changed
3
+ - The `identify` method will now automatically use the `cio_id` attribute as the customer ID when calling the track service. This allows a customer to be updated using `identify` to modify the `id` and `email` attributes.
4
+
1
5
  ## Customerio 5.1.0 - May 5, 2023
2
6
  ### Added
3
7
  - Added `send_push` to `APIClient` and `SendPushRequest` to support sending transactional push notifications.
data/README.md CHANGED
@@ -77,7 +77,7 @@ if you pass along the current subscription plan (free / basic / premium) for you
77
77
  set up triggers which are only sent to customers who have subscribed to a
78
78
  particular plan (e.g. "premium").
79
79
 
80
- You'll want to indentify your customers when they sign up for your app and any time their
80
+ You'll want to identify your customers when they sign up for your app and any time their
81
81
  key information changes. This keeps [Customer.io](https://customer.io) up to date with your customer information.
82
82
 
83
83
  ```ruby
@@ -95,6 +95,24 @@ $customerio.identify(
95
95
  )
96
96
  ```
97
97
 
98
+ ### Updating customers
99
+
100
+ You can use the identify operation to update customers.
101
+ If you need to change the `id` or `email` identifiers for a customer,
102
+ you will need to pass in the `cio_id` identifier.
103
+ `cio_id` is a unique identifier set by Customer.io, used to reference a person,
104
+ and cannot be changed.
105
+
106
+ E.g.: if the customer created in the identify operation above was given the `cio_id` of `"f000000d"`, you could change its ID and email address using:
107
+
108
+ ```ruby
109
+ $customerio.identify(
110
+ :cio_id => "f000000d",
111
+ :id => 1005,
112
+ :email => "bob.fullname@example.com"
113
+ )
114
+ ```
115
+
98
116
  ### Deleting customers
99
117
 
100
118
  Deleting a customer will remove them, and all their information from
@@ -151,9 +151,17 @@ module Customerio
151
151
 
152
152
  def create_or_update(attributes = {})
153
153
  attributes = Hash[attributes.map { |(k,v)| [ k.to_sym, v ] }]
154
- raise MissingIdAttributeError.new("Must provide a customer id") if is_empty?(attributes[:id])
154
+ if is_empty?(attributes[:id]) && is_empty?(attributes[:cio_id])
155
+ raise MissingIdAttributeError.new("Must provide a customer id")
156
+ end
155
157
 
156
- url = customer_path(attributes[:id])
158
+ # Use cio_id as the identifier, if present,
159
+ # to allow the id and email identifiers to be updated.
160
+ customer_id = attributes[:id]
161
+ if !is_empty?(attributes[:cio_id])
162
+ customer_id = "cio_" + attributes[:cio_id]
163
+ end
164
+ url = customer_path(customer_id)
157
165
  @client.request_and_verify_response(:put, url, attributes)
158
166
  end
159
167
 
@@ -55,7 +55,7 @@ module Customerio
55
55
  param
56
56
  end
57
57
 
58
- # Prefer ERB::Util.url_encode, fall baack to deprecation URI.encode for
58
+ # Prefer ERB::Util.url_encode, fall back to deprecation URI.encode for
59
59
  # old Ruby support
60
60
  def self.escape_value(value)
61
61
  if ERB::Util.respond_to? :url_encode
@@ -1,3 +1,3 @@
1
1
  module Customerio
2
- VERSION = "5.1.0"
2
+ VERSION = "5.2.0"
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -172,6 +172,7 @@ describe Customerio::Client do
172
172
  it "requires an id attribute" do
173
173
  lambda { client.identify(email: "customer@example.com") }.should raise_error(Customerio::Client::MissingIdAttributeError)
174
174
  lambda { client.identify(id: "") }.should raise_error(Customerio::Client::MissingIdAttributeError)
175
+ lambda { client.identify(cio_id: "") }.should raise_error(Customerio::Client::MissingIdAttributeError)
175
176
  end
176
177
 
177
178
  it 'should not raise errors when attribute keys are strings' do
@@ -183,6 +184,45 @@ describe Customerio::Client do
183
184
 
184
185
  lambda { client.identify(attributes) }.should_not raise_error()
185
186
  end
187
+
188
+ it 'uses cio_id for customer id, when present, for id updates' do
189
+ stub_request(:put, api_uri('/api/v1/customers/cio_347f00d')).with(
190
+ body: {
191
+ cio_id: "347f00d",
192
+ id: 5
193
+ }).to_return(status: 200, body: "", headers: {})
194
+
195
+ client.identify({
196
+ cio_id: "347f00d",
197
+ id: 5
198
+ })
199
+ end
200
+
201
+ it 'uses cio_id for customer id, when present, for email updates' do
202
+ stub_request(:put, api_uri('/api/v1/customers/cio_347f00d')).with(
203
+ body: {
204
+ cio_id: "347f00d",
205
+ email: "different.customer@example.com"
206
+ }).to_return(status: 200, body: "", headers: {})
207
+
208
+ client.identify({
209
+ cio_id: "347f00d",
210
+ email: "different.customer@example.com"
211
+ })
212
+ end
213
+
214
+ it 'allows updates with cio_id as the only id' do
215
+ stub_request(:put, api_uri('/api/v1/customers/cio_347f00d')).with(
216
+ body: {
217
+ cio_id: "347f00d",
218
+ location: "here"
219
+ }).to_return(status: 200, body: "", headers: {})
220
+
221
+ client.identify({
222
+ cio_id: "347f00d",
223
+ location: "here"
224
+ })
225
+ end
186
226
  end
187
227
 
188
228
  describe "#delete" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: customerio
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Allison
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-08 00:00:00.000000000 Z
11
+ date: 2023-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -127,7 +127,7 @@ homepage: http://customer.io
127
127
  licenses:
128
128
  - MIT
129
129
  metadata: {}
130
- post_install_message:
130
+ post_install_message:
131
131
  rdoc_options: []
132
132
  require_paths:
133
133
  - lib
@@ -142,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  - !ruby/object:Gem::Version
143
143
  version: '0'
144
144
  requirements: []
145
- rubygems_version: 3.0.3.1
146
- signing_key:
145
+ rubygems_version: 3.2.33
146
+ signing_key:
147
147
  specification_version: 4
148
148
  summary: A ruby client for the Customer.io event API.
149
149
  test_files: