workarea-emarsys 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +20 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
- data/.github/ISSUE_TEMPLATE/documentation-request.md +17 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.gitignore +22 -0
- data/CHANGELOG.md +28 -0
- data/CODE_OF_CONDUCT.md +3 -0
- data/CONTRIBUTING.md +3 -0
- data/Gemfile +12 -0
- data/LICENSE +52 -0
- data/LICENSE.md +3 -0
- data/README.md +93 -0
- data/Rakefile +60 -0
- data/app/assets/images/emarsys/.keep +0 -0
- data/app/assets/javascripts/emarsys/.keep +0 -0
- data/app/assets/javascripts/workarea/storefront/emarsys/modules/web_extend_adapter.js +128 -0
- data/app/assets/stylesheets/emarsys/.keep +0 -0
- data/app/controllers/.keep +0 -0
- data/app/controllers/workarea/admin/configurations_controller.rb +33 -0
- data/app/controllers/workarea/storefront/email_signups_controller.decorator +16 -0
- data/app/controllers/workarea/storefront/users/addresses_controller.decorator +13 -0
- data/app/helpers/.keep +0 -0
- data/app/helpers/workarea/storefront/emarsys_analytics_helper.rb +13 -0
- data/app/lib/workarea/emarsys/bogus_gateway.rb +36 -0
- data/app/lib/workarea/emarsys/gateway.rb +94 -0
- data/app/lib/workarea/emarsys/response.rb +18 -0
- data/app/lib/workarea/emarsys/sales_data_bogus_gateway.rb +29 -0
- data/app/lib/workarea/emarsys/sales_data_gateway.rb +51 -0
- data/app/models/emarsys/configuration.rb +16 -0
- data/app/models/emarsys/country.rb +220 -0
- data/app/models/workarea/email/signup.decorator +8 -0
- data/app/models/workarea/order.decorator +8 -0
- data/app/models/workarea/user.decorator +8 -0
- data/app/services/emarsys/contact/order.rb +31 -0
- data/app/services/emarsys/contact/user.rb +25 -0
- data/app/services/emarsys/contact.rb +55 -0
- data/app/view_models/workarea/admin/emarsys_configuration_view_model.rb +20 -0
- data/app/views/workarea/admin/emarsys/configurations/edit.html.haml +68 -0
- data/app/views/workarea/admin/shared/_emarsys_configuration_link.html.haml +1 -0
- data/app/views/workarea/storefront/_emarsys_tracking.html.haml +11 -0
- data/app/views/workarea/storefront/emarsys/_current_user_emarsys_cart.json.jbuilder +6 -0
- data/app/workers/workarea/emarsys/save_email_signup.rb +40 -0
- data/app/workers/workarea/emarsys/save_order.rb +32 -0
- data/app/workers/workarea/emarsys/save_user.rb +44 -0
- data/app/workers/workarea/emarsys/sync_orders.rb +50 -0
- data/bin/rails +20 -0
- data/config/initializers/appends.rb +19 -0
- data/config/initializers/scheduled_jobs.rb +6 -0
- data/config/initializers/workarea.rb +16 -0
- data/config/locales/en.yml +28 -0
- data/config/routes.rb +7 -0
- data/lib/workarea/emarsys/engine.rb +12 -0
- data/lib/workarea/emarsys/version.rb +5 -0
- data/lib/workarea/emarsys.rb +59 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +30 -0
- data/test/dummy/bin/update +26 -0
- data/test/dummy/bin/yarn +11 -0
- data/test/dummy/config/application.rb +30 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +10 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +51 -0
- data/test/dummy/config/environments/production.rb +88 -0
- data/test/dummy/config/environments/test.rb +44 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/test/dummy/config/initializers/assets.rb +14 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
- data/test/dummy/config/locales/en.yml +33 -0
- data/test/dummy/config/puma.rb +56 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +32 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/integration/workarea/admin/emarsys_configuration_integration_test.rb +25 -0
- data/test/lib/workarea/emarsys/gateway_test.rb +26 -0
- data/test/services/emarsys/contact_test.rb +44 -0
- data/test/support/workarea/emarsys_api_config.rb +19 -0
- data/test/system/workarea/storefront/emarsys_tracking_system_test.rb +25 -0
- data/test/teaspoon_env.rb +6 -0
- data/test/test_helper.rb +10 -0
- data/test/vcr_cassettes/emarsys/add_contact.yml +67 -0
- data/test/vcr_cassettes/emarsys/get_contact.yml +129 -0
- data/test/vcr_cassettes/emarsys/sales/send_data.yml +42 -0
- data/test/workers/workarea/emarsys/save_user_test.rb +30 -0
- data/test/workers/workarea/emarsys/sync_orders_test.rb +38 -0
- data/workarea-emarsys.gemspec +24 -0
- metadata +211 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Emarsys
|
3
|
+
class Gateway
|
4
|
+
attr_reader :secret_key, :customer_id, :options
|
5
|
+
|
6
|
+
def initialize(secret_key, customer_id, options = {})
|
7
|
+
@secret_key = secret_key
|
8
|
+
@customer_id = customer_id
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_contact(attrs)
|
13
|
+
base_uri = "/api/v2/internal/#{customer_id}/contact/"
|
14
|
+
params = { create_if_not_exists: 1 }
|
15
|
+
query_values = "?" + params.to_query
|
16
|
+
|
17
|
+
path = base_uri + query_values
|
18
|
+
|
19
|
+
request_data = sign_request('put', path, attrs.to_json)
|
20
|
+
|
21
|
+
response = connection.put do |req|
|
22
|
+
req.url path
|
23
|
+
req.params = params
|
24
|
+
req.body = attrs.to_json
|
25
|
+
|
26
|
+
request_data[:headers].each do |k, v|
|
27
|
+
req.headers[k] = v
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
Response.new(response)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def connection
|
37
|
+
request_timeouts = {
|
38
|
+
timeout: Workarea::Emarsys.config.api_timeout,
|
39
|
+
open_timeout: Workarea::Emarsys.config.open_timeout
|
40
|
+
}
|
41
|
+
|
42
|
+
Faraday.new(url: rest_endpoint, request: request_timeouts)
|
43
|
+
end
|
44
|
+
|
45
|
+
def sign_request(method, path, body = nil)
|
46
|
+
escher = Escher::Auth.new('eu/suite/ems_request', escher_options)
|
47
|
+
|
48
|
+
request_data = {
|
49
|
+
method: method.upcase,
|
50
|
+
uri: path,
|
51
|
+
body: body,
|
52
|
+
headers: [['Content-Type', 'application/json'], ['host', host]]
|
53
|
+
}
|
54
|
+
|
55
|
+
escher.sign!(request_data, { api_key_id: escher_key, api_secret: secret_key })
|
56
|
+
|
57
|
+
request_data
|
58
|
+
end
|
59
|
+
|
60
|
+
def escher_options
|
61
|
+
{
|
62
|
+
algo_prefix: 'EMS',
|
63
|
+
vendor_key: 'EMS',
|
64
|
+
auth_header_name: 'X-Ems-Auth',
|
65
|
+
date_header_name: 'X-Ems-Date'
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
def escher_key
|
70
|
+
Workarea.config.emarsys.escher_key
|
71
|
+
end
|
72
|
+
|
73
|
+
def rest_endpoint
|
74
|
+
"https://#{host}"
|
75
|
+
end
|
76
|
+
|
77
|
+
def host
|
78
|
+
if test?
|
79
|
+
"api-proxy.s.emarsys.com"
|
80
|
+
else
|
81
|
+
"api.emarsys.net"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def uri_base
|
86
|
+
"/api/v2/internal/#{customer_id}/"
|
87
|
+
end
|
88
|
+
|
89
|
+
def test?
|
90
|
+
(options.has_key?(:test) ? options[:test] : true)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Emarsys
|
3
|
+
class Response
|
4
|
+
def initialize(response)
|
5
|
+
@response = response
|
6
|
+
end
|
7
|
+
|
8
|
+
def success?
|
9
|
+
@response.success?
|
10
|
+
end
|
11
|
+
|
12
|
+
def body
|
13
|
+
return unless @response.body
|
14
|
+
@body ||= JSON.parse(@response.body)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Emarsys
|
3
|
+
class SalesDataBogusGateway
|
4
|
+
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def send_file(file)
|
12
|
+
Response.new(response)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def response
|
18
|
+
response = Faraday.new do |builder|
|
19
|
+
builder.adapter :test do |stub|
|
20
|
+
stub.get('/rest/bogus.json') { |env| [ 200, {}, nil ] }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
r = response.get('/rest/bogus.json')
|
24
|
+
Response.new(r)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Emarsys
|
3
|
+
class SalesDataGateway
|
4
|
+
attr_reader :secret_key, :options
|
5
|
+
|
6
|
+
def initialize(secret_key, options = {})
|
7
|
+
@secret_key = secret_key
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def send_file(file)
|
12
|
+
path = "/hapi/merchant/#{merchant_id}/sales-data/api"
|
13
|
+
|
14
|
+
response = connection.post do |req|
|
15
|
+
req.url path
|
16
|
+
req.body = File.read(file)
|
17
|
+
end
|
18
|
+
Response.new(response)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def connection
|
24
|
+
headers = {
|
25
|
+
'Content-Type' => 'text/csv',
|
26
|
+
'Accept' => 'text/plain',
|
27
|
+
'Authorization' => "Bearer #{secret_key}"
|
28
|
+
}
|
29
|
+
|
30
|
+
request_timeouts = {
|
31
|
+
timeout: Workarea::Emarsys.config.api_timeout,
|
32
|
+
open_timeout: Workarea::Emarsys.config.open_timeout
|
33
|
+
}
|
34
|
+
|
35
|
+
Faraday.new(url: rest_endpoint, headers: headers, request: request_timeouts) do |con|
|
36
|
+
con.request :multipart
|
37
|
+
con.request :url_encoded
|
38
|
+
con.adapter :net_http
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def rest_endpoint
|
43
|
+
"https://admin.scarabresearch.com"
|
44
|
+
end
|
45
|
+
|
46
|
+
def merchant_id
|
47
|
+
options[:merchant_id]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Emarsys
|
3
|
+
class Configuration
|
4
|
+
include ApplicationDocument
|
5
|
+
|
6
|
+
field :merchant_id, type: String
|
7
|
+
field :customer_id, type: String
|
8
|
+
|
9
|
+
field :production, type: Boolean, default: false
|
10
|
+
|
11
|
+
def self.current
|
12
|
+
first || new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,220 @@
|
|
1
|
+
module Emarsys
|
2
|
+
class Country
|
3
|
+
def find_code(country)
|
4
|
+
codes[country.optionize.to_sym] || nil
|
5
|
+
end
|
6
|
+
|
7
|
+
# each country and their corresponding
|
8
|
+
# integer value in the emarsys db
|
9
|
+
def codes
|
10
|
+
{
|
11
|
+
afghanistan: 1,
|
12
|
+
albania: 2,
|
13
|
+
algeria: 3,
|
14
|
+
andorra: 4,
|
15
|
+
angola: 5,
|
16
|
+
antigua_and_barbuda: 6,
|
17
|
+
argentina: 7,
|
18
|
+
armenia: 8,
|
19
|
+
australia: 9,
|
20
|
+
austria: 10,
|
21
|
+
azerbaijan: 11,
|
22
|
+
bahamas: 12,
|
23
|
+
bahrain: 13,
|
24
|
+
bangladesh: 14,
|
25
|
+
barbados: 15,
|
26
|
+
belarus: 16,
|
27
|
+
belgium: 17,
|
28
|
+
belize: 18,
|
29
|
+
benin: 19,
|
30
|
+
bhutan: 20,
|
31
|
+
bolivia: 21,
|
32
|
+
bosnia_and_herzegovina: 22,
|
33
|
+
botswana: 23,
|
34
|
+
brazil: 24,
|
35
|
+
brunei_darussalam: 25,
|
36
|
+
bulgaria: 26,
|
37
|
+
burkina_faso: 27,
|
38
|
+
burma: 28,
|
39
|
+
burundi: 29,
|
40
|
+
cambodia: 30,
|
41
|
+
cameroon: 31,
|
42
|
+
canada: 32,
|
43
|
+
cape_verde: 33,
|
44
|
+
central_african_republic: 34,
|
45
|
+
chad: 35,
|
46
|
+
chile: 36,
|
47
|
+
china: 37,
|
48
|
+
colombia: 38,
|
49
|
+
comoros: 39,
|
50
|
+
congo: 40,
|
51
|
+
congo_democratic_republic_of_the: 41,
|
52
|
+
costa_rica: 42,
|
53
|
+
cote_d_ivoire: 43,
|
54
|
+
croatia: 44,
|
55
|
+
cuba: 45,
|
56
|
+
cyprus: 46,
|
57
|
+
czech_republic: 47,
|
58
|
+
denmark: 48,
|
59
|
+
djibouti: 49,
|
60
|
+
dominica: 50,
|
61
|
+
dominican_republic: 51,
|
62
|
+
ecuador: 52,
|
63
|
+
egypt: 53,
|
64
|
+
el_salvador: 54,
|
65
|
+
equatorial_guinea: 55,
|
66
|
+
eritrea: 56,
|
67
|
+
estonia: 57,
|
68
|
+
ethiopia: 58,
|
69
|
+
fiji: 59,
|
70
|
+
finland: 60,
|
71
|
+
france: 61,
|
72
|
+
gabon: 62,
|
73
|
+
gambia_the: 63,
|
74
|
+
georgia: 64,
|
75
|
+
germany: 65,
|
76
|
+
ghana: 66,
|
77
|
+
greece: 67,
|
78
|
+
grenada: 68,
|
79
|
+
guatemala: 69,
|
80
|
+
guinea: 70,
|
81
|
+
guinea_bissau: 71,
|
82
|
+
guyana: 72,
|
83
|
+
haiti: 73,
|
84
|
+
honduras: 74,
|
85
|
+
hungary: 75,
|
86
|
+
iceland: 76,
|
87
|
+
india: 77,
|
88
|
+
indonesia: 78,
|
89
|
+
iran: 79,
|
90
|
+
iraq: 80,
|
91
|
+
ireland: 81,
|
92
|
+
israel: 82,
|
93
|
+
italy: 83,
|
94
|
+
jamaica: 84,
|
95
|
+
japan: 85,
|
96
|
+
jordan: 86,
|
97
|
+
kazakhstan: 87,
|
98
|
+
kenya: 88,
|
99
|
+
kiribati: 89,
|
100
|
+
korea_north: 90,
|
101
|
+
korea_south: 91,
|
102
|
+
kuwait: 92,
|
103
|
+
kyrgyzstan: 93,
|
104
|
+
laos: 94,
|
105
|
+
latvia: 95,
|
106
|
+
lebanon: 96,
|
107
|
+
lesotho: 97,
|
108
|
+
liberia: 98,
|
109
|
+
libya: 99,
|
110
|
+
liechtenstein: 100,
|
111
|
+
lithuania: 101,
|
112
|
+
luxembourg: 102,
|
113
|
+
macedonia: 103,
|
114
|
+
madagascar: 104,
|
115
|
+
malawi: 105,
|
116
|
+
malaysia: 106,
|
117
|
+
maldives: 107,
|
118
|
+
mali: 108,
|
119
|
+
malta: 109,
|
120
|
+
marshall_islands: 110,
|
121
|
+
mauritania: 111,
|
122
|
+
mauritius: 112,
|
123
|
+
mexico: 113,
|
124
|
+
micronesia: 114,
|
125
|
+
moldova: 115,
|
126
|
+
monaco: 116,
|
127
|
+
mongolia: 117,
|
128
|
+
morocco: 118,
|
129
|
+
mozambique: 119,
|
130
|
+
myanmar: 120,
|
131
|
+
namibia: 121,
|
132
|
+
nauru: 122,
|
133
|
+
nepal: 123,
|
134
|
+
the_netherlands: 124,
|
135
|
+
new_zealand: 125,
|
136
|
+
nicaragua: 126,
|
137
|
+
niger: 127,
|
138
|
+
nigeria: 128,
|
139
|
+
norway: 129,
|
140
|
+
oman: 130,
|
141
|
+
pakistan: 131,
|
142
|
+
palau: 132,
|
143
|
+
panama: 134,
|
144
|
+
papua_new_guinea: 135,
|
145
|
+
paraguay: 136,
|
146
|
+
peru: 137,
|
147
|
+
philippines: 138,
|
148
|
+
poland: 139,
|
149
|
+
portugal: 140,
|
150
|
+
qatar: 141,
|
151
|
+
romania: 142,
|
152
|
+
russia: 143,
|
153
|
+
rwanda: 144,
|
154
|
+
st_kitts_and_nevis: 145,
|
155
|
+
st_lucia: 146,
|
156
|
+
st_vincent_and_the_grenadines: 147,
|
157
|
+
samoa: 148,
|
158
|
+
san_marino: 149,
|
159
|
+
são_tomé_and_príncipe: 150,
|
160
|
+
saudi_arabia: 151,
|
161
|
+
senegal: 152,
|
162
|
+
serbia: 153,
|
163
|
+
seychelles: 154,
|
164
|
+
sierra_leone: 155,
|
165
|
+
singapore: 156,
|
166
|
+
slovakia: 157,
|
167
|
+
slovenia: 158,
|
168
|
+
solomon_islands: 159,
|
169
|
+
somalia: 160,
|
170
|
+
south_africa: 161,
|
171
|
+
spain: 162,
|
172
|
+
sri_lanka: 163,
|
173
|
+
sudan: 164,
|
174
|
+
suriname: 165,
|
175
|
+
swaziland: 166,
|
176
|
+
sweden: 167,
|
177
|
+
switzerland: 168,
|
178
|
+
syria: 169,
|
179
|
+
taiwan: 170,
|
180
|
+
tajikistan: 171,
|
181
|
+
tanzania: 172,
|
182
|
+
thailand: 173,
|
183
|
+
togo: 174,
|
184
|
+
tonga: 175,
|
185
|
+
trinidad_and_tobago: 176,
|
186
|
+
tunisia: 177,
|
187
|
+
turkey: 178,
|
188
|
+
turkmenistan: 179,
|
189
|
+
tuvalu: 180,
|
190
|
+
uganda: 181,
|
191
|
+
ukraine: 182,
|
192
|
+
united_arab_emirates: 183,
|
193
|
+
united_kingdom: 184,
|
194
|
+
united_states_of_america: 185,
|
195
|
+
uruguay: 186,
|
196
|
+
uzbekistan: 187,
|
197
|
+
vanuatu: 188,
|
198
|
+
vatican_city: 189,
|
199
|
+
venezuela: 190,
|
200
|
+
vietnam: 191,
|
201
|
+
western_sahara: 192,
|
202
|
+
yemen: 193,
|
203
|
+
yugoslavia: 194,
|
204
|
+
zaire: 195,
|
205
|
+
zambia: 196,
|
206
|
+
zimbabwe: 197,
|
207
|
+
greenland: 198,
|
208
|
+
virgin_islands: 199,
|
209
|
+
canary_islands: 201,
|
210
|
+
montenegro: 202,
|
211
|
+
gibraltar: 203,
|
212
|
+
netherlands_antilles: 204,
|
213
|
+
hong_kong: 205,
|
214
|
+
macau: 206,
|
215
|
+
east_timor: 258,
|
216
|
+
kosovo: 259
|
217
|
+
}
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Emarsys
|
3
|
+
class Contact
|
4
|
+
class Order
|
5
|
+
attr_reader :order
|
6
|
+
|
7
|
+
def initialize(order)
|
8
|
+
@order = order
|
9
|
+
end
|
10
|
+
|
11
|
+
def email
|
12
|
+
order.email
|
13
|
+
end
|
14
|
+
|
15
|
+
def first_name
|
16
|
+
payment.address.first_name
|
17
|
+
end
|
18
|
+
|
19
|
+
def last_name
|
20
|
+
payment.address.last_name
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def payment
|
26
|
+
Workarea::Payment.find(order.id)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Emarsys
|
3
|
+
class Contact
|
4
|
+
class User
|
5
|
+
attr_reader :user
|
6
|
+
|
7
|
+
def initialize(user)
|
8
|
+
@user = user
|
9
|
+
end
|
10
|
+
|
11
|
+
def email
|
12
|
+
user.email
|
13
|
+
end
|
14
|
+
|
15
|
+
def first_name
|
16
|
+
user.first_name
|
17
|
+
end
|
18
|
+
|
19
|
+
def last_name
|
20
|
+
user.last_name
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Emarsys
|
3
|
+
class Contact
|
4
|
+
attr_reader :model, :options
|
5
|
+
|
6
|
+
def initialize(model, options = {})
|
7
|
+
@model = model
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return Hash
|
12
|
+
def to_h
|
13
|
+
user_data = {
|
14
|
+
"1" => contact_model.first_name,
|
15
|
+
"2" => contact_model.last_name,
|
16
|
+
"3" => contact_model.email
|
17
|
+
}
|
18
|
+
|
19
|
+
if address.present?
|
20
|
+
address_data = {
|
21
|
+
"10" => address.street,
|
22
|
+
"11" => address.city,
|
23
|
+
"12" => address.region,
|
24
|
+
"13" => address.postal_code,
|
25
|
+
"14" => ::Emarsys::Country.new.find_code(address.country.to_s),
|
26
|
+
"15" => address.phone_number
|
27
|
+
}
|
28
|
+
|
29
|
+
user_data.merge!(address_data)
|
30
|
+
end
|
31
|
+
|
32
|
+
user_data
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def address
|
38
|
+
options[:address]
|
39
|
+
end
|
40
|
+
|
41
|
+
def contact_from
|
42
|
+
options[:contact_from]
|
43
|
+
end
|
44
|
+
|
45
|
+
def contact_model
|
46
|
+
if contact_from == "user"
|
47
|
+
Contact::User.new(model)
|
48
|
+
elsif contact_from == "order"
|
49
|
+
Contact::Order.new(model)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Workarea
|
2
|
+
module Admin
|
3
|
+
class EmarsysConfigurationViewModel < ApplicationViewModel
|
4
|
+
def masked_api_key
|
5
|
+
return unless Workarea::Emarsys.secret_key.present?
|
6
|
+
key = Workarea::Emarsys.secret_key
|
7
|
+
last_digits = key.to_s.slice(-4..-1)
|
8
|
+
"XXXXXXXXXX#{last_digits}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def masked_sales_api_key
|
12
|
+
return unless Workarea::Emarsys.api_token.present?
|
13
|
+
key = Workarea::Emarsys.api_token
|
14
|
+
last_digits = key.to_s.slice(-4..-1)
|
15
|
+
"XXXXXXXXXX#{last_digits}"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
- @page_title = t('workarea.admin.emarsys_configuration.edit.title')
|
2
|
+
|
3
|
+
.view
|
4
|
+
.view__header
|
5
|
+
.view__heading
|
6
|
+
= link_to "↑ #{t('workarea.admin.search_settings.show.dashboard_link')}", settings_dashboards_path
|
7
|
+
%h1= t('workarea.admin.emarsys_configuration.edit.title')
|
8
|
+
|
9
|
+
.view__container
|
10
|
+
= form_tag emarsys_configuration_path, method: :patch, data: { unsaved_changes: '' } do
|
11
|
+
|
12
|
+
.grid__cell.grid__cell--50-at-medium
|
13
|
+
|
14
|
+
.property
|
15
|
+
%span.property__name
|
16
|
+
= t('workarea.admin.emarsys_configuration.edit.api_key')
|
17
|
+
= link_to '#api-key', data: { tooltip: '' } do
|
18
|
+
= inline_svg('workarea/admin/icons/help.svg', class: 'svg-icon svg-icon--small svg-icon--blue', title: t('workarea.admin.emarsys_configuration.edit.api_key'))
|
19
|
+
#api-key.tooltip-content
|
20
|
+
%p= t('workarea.admin.emarsys_configuration.edit.help.api_key')
|
21
|
+
|
22
|
+
- if @configuration.masked_api_key.present?
|
23
|
+
%p= @configuration.masked_api_key
|
24
|
+
- else
|
25
|
+
%p= t('workarea.admin.emarsys_configuration.edit.no_key')
|
26
|
+
|
27
|
+
%span.property__name
|
28
|
+
= t('workarea.admin.emarsys_configuration.edit.sales_api_key')
|
29
|
+
= link_to '#sales-api-key', data: { tooltip: '' } do
|
30
|
+
= inline_svg('workarea/admin/icons/help.svg', class: 'svg-icon svg-icon--small svg-icon--blue', title: t('workarea.admin.emarsys_configuration.edit.sales_api_key'))
|
31
|
+
#sales-api-key.tooltip-content
|
32
|
+
%p= t('workarea.admin.emarsys_configuration.edit.help.sales_api_key')
|
33
|
+
|
34
|
+
- if @configuration.masked_sales_api_key.present?
|
35
|
+
%p= @configuration.masked_sales_api_key
|
36
|
+
- else
|
37
|
+
%p= t('workarea.admin.emarsys_configuration.edit.no_key')
|
38
|
+
|
39
|
+
%span.property__name
|
40
|
+
= t('workarea.admin.emarsys_configuration.edit.production')
|
41
|
+
= link_to '#enabled', data: { tooltip: '' } do
|
42
|
+
= inline_svg('workarea/admin/icons/help.svg', class: 'svg-icon svg-icon--small svg-icon--blue', title: t('workarea.admin.emarsys_configuration.edit.production'))
|
43
|
+
#enabled.tooltip-content
|
44
|
+
%p= t('workarea.admin.emarsys_configuration.edit.help.production')
|
45
|
+
|
46
|
+
= toggle_button_for 'production', @configuration.production?
|
47
|
+
|
48
|
+
%span.property__name
|
49
|
+
= t('workarea.admin.emarsys_configuration.edit.customer_id')
|
50
|
+
= link_to '#show-on-pdp', data: { tooltip: '' } do
|
51
|
+
= inline_svg('workarea/admin/icons/help.svg', class: 'svg-icon svg-icon--small svg-icon--blue', title: t('workarea.admin.emarsys_configuration.edit.customer_id'))
|
52
|
+
#show-on-pdp.tooltip-content
|
53
|
+
%p= t('workarea.admin.emarsys_configuration.edit.help.customer_id')
|
54
|
+
|
55
|
+
= text_field_tag 'customer_id', @configuration.customer_id, class: 'text-box', id: "customer_id"
|
56
|
+
|
57
|
+
%span.property__name
|
58
|
+
= t('workarea.admin.emarsys_configuration.edit.merchant_id')
|
59
|
+
= link_to '#show-on-cart', data: { tooltip: '' } do
|
60
|
+
= inline_svg('workarea/admin/icons/help.svg', class: 'svg-icon svg-icon--small svg-icon--blue', title: t('workarea.admin.emarsys_configuration.edit.merchant_id'))
|
61
|
+
#show-on-cart.tooltip-content
|
62
|
+
%p= t('workarea.admin.emarsys_configuration.edit.help.merchant_id')
|
63
|
+
|
64
|
+
= text_field_tag 'merchant_id', @configuration.merchant_id, class: 'text-box', id: "merchant_id"
|
65
|
+
|
66
|
+
.workflow-bar
|
67
|
+
.grid.grid--auto.grid--right.grid--middle
|
68
|
+
.grid__cell= button_tag t('workarea.admin.emarsys_configuration.edit.button'), value: 'save_settings', class: 'workflow-bar__button workflow-bar__button--update'
|
@@ -0,0 +1 @@
|
|
1
|
+
%li{ class: "primary-nav__item" }= link_to t('workarea.admin.shared.primary_nav.emarsys_configuration_title'), edit_emarsys_configuration_path, class: navigation_link_classes(edit_emarsys_configuration_path)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
- if Workarea::Emarsys::Configuration.current.merchant_id.present?
|
2
|
+
:javascript
|
3
|
+
var ScarabQueue = ScarabQueue || [];
|
4
|
+
(function(id) {
|
5
|
+
if (document.getElementById(id)) return;
|
6
|
+
var js = document.createElement('script'); js.id = id;
|
7
|
+
js.src = '//cdn.scarabresearch.com/js/#{Workarea::Emarsys::Configuration.current.merchant_id}/scarab-v2.js';
|
8
|
+
var fs = document.getElementsByTagName('script')[0];
|
9
|
+
fs.parentNode.insertBefore(js, fs);
|
10
|
+
})('scarab-js-api');
|
11
|
+
|