emarsys 0.3.9 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|