emarsys 0.1.0 → 0.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 +7 -0
- data/.travis.yml +8 -0
- data/Gemfile +0 -6
- data/README.md +118 -64
- data/emarsys.gemspec +3 -1
- data/lib/emarsys/client.rb +7 -9
- data/lib/emarsys/country.rb +220 -0
- data/lib/emarsys/data_object.rb +12 -3
- data/lib/emarsys/data_objects/condition.rb +2 -1
- data/lib/emarsys/data_objects/contact.rb +3 -2
- data/lib/emarsys/data_objects/contact_list.rb +2 -1
- data/lib/emarsys/data_objects/email.rb +2 -1
- data/lib/emarsys/data_objects/email_category.rb +2 -1
- data/lib/emarsys/data_objects/email_launch_status.rb +2 -1
- data/lib/emarsys/data_objects/email_status_code.rb +2 -1
- data/lib/emarsys/data_objects/event.rb +18 -1
- data/lib/emarsys/data_objects/export.rb +2 -1
- data/lib/emarsys/data_objects/field.rb +2 -1
- data/lib/emarsys/data_objects/file.rb +2 -1
- data/lib/emarsys/data_objects/folder.rb +2 -1
- data/lib/emarsys/data_objects/form.rb +2 -1
- data/lib/emarsys/data_objects/language.rb +2 -1
- data/lib/emarsys/data_objects/segment.rb +2 -1
- data/lib/emarsys/data_objects/source.rb +2 -1
- data/lib/emarsys/error.rb +2 -1
- data/lib/emarsys/extensions.rb +2 -1
- data/lib/emarsys/field_mapping.rb +2 -1
- data/lib/emarsys/params_converter.rb +2 -1
- data/lib/emarsys/request.rb +2 -1
- data/lib/emarsys/response.rb +2 -1
- data/lib/emarsys/version.rb +2 -1
- data/lib/emarsys.rb +5 -3
- data/spec/emarsys/client_spec.rb +25 -24
- data/spec/emarsys/country_spec.rb +22 -0
- data/spec/emarsys/data_object_spec.rb +14 -9
- data/spec/emarsys/data_objects/condition_spec.rb +4 -2
- data/spec/emarsys/data_objects/contact_list_spec.rb +4 -2
- data/spec/emarsys/data_objects/contact_spec.rb +17 -17
- data/spec/emarsys/data_objects/email_category_spec.rb +4 -2
- data/spec/emarsys/data_objects/email_spec.rb +31 -21
- data/spec/emarsys/data_objects/event_spec.rb +16 -6
- data/spec/emarsys/data_objects/export_spec.rb +4 -2
- data/spec/emarsys/data_objects/field_spec.rb +10 -4
- data/spec/emarsys/data_objects/file_spec.rb +11 -7
- data/spec/emarsys/data_objects/folder_spec.rb +7 -3
- data/spec/emarsys/data_objects/form_spec.rb +4 -2
- data/spec/emarsys/data_objects/language_spec.rb +4 -2
- data/spec/emarsys/data_objects/segment_spec.rb +4 -2
- data/spec/emarsys/data_objects/source_spec.rb +8 -6
- data/spec/emarsys/field_mapping_spec.rb +4 -4
- data/spec/emarsys/params_converter_spec.rb +2 -2
- data/spec/emarsys/request_spec.rb +2 -2
- data/spec/emarsys/response_spec.rb +5 -5
- data/spec/emarsys_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -4
- metadata +48 -25
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2f8428e2c40d3634ec723d6344c78b04ecc42ef4
|
4
|
+
data.tar.gz: 1e68cfc41427960d604cc562ceb05a7a30b2cdf5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 683eba0ca8b1166136a8943e8a9381c6d58f563899f020cc60fb063bc0febcc62919e7b2c61e5ca48f2f9e604a9abc08d179c85ec0bc236e97cbf4fced9fad07
|
7
|
+
data.tar.gz: c680377e2abe42b2e03f70c46bbe5446669825438db4776a5f1d4ce8c496aa951a5dffa74b09a83909eee8abca251e4bdcf98c739a05133d2776f214bbf4f165
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# emarsys-rb
|
1
|
+
# emarsys-rb [](https://travis-ci.org/Absolventa/emarsys-rb)
|
2
2
|
|
3
3
|
Simple Ruby wrapper for the Emarsys API.
|
4
4
|
|
@@ -23,38 +23,58 @@ This gem tries to work around this by letting you specify a field mapping consta
|
|
23
23
|
* Return values differ from method to method due to the way the Emarsys API is implemented.
|
24
24
|
Thus, a Hash as a return value or an Array of Hashes was choosen as the global return object. Basically it is a parsed JSON response.
|
25
25
|
* Please refer to the Emarsys API documentation for detailed information on parameters, return values or error codes.
|
26
|
+
* The list of available countries is defined by Emarsys, and uses internal Emarsys-specific IDs. A utility class is
|
27
|
+
provided to map [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 "ISO 3166-1 alpha-2") data (aka 2-letter country codes) to internal Emarsys country IDs.
|
26
28
|
|
27
29
|
## Configuration and Setup
|
28
30
|
### Authentication
|
29
31
|
|
30
32
|
Authenticate with the api credentials provided by your Emarsys account manager.
|
31
33
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
```ruby
|
35
|
+
Emarsys.configure do |c|
|
36
|
+
c.api_username = 'my_username'
|
37
|
+
c.api_password = 'my_password'
|
38
|
+
# OPTIONAL, defaults to https://api.emarsys.net/api/v2
|
39
|
+
c.api_endpoint = 'https://suite5.emarsys.net/api/v2'
|
40
|
+
end
|
41
|
+
```
|
38
42
|
|
39
43
|
### Field Mapping
|
40
44
|
|
41
|
-
As said before, Emarsys loves IDs. For using an
|
45
|
+
As said before, Emarsys loves IDs. For using an API, they are evil. This gem provides
|
42
46
|
an easy way to adjust the individual field settings. Internally a Ruby Mapping Constant is used,
|
43
47
|
which that can be overwritten. It will be picked up automatically. E.g.:
|
44
48
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
```ruby
|
50
|
+
# Complete overwrite
|
51
|
+
Emarsys::FieldMapping::ATTRIBUTES = [
|
52
|
+
{:id => 0, :identifier => 'interests', :name => 'Interests'},
|
53
|
+
{:id => 1, :identifier => 'firstname', :name => 'First Name'},
|
54
|
+
{:id => 2, :identifier => 'lastname', :name => 'Last Name'},
|
55
|
+
]
|
51
56
|
|
52
|
-
|
53
|
-
|
57
|
+
# Add to the Mapping-Constant
|
58
|
+
Emarsys::FieldMapping::ATTRIBUTES << {:id => 100, :identifier => 'user_id', :name => "User-ID"}
|
59
|
+
```
|
54
60
|
|
55
61
|
All Emarsys predefined system fields are prefixed with an underscore, e.g. '_firstname' or '_revenue' in order to not
|
56
62
|
clash with individual mappings.
|
57
63
|
|
64
|
+
### Mapping Country IDs from ISO country codes
|
65
|
+
|
66
|
+
A utility method is provided to map to Emarsys internal country IDs from ISO 3166-1 alpha-2 two-letter country codes. You can pass a symbol or a string, and case is ignored.
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
>> Emarsys::Country.from_iso('GB')
|
70
|
+
=> {:id=>184, :name=>"United Kingdom"}
|
71
|
+
|
72
|
+
>> Emarsys::Country.from_iso(:af)
|
73
|
+
=> {:id=>1, :name=>"Afghanistan"}
|
74
|
+
|
75
|
+
>> Emarsys::Country.from_iso('us')
|
76
|
+
=> {:id=>185, :name=>"United States of America"}
|
77
|
+
```
|
58
78
|
|
59
79
|
## Interacting with the API
|
60
80
|
|
@@ -62,100 +82,134 @@ You can interact with the API on the provided data objects:
|
|
62
82
|
|
63
83
|
#### Condition
|
64
84
|
|
65
|
-
|
66
|
-
|
85
|
+
```ruby
|
86
|
+
# Get all conditions
|
87
|
+
Emarsys::Condition.collection
|
88
|
+
```
|
67
89
|
|
68
90
|
#### Contact
|
69
91
|
|
70
|
-
|
71
|
-
|
72
|
-
|
92
|
+
```ruby
|
93
|
+
# Create a contact with custom key_field (one example with mapped identifier, one without)
|
94
|
+
Emarsys::Contact.create('user_id', 10, {firstname: "Jane", lastname: "Doe", email: "jane.doe@example.com"})
|
95
|
+
Emarsys::Contact.create(4980, 10, {1 => "Jane", 2 => "Doe", 3 => "jane.doe@example.com"})
|
73
96
|
|
74
|
-
|
75
|
-
|
76
|
-
|
97
|
+
# Update a contact with key_field (one example with mapped identifier, one without)
|
98
|
+
Emarsys::Contact.update('email', "jane.doe@example.com", {firstname: "John", lastname: "Doe"})
|
99
|
+
Emarsys::Contact.update(3, "jane.doe@example.com", {1 => "John", 2 => "Doe"})
|
100
|
+
```
|
77
101
|
|
78
102
|
#### ContactList
|
79
103
|
|
80
|
-
|
81
|
-
|
104
|
+
```ruby
|
105
|
+
# Get all contact_lists
|
106
|
+
Emarsys::ContactList.collection
|
82
107
|
|
83
|
-
|
84
|
-
|
108
|
+
# Create a contact list
|
109
|
+
Emarsys::ContactList.create
|
110
|
+
```
|
85
111
|
|
86
112
|
#### Emails
|
87
113
|
|
88
|
-
|
89
|
-
|
90
|
-
|
114
|
+
```ruby
|
115
|
+
# Get all email campaigns, optional filter
|
116
|
+
Emarsys::Email.collection
|
117
|
+
Emarsys::Email.collection(status: 3)
|
91
118
|
|
92
|
-
|
93
|
-
|
119
|
+
# Get a single email resource
|
120
|
+
Emarsys::Email.resource(1)
|
94
121
|
|
95
|
-
|
96
|
-
|
122
|
+
# Create a new email campaign
|
123
|
+
Emarsys::Email.create({})
|
97
124
|
|
98
|
-
|
125
|
+
Emarsys::Email.launch({})
|
126
|
+
```
|
99
127
|
|
100
128
|
#### Event
|
101
129
|
|
102
|
-
|
130
|
+
```ruby
|
131
|
+
Emarsys::Event.collection
|
103
132
|
|
104
|
-
|
105
|
-
|
133
|
+
# Trigger a custom event
|
134
|
+
Emarsys::Event.trigger(65, 3, ["test@example.com"])
|
106
135
|
|
107
|
-
|
108
|
-
|
109
|
-
|
136
|
+
# Trigger a custom event which actually sends a mail
|
137
|
+
# (Emarsys way to send transactional mails with placeholders)
|
138
|
+
Emarsys::Event.trigger(2, 3, 'test@example.com', {:global => {:my_placeholder => "some content"}})
|
139
|
+
```
|
110
140
|
|
111
141
|
#### Export
|
112
142
|
|
113
|
-
|
143
|
+
```ruby
|
144
|
+
Emarsys::Export.resource(1)
|
145
|
+
```
|
114
146
|
|
115
147
|
#### Field
|
116
148
|
|
117
|
-
|
118
|
-
|
149
|
+
```ruby
|
150
|
+
Emarsys::Field.collection
|
151
|
+
Emarsys::Field.choice(1)
|
152
|
+
```
|
119
153
|
|
120
154
|
#### Folder
|
121
155
|
|
122
|
-
|
123
|
-
|
124
|
-
|
156
|
+
```ruby
|
157
|
+
# Get all forms, optional filter parameters
|
158
|
+
Emarsys::Folder.collection
|
159
|
+
Emarsys::Folder.collection(:folder => 3)
|
160
|
+
```
|
125
161
|
|
126
162
|
#### Form
|
127
163
|
|
128
|
-
|
129
|
-
|
164
|
+
```ruby
|
165
|
+
# Get all forms
|
166
|
+
Emarsys::Form.collection
|
167
|
+
```
|
130
168
|
|
131
169
|
#### Language
|
132
170
|
|
133
|
-
|
134
|
-
|
171
|
+
```ruby
|
172
|
+
# Get all languages
|
173
|
+
Emarsys::Language.collection
|
174
|
+
```
|
135
175
|
|
136
176
|
#### Segment
|
137
177
|
|
138
|
-
|
139
|
-
|
178
|
+
```ruby
|
179
|
+
# Get all segments
|
180
|
+
Emarsys::Segment.collection
|
181
|
+
```
|
140
182
|
|
141
183
|
#### Source
|
142
184
|
|
143
|
-
|
144
|
-
|
185
|
+
```ruby
|
186
|
+
# Get all sources
|
187
|
+
Emarsys::Source.collection
|
145
188
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
# Destroy a source
|
150
|
-
Emarsys::Source.destroy(123)
|
189
|
+
# Create a new source
|
190
|
+
Emarsys::Source.create("New Source")
|
151
191
|
|
192
|
+
# Destroy a source
|
193
|
+
Emarsys::Source.destroy(123)
|
194
|
+
```
|
152
195
|
|
153
196
|
Please refer to the code for detailed instructions of each method.
|
154
197
|
|
155
|
-
## Ruby Versions
|
156
198
|
|
157
|
-
|
199
|
+
## Changelog
|
200
|
+
|
201
|
+
### HEAD (not yet released)
|
202
|
+
|
203
|
+
### v0.2.0
|
204
|
+
* Added country mapping ([#17](https://github.com/Absolventa/emarsys-rb/pull/17))
|
205
|
+
* Proper encoding of GET parameters ([#11](https://github.com/Absolventa/emarsys-rb/pull/11))
|
206
|
+
* Update default endpoint fom `suite5.emarsys.net/api/v2` to `api.emarsys.net/api/v2` ([#10](https://github.com/Absolventa/emarsys-rb/pull/10))
|
207
|
+
* Bugfixes in nonce header ([#5](https://github.com/Absolventa/emarsys-rb/pull/5) and [#19](https://github.com/Absolventa/emarsys-rb/pull/19))
|
208
|
+
* Trigger an external event for multiple contacts ([#3](https://github.com/Absolventa/emarsys-rb/pull/3))
|
209
|
+
|
210
|
+
### v0.1.0
|
158
211
|
|
212
|
+
Initial version
|
159
213
|
|
160
214
|
## Contributing
|
161
215
|
|
@@ -168,4 +222,4 @@ This gem was developed and tested with versions 1.9.3 and 2.0.0
|
|
168
222
|
|
169
223
|
## Copyright
|
170
224
|
|
171
|
-
Copyright (c) 2013 Daniel Schoppmann. See LICENSE.txt for details.
|
225
|
+
Copyright (c) 2013 Daniel Schoppmann. See LICENSE.txt for details.
|
data/emarsys.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["daniel.schoppmann@absolventa.de"]
|
11
11
|
spec.description = %q{A Ruby library for interacting with the Emarsys API.}
|
12
12
|
spec.summary = %q{Easy to use ruby library for Emarsys Marketing Suite.}
|
13
|
-
spec.homepage = "
|
13
|
+
spec.homepage = "https://github.com/Absolventa/emarsys-rb"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -22,4 +22,6 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rspec", ">= 3.5.0"
|
26
|
+
spec.add_development_dependency "webmock", "< 2.0"
|
25
27
|
end
|
data/lib/emarsys/client.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Emarsys
|
2
3
|
class Client
|
3
4
|
|
@@ -12,12 +13,9 @@ module Emarsys
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def x_wsse_string
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
string += 'Nonce = "' + header_nonce + '", '
|
19
|
-
string += 'Created = "' + header_created + '"'
|
20
|
-
string
|
16
|
+
<<-STRING.strip
|
17
|
+
UsernameToken Username="#{username}", PasswordDigest="#{header_password_digest}", Nonce="#{header_nonce}", Created="#{header_created}"
|
18
|
+
STRING
|
21
19
|
end
|
22
20
|
|
23
21
|
def header_password_digest
|
@@ -25,11 +23,11 @@ module Emarsys
|
|
25
23
|
end
|
26
24
|
|
27
25
|
def header_nonce
|
28
|
-
|
26
|
+
@header_nonce ||= Random::DEFAULT.bytes(16).each_byte.map { |b| sprintf("%02X",b) }.join
|
29
27
|
end
|
30
28
|
|
31
29
|
def header_created
|
32
|
-
Time.
|
30
|
+
Time.now.utc.iso8601
|
33
31
|
end
|
34
32
|
|
35
33
|
def calculated_digest
|
@@ -37,4 +35,4 @@ module Emarsys
|
|
37
35
|
end
|
38
36
|
|
39
37
|
end
|
40
|
-
end
|
38
|
+
end
|
@@ -0,0 +1,220 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Emarsys
|
3
|
+
module Country
|
4
|
+
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def from_iso(iso)
|
8
|
+
MAPPING[iso.to_s.upcase]
|
9
|
+
end
|
10
|
+
|
11
|
+
MAPPING = {
|
12
|
+
'AF' => {id: 1, name: 'Afghanistan'},
|
13
|
+
'AL' => {id: 2, name: 'Albania'},
|
14
|
+
'DZ' => {id: 3, name: 'Algeria'},
|
15
|
+
'AD' => {id: 4, name: 'Andorra'},
|
16
|
+
'AO' => {id: 5, name: 'Angola'},
|
17
|
+
'AG' => {id: 6, name: 'Antigua and Barbuda'},
|
18
|
+
'AR' => {id: 7, name: 'Argentina'},
|
19
|
+
'AM' => {id: 8, name: 'Armenia'},
|
20
|
+
'AU' => {id: 9, name: 'Australia'},
|
21
|
+
'AT' => {id: 10, name: 'Austria'},
|
22
|
+
'AZ' => {id: 11, name: 'Azerbaijan'},
|
23
|
+
'BS' => {id: 12, name: 'Bahamas'},
|
24
|
+
'BH' => {id: 13, name: 'Bahrain'},
|
25
|
+
'BD' => {id: 14, name: 'Bangladesh'},
|
26
|
+
'BB' => {id: 15, name: 'Barbados'},
|
27
|
+
'BY' => {id: 16, name: 'Belarus'},
|
28
|
+
'BE' => {id: 17, name: 'Belgium'},
|
29
|
+
'BZ' => {id: 18, name: 'Belize'},
|
30
|
+
'BJ' => {id: 19, name: 'Benin'},
|
31
|
+
'BT' => {id: 20, name: 'Bhutan'},
|
32
|
+
'BO' => {id: 21, name: 'Bolivia'},
|
33
|
+
'BA' => {id: 22, name: 'Bosnia and Herzegovina'},
|
34
|
+
'BW' => {id: 23, name: 'Botswana'},
|
35
|
+
'BR' => {id: 24, name: 'Brazil'},
|
36
|
+
'BN' => {id: 25, name: 'Brunei Darussalam'},
|
37
|
+
'BG' => {id: 26, name: 'Bulgaria'},
|
38
|
+
'BF' => {id: 27, name: 'Burkina Faso'},
|
39
|
+
# id 28 is 'Burma' - instead, use Myanmar (120)
|
40
|
+
'BI' => {id: 29, name: 'Burundi'},
|
41
|
+
'KH' => {id: 30, name: 'Cambodia'},
|
42
|
+
'CM' => {id: 31, name: 'Cameroon'},
|
43
|
+
'CA' => {id: 32, name: 'Canada'},
|
44
|
+
'CV' => {id: 33, name: 'Cape Verde'},
|
45
|
+
'CF' => {id: 34, name: 'Central African Republic'},
|
46
|
+
'TD' => {id: 35, name: 'Chad'},
|
47
|
+
'CL' => {id: 36, name: 'Chile'},
|
48
|
+
'CN' => {id: 37, name: 'China'},
|
49
|
+
'CO' => {id: 38, name: 'Colombia'},
|
50
|
+
'KM' => {id: 39, name: 'Comoros'},
|
51
|
+
'CG' => {id: 40, name: 'Congo'},
|
52
|
+
'CD' => {id: 41, name: 'Congo, Democratic Republic of the'},
|
53
|
+
'CR' => {id: 42, name: 'Costa Rica'},
|
54
|
+
'CI' => {id: 43, name: 'Cote d’Ivoire'},
|
55
|
+
'HR' => {id: 44, name: 'Croatia'},
|
56
|
+
'CU' => {id: 45, name: 'Cuba'},
|
57
|
+
'CY' => {id: 46, name: 'Cyprus'},
|
58
|
+
'CZ' => {id: 47, name: 'Czech Republic'},
|
59
|
+
'DK' => {id: 48, name: 'Denmark'},
|
60
|
+
'DJ' => {id: 49, name: 'Djibouti'},
|
61
|
+
'DM' => {id: 50, name: 'Dominica'},
|
62
|
+
'DO' => {id: 51, name: 'Dominican Republic'},
|
63
|
+
'EC' => {id: 52, name: 'Ecuador'},
|
64
|
+
'EG' => {id: 53, name: 'Egypt'},
|
65
|
+
'SV' => {id: 54, name: 'El Salvador'},
|
66
|
+
'GQ' => {id: 55, name: 'Equatorial Guinea'},
|
67
|
+
'ER' => {id: 56, name: 'Eritrea'},
|
68
|
+
'EE' => {id: 57, name: 'Estonia'},
|
69
|
+
'ET' => {id: 58, name: 'Ethiopia'},
|
70
|
+
'FJ' => {id: 59, name: 'Fiji'},
|
71
|
+
'FI' => {id: 60, name: 'Finland'},
|
72
|
+
'FR' => {id: 61, name: 'France'},
|
73
|
+
'GA' => {id: 62, name: 'Gabon'},
|
74
|
+
'GM' => {id: 63, name: 'Gambia, The'},
|
75
|
+
'GE' => {id: 64, name: 'Georgia'},
|
76
|
+
'DE' => {id: 65, name: 'Germany'},
|
77
|
+
'GH' => {id: 66, name: 'Ghana'},
|
78
|
+
'GR' => {id: 67, name: 'Greece'},
|
79
|
+
'GD' => {id: 68, name: 'Grenada'},
|
80
|
+
'GT' => {id: 69, name: 'Guatemala'},
|
81
|
+
'GN' => {id: 70, name: 'Guinea'},
|
82
|
+
'GW' => {id: 71, name: 'Guinea-Bissau'},
|
83
|
+
'GY' => {id: 72, name: 'Guyana'},
|
84
|
+
'HT' => {id: 73, name: 'Haiti'},
|
85
|
+
'HN' => {id: 74, name: 'Honduras'},
|
86
|
+
'HU' => {id: 75, name: 'Hungary'},
|
87
|
+
'IS' => {id: 76, name: 'Iceland'},
|
88
|
+
'IN' => {id: 77, name: 'India'},
|
89
|
+
'ID' => {id: 78, name: 'Indonesia'},
|
90
|
+
'IR' => {id: 79, name: 'Iran'},
|
91
|
+
'IQ' => {id: 80, name: 'Iraq'},
|
92
|
+
'IE' => {id: 81, name: 'Ireland'},
|
93
|
+
'IL' => {id: 82, name: 'Israel'},
|
94
|
+
'IT' => {id: 83, name: 'Italy'},
|
95
|
+
'JM' => {id: 84, name: 'Jamaica'},
|
96
|
+
'JP' => {id: 85, name: 'Japan'},
|
97
|
+
'JO' => {id: 86, name: 'Jordan'},
|
98
|
+
'KZ' => {id: 87, name: 'Kazakhstan'},
|
99
|
+
'KE' => {id: 88, name: 'Kenya'},
|
100
|
+
'KI' => {id: 89, name: 'Kiribati'},
|
101
|
+
'KP' => {id: 90, name: 'Korea, North'},
|
102
|
+
'KR' => {id: 91, name: 'Korea, South'},
|
103
|
+
'KW' => {id: 92, name: 'Kuwait'},
|
104
|
+
'KG' => {id: 93, name: 'Kyrgyzstan'},
|
105
|
+
'LO' => {id: 94, name: 'Laos'},
|
106
|
+
'LV' => {id: 95, name: 'Latvia'},
|
107
|
+
'LB' => {id: 96, name: 'Lebanon'},
|
108
|
+
'LS' => {id: 97, name: 'Lesotho'},
|
109
|
+
'LR' => {id: 98, name: 'Liberia'},
|
110
|
+
'LY' => {id: 99, name: 'Libya'},
|
111
|
+
'LI' => {id: 100, name: 'Liechtenstein'},
|
112
|
+
'LT' => {id: 101, name: 'Lithuania'},
|
113
|
+
'LU' => {id: 102, name: 'Luxembourg'},
|
114
|
+
'MK' => {id: 103, name: 'Macedonia'},
|
115
|
+
'MG' => {id: 104, name: 'Madagascar'},
|
116
|
+
'MW' => {id: 105, name: 'Malawi'},
|
117
|
+
'MY' => {id: 106, name: 'Malaysia'},
|
118
|
+
'MV' => {id: 107, name: 'Maldives'},
|
119
|
+
'ML' => {id: 108, name: 'Mali'},
|
120
|
+
'MT' => {id: 109, name: 'Malta'},
|
121
|
+
'MH' => {id: 110, name: 'Marshall Islands'},
|
122
|
+
'MR' => {id: 111, name: 'Mauritania'},
|
123
|
+
'MU' => {id: 112, name: 'Mauritius'},
|
124
|
+
'MX' => {id: 113, name: 'Mexico'},
|
125
|
+
'MI' => {id: 114, name: 'Micronesia'},
|
126
|
+
'MD' => {id: 115, name: 'Moldova'},
|
127
|
+
'MC' => {id: 116, name: 'Monaco'},
|
128
|
+
'MN' => {id: 117, name: 'Mongolia'},
|
129
|
+
'MA' => {id: 118, name: 'Morocco'},
|
130
|
+
'MZ' => {id: 119, name: 'Mozambique'},
|
131
|
+
'MM' => {id: 120, name: 'Myanmar'},
|
132
|
+
'NA' => {id: 121, name: 'Namibia'},
|
133
|
+
'NR' => {id: 122, name: 'Nauru'},
|
134
|
+
'NP' => {id: 123, name: 'Nepal'},
|
135
|
+
'NL' => {id: 124, name: 'The Netherlands'},
|
136
|
+
'NZ' => {id: 125, name: 'New Zealand'},
|
137
|
+
'NI' => {id: 126, name: 'Nicaragua'},
|
138
|
+
'NE' => {id: 127, name: 'Niger'},
|
139
|
+
'NG' => {id: 128, name: 'Nigeria'},
|
140
|
+
'NO' => {id: 129, name: 'Norway'},
|
141
|
+
'OM' => {id: 130, name: 'Oman'},
|
142
|
+
'PK' => {id: 131, name: 'Pakistan'},
|
143
|
+
'PW' => {id: 132, name: 'Palau'},
|
144
|
+
'PA' => {id: 134, name: 'Panama'},
|
145
|
+
'PG' => {id: 135, name: 'Papua New Guinea'},
|
146
|
+
'PU' => {id: 136, name: 'Paraguay'},
|
147
|
+
'PE' => {id: 137, name: 'Peru'},
|
148
|
+
'PH' => {id: 138, name: 'Philippines'},
|
149
|
+
'PL' => {id: 139, name: 'Poland'},
|
150
|
+
'PT' => {id: 140, name: 'Portugal'},
|
151
|
+
'QA' => {id: 141, name: 'Qatar'},
|
152
|
+
'RO' => {id: 142, name: 'Romania'},
|
153
|
+
'RU' => {id: 143, name: 'Russia'},
|
154
|
+
'RW' => {id: 144, name: 'Rwanda'},
|
155
|
+
'KN' => {id: 145, name: 'St. Kitts and Nevis'},
|
156
|
+
'LC' => {id: 146, name: 'St. Lucia'},
|
157
|
+
'VC' => {id: 147, name: 'St. Vincent and The Grenadines'},
|
158
|
+
'WS' => {id: 148, name: 'Samoa'},
|
159
|
+
'SM' => {id: 149, name: 'San Marino'},
|
160
|
+
'ST' => {id: 150, name: 'São Tomé and Príncipe'},
|
161
|
+
'SA' => {id: 151, name: 'Saudi Arabia'},
|
162
|
+
'SN' => {id: 152, name: 'Senegal'},
|
163
|
+
'RS' => {id: 153, name: 'Serbia'},
|
164
|
+
'SC' => {id: 154, name: 'Seychelles'},
|
165
|
+
'SL' => {id: 155, name: 'Sierra Leone'},
|
166
|
+
'SG' => {id: 156, name: 'Singapore'},
|
167
|
+
'SK' => {id: 157, name: 'Slovakia'},
|
168
|
+
'SI' => {id: 158, name: 'Slovenia'},
|
169
|
+
'SB' => {id: 159, name: 'Solomon Islands'},
|
170
|
+
'SO' => {id: 160, name: 'Somalia'},
|
171
|
+
'ZA' => {id: 161, name: 'South Africa'},
|
172
|
+
'ES' => {id: 162, name: 'Spain'},
|
173
|
+
'LK' => {id: 163, name: 'Sri Lanka'},
|
174
|
+
'SD' => {id: 164, name: 'Sudan'},
|
175
|
+
'SR' => {id: 165, name: 'Suriname'},
|
176
|
+
'SZ' => {id: 166, name: 'Swaziland'},
|
177
|
+
'SE' => {id: 167, name: 'Sweden'},
|
178
|
+
'CH' => {id: 168, name: 'Switzerland'},
|
179
|
+
'SY' => {id: 169, name: 'Syria'},
|
180
|
+
'TW' => {id: 170, name: 'Taiwan'},
|
181
|
+
'TJ' => {id: 171, name: 'Tajikistan'},
|
182
|
+
'TZ' => {id: 172, name: 'Tanzania'},
|
183
|
+
'TH' => {id: 173, name: 'Thailand'},
|
184
|
+
'TG' => {id: 174, name: 'Togo'},
|
185
|
+
'TO' => {id: 175, name: 'Tonga'},
|
186
|
+
'TT' => {id: 176, name: 'Trinidad and Tobago'},
|
187
|
+
'TU' => {id: 177, name: 'Tunisia'},
|
188
|
+
'TR' => {id: 178, name: 'Turkey'},
|
189
|
+
'TM' => {id: 179, name: 'Turkmenistan'},
|
190
|
+
'TV' => {id: 180, name: 'Tuvalu'},
|
191
|
+
'UG' => {id: 181, name: 'Uganda'},
|
192
|
+
'UA' => {id: 182, name: 'Ukraine'},
|
193
|
+
'AE' => {id: 183, name: 'United Arab Emirates'},
|
194
|
+
'GB' => {id: 184, name: 'United Kingdom'},
|
195
|
+
'US' => {id: 185, name: 'United States of America'},
|
196
|
+
'UY' => {id: 186, name: 'Uruguay'},
|
197
|
+
'UZ' => {id: 187, name: 'Uzbekistan'},
|
198
|
+
'VU' => {id: 188, name: 'Vanuatu'},
|
199
|
+
'VA' => {id: 189, name: 'Vatican City'},
|
200
|
+
'VE' => {id: 190, name: 'Venezuela'},
|
201
|
+
'VN' => {id: 191, name: 'Vietnam'},
|
202
|
+
'EH' => {id: 192, name: 'Western Sahara'},
|
203
|
+
'YE' => {id: 193, name: 'Yemen'},
|
204
|
+
# id 194 is 'Yugoslavia', which hasn't existed since 1992
|
205
|
+
'ZR' => {id: 195, name: 'Zaire'},
|
206
|
+
'ZM' => {id: 196, name: 'Zambia'},
|
207
|
+
'ZW' => {id: 197, name: 'Zimbabwe'},
|
208
|
+
'GL' => {id: 198, name: 'Greenland'},
|
209
|
+
'VI' => {id: 199, name: 'Virgin Islands'},
|
210
|
+
'IC' => {id: 201, name: 'Canary Islands'},
|
211
|
+
'ME' => {id: 202, name: 'Montenegro'},
|
212
|
+
'GI' => {id: 203, name: 'Gibraltar'},
|
213
|
+
'AN' => {id: 204, name: 'Netherlands Antilles'},
|
214
|
+
'HK' => {id: 205, name: 'Hong Kong'},
|
215
|
+
'MO' => {id: 206, name: 'Macau'},
|
216
|
+
'TP' => {id: 258, name: 'East Timor'},
|
217
|
+
'KO' => {id: 259, name: 'Kosovo'}
|
218
|
+
}
|
219
|
+
end
|
220
|
+
end
|
data/lib/emarsys/data_object.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
## frozen_string_literal: true
|
1
2
|
#require 'hashie'
|
2
3
|
|
3
4
|
module Emarsys
|
@@ -47,9 +48,17 @@ module Emarsys
|
|
47
48
|
# Custom Parameterizer for Emarsys
|
48
49
|
#
|
49
50
|
# @param params [Hash] custom params hash
|
50
|
-
# @return [String]
|
51
|
+
# @return [String] {key1 => value1, key2 => value2 is returned as ?key1=value1&key2=value2
|
51
52
|
def parameterize_params(params)
|
52
|
-
params.
|
53
|
+
'?' + params.map{|k, v| "#{url_encode(k)}=#{url_encode(v)}"}.join('&')
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Encode params like Emarsys does
|
60
|
+
def url_encode(param)
|
61
|
+
ERB::Util.url_encode(param)
|
53
62
|
end
|
54
63
|
end
|
55
64
|
|
@@ -75,4 +84,4 @@ module Emarsys
|
|
75
84
|
# end
|
76
85
|
# end
|
77
86
|
end
|
78
|
-
end
|
87
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Emarsys
|
2
3
|
|
3
4
|
# Methods for the Contact API
|
@@ -29,7 +30,7 @@ module Emarsys
|
|
29
30
|
# Emarsys::Contact.emarsys_id('email', 'john.dow@example.com')
|
30
31
|
# Emarsys::Contact.emarsys_id(1, 'John')
|
31
32
|
def emarsys_id(key_id, key_value)
|
32
|
-
get "contact
|
33
|
+
get "contact", {"#{transform_key_id(key_id).to_s}" => key_value}
|
33
34
|
end
|
34
35
|
|
35
36
|
# Update a contact. The given params are transformed to emarsys ids.
|
@@ -118,4 +119,4 @@ module Emarsys
|
|
118
119
|
|
119
120
|
end
|
120
121
|
end
|
121
|
-
end
|
122
|
+
end
|