emarsys 0.3.9 → 0.4.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 +5 -5
- data/.travis.yml +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +20 -0
- data/emarsys.gemspec +4 -2
- data/lib/emarsys.rb +1 -0
- data/lib/emarsys/client.rb +1 -1
- data/lib/emarsys/data_objects/contact.rb +18 -6
- data/lib/emarsys/data_objects/contact_list.rb +19 -1
- data/lib/emarsys/data_objects/segment.rb +17 -0
- data/lib/emarsys/version.rb +1 -1
- data/spec/emarsys/client_spec.rb +9 -0
- data/spec/emarsys/data_objects/contact_list_spec.rb +7 -0
- data/spec/emarsys/data_objects/contact_spec.rb +12 -0
- data/spec/emarsys/data_objects/segment_spec.rb +14 -0
- data/spec/emarsys/response_spec.rb +2 -1
- data/spec/spec_helper.rb +1 -0
- metadata +24 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b91da527fa70b69756d7dca70b153ec103be4c52ed2fc189b6d8eb6d4036637a
|
4
|
+
data.tar.gz: 1ac969e7acf008b6cc07ae032d3c8ce42b8cdcf398b61bb3b51db0ff14c18533
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b512d98dc2a1acbb56a1e783fb00a6e3d915d58a66ea1c773b9c92ea444b4724734e004273ee72758b16179b10b304656a07ad56bd5bd406606fe0d9726c02a0
|
7
|
+
data.tar.gz: 955e9a9626883406b3e029929475dbf04971f3411b5c2112626f7faacd0796c7a0216caf9f1548587d686d4d5e54b1a3c29870fc5a376f7f94ef65673c04eb42
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,35 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v0.4.0
|
4
|
+
|
5
|
+
* Add supported segment endpoints and remove the deprecated one ([#64]https://github.com/Absolventa/emarsys-rb/pull/64)
|
6
|
+
|
7
|
+
## v0.3.13
|
8
|
+
|
9
|
+
* Add method to delete ContactList by ID ([#63](https://github.com/Absolventa/emarsys-rb/pull/63))
|
10
|
+
* Use correct endpoint in ContactList.remove_contacts ([#62](https://github.com/Absolventa/emarsys-rb/pull/62))
|
11
|
+
* Improved Contact.query method ([#61](https://github.com/Absolventa/emarsys-rb/pull/61))
|
12
|
+
|
13
|
+
## v0.3.12
|
14
|
+
|
15
|
+
* Documentation update for Segments (change to README only)
|
16
|
+
|
17
|
+
## v0.3.11
|
18
|
+
|
19
|
+
* Add support for Segments API ([#58](https://github.com/Absolventa/emarsys-rb/pull/58))
|
20
|
+
|
21
|
+
## v0.3.10
|
22
|
+
|
23
|
+
* Fix 'Invalid Password' error ([#55](https://github.com/Absolventa/emarsys-rb/pull/55))
|
24
|
+
|
25
|
+
## v0.3.9
|
26
|
+
|
27
|
+
* Add 'query' support to Contact data object ([#53](https://github.com/Absolventa/emarsys-rb/pull/53))
|
28
|
+
|
29
|
+
## v0.3.5 - v0.3.8
|
30
|
+
|
31
|
+
* Documentation TODO
|
32
|
+
|
3
33
|
## v0.3.4
|
4
34
|
|
5
35
|
* Allow accessing of error code ([#35](https://github.com/Absolventa/emarsys-rb/pull/35))
|
data/README.md
CHANGED
@@ -144,8 +144,12 @@ Emarsys::Contact.create(key_id: 4980, key_value: 10, params: {1 => "Jane", 2 =>
|
|
144
144
|
# Update a contact with key_field (one example with mapped identifier, one without)
|
145
145
|
Emarsys::Contact.update(key_id: 'email', key_value: "jane.doe@example.com", params: {firstname: "John", lastname: "Doe"})
|
146
146
|
Emarsys::Contact.update(key_id: 3, key_value: "jane.doe@example.com", params: {1 => "John", 2 => "Doe"})
|
147
|
+
|
148
|
+
# Query contact information
|
149
|
+
Emarsys::Contact.query('3', 'john.doe@example.com', 'uid')
|
147
150
|
```
|
148
151
|
|
152
|
+
|
149
153
|
#### ContactList
|
150
154
|
|
151
155
|
```ruby
|
@@ -154,6 +158,12 @@ Emarsys::ContactList.collection
|
|
154
158
|
|
155
159
|
# Create a contact list
|
156
160
|
Emarsys::ContactList.create
|
161
|
+
|
162
|
+
# Delete a contact list
|
163
|
+
Emarsys::ContactList.delete(123)
|
164
|
+
|
165
|
+
# List all contacts in a contact list
|
166
|
+
Emarsys::ContactList.contacts(123)
|
157
167
|
```
|
158
168
|
|
159
169
|
#### Emails
|
@@ -227,6 +237,16 @@ Emarsys::Language.collection
|
|
227
237
|
Emarsys::Segment.collection
|
228
238
|
```
|
229
239
|
|
240
|
+
```ruby
|
241
|
+
# Run a segment for multiple contacts
|
242
|
+
Emarsys::Segment.run(123)
|
243
|
+
```
|
244
|
+
|
245
|
+
```ruby
|
246
|
+
# Check the status of a segment run
|
247
|
+
Emarsys::Segment.status('foo123')
|
248
|
+
```
|
249
|
+
|
230
250
|
#### Source
|
231
251
|
|
232
252
|
```ruby
|
data/emarsys.gemspec
CHANGED
@@ -17,11 +17,13 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
|
+
spec.required_ruby_version = '>= 2.3'
|
20
21
|
|
21
22
|
spec.add_dependency "rest-client"
|
22
23
|
|
23
|
-
spec.add_development_dependency "bundler", "~> 1.
|
24
|
+
spec.add_development_dependency "bundler", "~> 2.1.4"
|
24
25
|
spec.add_development_dependency "rake"
|
25
26
|
spec.add_development_dependency "rspec", ">= 3.5.0"
|
26
|
-
spec.add_development_dependency "webmock", "
|
27
|
+
spec.add_development_dependency "webmock", "~> 2.3.2"
|
28
|
+
spec.add_development_dependency "timecop"
|
27
29
|
end
|
data/lib/emarsys.rb
CHANGED
data/lib/emarsys/client.rb
CHANGED
@@ -121,15 +121,27 @@ module Emarsys
|
|
121
121
|
|
122
122
|
# Query contacts by custom
|
123
123
|
#
|
124
|
-
# @param key_id [Integer, String] The key used to query
|
125
|
-
# @param key_value [String] Value of internal id field
|
126
124
|
# @param return_value [Integer, String] Value of internal id field
|
125
|
+
# @param account [String] The account to use
|
126
|
+
# @param opts [Mixed] Further symbols to pass down to the request
|
127
127
|
# @return [Hash] result data
|
128
128
|
# @example
|
129
|
-
#
|
130
|
-
#
|
131
|
-
|
132
|
-
|
129
|
+
# # Get all emails from the emarsys account
|
130
|
+
# Emarsys::Contact.query(return_value: 'email')
|
131
|
+
# # Get the ID of the account with a specific email
|
132
|
+
# Emarsys::Contact.query(key_id: '_email', key_value: 'john.doe@example.com', return_value: 'email')
|
133
|
+
# Emarsys::Contact.query(key_id: 3, key_value: 'jane.doe@example.com', return_value: 'email')
|
134
|
+
def query(return_value:, account: nil, **opts)
|
135
|
+
if opts.key?(:key_id) && opts.key?(:key_value)
|
136
|
+
id, value = [opts.delete(:key_id), opts.delete(:key_value)]
|
137
|
+
opts["#{transform_key_id(id).to_s}"] = value
|
138
|
+
end
|
139
|
+
|
140
|
+
opts = opts.each_with_object({}) do |(key, val), memo|
|
141
|
+
memo[key.to_s] = val
|
142
|
+
end
|
143
|
+
|
144
|
+
get account, 'contact/query', opts.merge('return' => return_value)
|
133
145
|
end
|
134
146
|
|
135
147
|
# Exports the selected fields of contacts whoch registered in the specified time range
|
@@ -16,6 +16,14 @@ module Emarsys
|
|
16
16
|
get account, 'contactlist', {}
|
17
17
|
end
|
18
18
|
|
19
|
+
# List contacts in a contact list
|
20
|
+
# Reference: https://dev.emarsys.com/v2/contact-lists/list-contacts-in-a-contact-list
|
21
|
+
#
|
22
|
+
# @param id [Integer] The contact list id
|
23
|
+
def contacts(id, account: nil)
|
24
|
+
get account, "contactlist/#{id}/", {}
|
25
|
+
end
|
26
|
+
|
19
27
|
# Create a new contact list
|
20
28
|
#
|
21
29
|
# @param params [Hash] Contact list information to create
|
@@ -29,6 +37,16 @@ module Emarsys
|
|
29
37
|
post account, "contactlist", params
|
30
38
|
end
|
31
39
|
|
40
|
+
# Delete a contact list
|
41
|
+
#
|
42
|
+
# @param id [Integer] Internal contact list id
|
43
|
+
|
44
|
+
# @example
|
45
|
+
# Emarsys::ContactList.delete(751283429)
|
46
|
+
def delete(id, account: nil)
|
47
|
+
post account, "contactlist/#{id}/deletelist", {}
|
48
|
+
end
|
49
|
+
|
32
50
|
# Add a contacts to a specific contact list
|
33
51
|
#
|
34
52
|
# This cannot be an instance method, because the API does not allow to retrieve a single resource. How crappy is that?
|
@@ -40,7 +58,7 @@ module Emarsys
|
|
40
58
|
#
|
41
59
|
# This cannot be an instance method, because the API does not allow to retrieve a single resource. How crappy is that?
|
42
60
|
def remove_contacts(id, key_id:, external_ids: [], account: nil)
|
43
|
-
post account, "contactlist/#{id}/
|
61
|
+
post account, "contactlist/#{id}/delete", {'key_id' => key_id, 'external_ids' => external_ids}
|
44
62
|
end
|
45
63
|
|
46
64
|
end
|
@@ -16,6 +16,23 @@ module Emarsys
|
|
16
16
|
get account, 'filter', {}
|
17
17
|
end
|
18
18
|
|
19
|
+
# Run a Segment for Multiple Contacts
|
20
|
+
# Reference: https://dev.emarsys.com/v2/segments/run-a-contact-segment-batch
|
21
|
+
#
|
22
|
+
# @param id [Integer] the id of the segment
|
23
|
+
def run(id, account: nil)
|
24
|
+
path = "filter/#{id}/runs"
|
25
|
+
post account, path, {}
|
26
|
+
end
|
27
|
+
|
28
|
+
# Poll the Status of a Segment Run for Multiple Contacts
|
29
|
+
# Reference: https://dev.emarsys.com/v2/segments/poll-the-status-of-a-segment-run-for-multiple-contacts
|
30
|
+
#
|
31
|
+
# @param run_id [String] the id of the segment run, @see #run
|
32
|
+
def status(run_id, account: nil)
|
33
|
+
path = "filter/runs/#{run_id}"
|
34
|
+
get account, path, {}
|
35
|
+
end
|
19
36
|
end
|
20
37
|
end
|
21
38
|
|
data/lib/emarsys/version.rb
CHANGED
data/spec/emarsys/client_spec.rb
CHANGED
@@ -83,6 +83,15 @@ describe Emarsys::Client do
|
|
83
83
|
it 'uses current timestamp format' do
|
84
84
|
expect(Emarsys::Client.new.header_created).to eq(Time.now.utc.iso8601)
|
85
85
|
end
|
86
|
+
|
87
|
+
it 'only generates time once' do
|
88
|
+
client = Emarsys::Client.new
|
89
|
+
header_created = Timecop.travel(Time.now - 10) do
|
90
|
+
client.header_created
|
91
|
+
end
|
92
|
+
|
93
|
+
expect(client.header_created).to eq(header_created)
|
94
|
+
end
|
86
95
|
end
|
87
96
|
|
88
97
|
describe '#calculated_digest' do
|
@@ -8,4 +8,11 @@ describe Emarsys::ContactList do
|
|
8
8
|
).to have_been_requested.once
|
9
9
|
end
|
10
10
|
end
|
11
|
+
describe ".contacts" do
|
12
|
+
it "requests all contacts in the given contact list" do
|
13
|
+
expect(
|
14
|
+
stub_get("contactlist/123/") { Emarsys::ContactList.contacts(123) }
|
15
|
+
).to have_been_requested.once
|
16
|
+
end
|
17
|
+
end
|
11
18
|
end
|
@@ -102,6 +102,18 @@ describe Emarsys::Contact do
|
|
102
102
|
Emarsys::Contact.query(key_id: 3, key_value: 'jane.doe@example.com', return_value: 'email')
|
103
103
|
expect(stub).to have_been_requested.once
|
104
104
|
end
|
105
|
+
|
106
|
+
it "transforms the key_id correctly to its id" do
|
107
|
+
stub = stub_request(:get, "https://api.emarsys.net/api/v2/contact/query/?3=jane.doe@example.com&return=email").to_return(standard_return_body)
|
108
|
+
Emarsys::Contact.query(key_id: '_email', key_value: 'jane.doe@example.com', return_value: 'email')
|
109
|
+
expect(stub).to have_been_requested.once
|
110
|
+
end
|
111
|
+
|
112
|
+
it "allows to get all contacts" do
|
113
|
+
stub = stub_request(:get, "https://api.emarsys.net/api/v2/contact/query/?return=email").to_return(standard_return_body)
|
114
|
+
Emarsys::Contact.query(return_value: 'email')
|
115
|
+
expect(stub).to have_been_requested.once
|
116
|
+
end
|
105
117
|
end
|
106
118
|
|
107
119
|
describe ".export_registrations" do
|
@@ -7,5 +7,19 @@ describe Emarsys::Segment do
|
|
7
7
|
stub_get("filter") { Emarsys::Segment.collection }
|
8
8
|
).to have_been_requested.once
|
9
9
|
end
|
10
|
+
describe ".run" do
|
11
|
+
it "requests a run for a segment for multiple contacts" do
|
12
|
+
expect(
|
13
|
+
stub_post("filter/123/runs") { Emarsys::Segment.run(123) }
|
14
|
+
).to have_been_requested.once
|
15
|
+
end
|
16
|
+
end
|
17
|
+
describe ".status" do
|
18
|
+
it "requests the status of the given segment run" do
|
19
|
+
expect(
|
20
|
+
stub_get("filter/runs/foo-333-bar") { Emarsys::Segment.status('foo-333-bar') }
|
21
|
+
).to have_been_requested.once
|
22
|
+
end
|
23
|
+
end
|
10
24
|
end
|
11
25
|
end
|
@@ -59,7 +59,8 @@ describe Emarsys::Response do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
describe 'error response' do
|
62
|
-
let(:
|
62
|
+
let(:reply_code) { 1 }
|
63
|
+
let(:response_string) { "{\"replyCode\":#{reply_code},\"replyText\":\"Something\",\"data\":1}" }
|
63
64
|
let(:fake_response) { FakeResponse.new(response_string).extend(FakeResponse::JSON) }
|
64
65
|
let(:response) { Emarsys::Response.new(fake_response) }
|
65
66
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emarsys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Schoppmann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.1.4
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.1.4
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,16 +70,30 @@ dependencies:
|
|
70
70
|
name: webmock
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.3.2
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.3.2
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: timecop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '0'
|
83
97
|
description: A Ruby library for interacting with the Emarsys API.
|
84
98
|
email:
|
85
99
|
- daniel.schoppmann@absolventa.de
|
@@ -163,15 +177,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
177
|
requirements:
|
164
178
|
- - ">="
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
180
|
+
version: '2.3'
|
167
181
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
182
|
requirements:
|
169
183
|
- - ">="
|
170
184
|
- !ruby/object:Gem::Version
|
171
185
|
version: '0'
|
172
186
|
requirements: []
|
173
|
-
|
174
|
-
rubygems_version: 2.5.2
|
187
|
+
rubygems_version: 3.0.3
|
175
188
|
signing_key:
|
176
189
|
specification_version: 4
|
177
190
|
summary: Easy to use ruby library for Emarsys Marketing Suite.
|