workarea-listrak 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.eslintrc.json +36 -0
- data/.esvmrc +5 -0
- data/.gitignore +32 -0
- data/CHANGELOG.md +322 -0
- data/Gemfile +14 -0
- data/README.md +130 -0
- data/Rakefile +53 -0
- data/app/assets/javascripts/workarea/admin/modules/listrak/list_events_select.js +83 -0
- data/app/assets/javascripts/workarea/storefront/listrak/adapters/listrak_adapter.js +110 -0
- data/app/assets/javascripts/workarea/storefront/listrak/listrak_config.js.erb +13 -0
- data/app/assets/javascripts/workarea/storefront/listrak/modules/listrak.js +64 -0
- data/app/controllers/workarea/admin/listrak/configurations_controller.rb +30 -0
- data/app/controllers/workarea/admin/listrak/events_controller.rb +17 -0
- data/app/helpers/workarea/listrak/analytics/helper.rb +44 -0
- data/app/models/workarea/listrak/configuration.rb +19 -0
- data/app/queries/workarea/categorization.decorator +7 -0
- data/app/services/workarea/listrak/data_api/customers.rb +26 -0
- data/app/services/workarea/listrak/data_api/orders.rb +26 -0
- data/app/services/workarea/listrak/data_api/products.rb +26 -0
- data/app/services/workarea/listrak/data_api.rb +63 -0
- data/app/services/workarea/listrak/email_api/contacts.rb +73 -0
- data/app/services/workarea/listrak/email_api/events.rb +44 -0
- data/app/services/workarea/listrak/email_api/lists.rb +21 -0
- data/app/services/workarea/listrak/email_api/messages.rb +50 -0
- data/app/services/workarea/listrak/email_api/transactional_messages.rb +32 -0
- data/app/services/workarea/listrak/email_api.rb +71 -0
- data/app/services/workarea/listrak/models/address.rb +83 -0
- data/app/services/workarea/listrak/models/contact.rb +67 -0
- data/app/services/workarea/listrak/models/contact_form.rb +24 -0
- data/app/services/workarea/listrak/models/customer_form.rb +209 -0
- data/app/services/workarea/listrak/models/event.rb +45 -0
- data/app/services/workarea/listrak/models/event_form.rb +25 -0
- data/app/services/workarea/listrak/models/list.rb +204 -0
- data/app/services/workarea/listrak/models/message_form.rb +147 -0
- data/app/services/workarea/listrak/models/order_form.rb +352 -0
- data/app/services/workarea/listrak/models/order_item.rb +197 -0
- data/app/services/workarea/listrak/models/product_form.rb +369 -0
- data/app/services/workarea/listrak/models/transactional_message_form.rb +21 -0
- data/app/services/workarea/listrak/oauth.rb +45 -0
- data/app/services/workarea/listrak/transactional_message.rb +83 -0
- data/app/view_models/workarea/admin/listrak_configuration_view_model.rb +17 -0
- data/app/views/workarea/admin/listrak/configurations/edit.html.haml +28 -0
- data/app/views/workarea/admin/listrak/events/index.json.jbuilder +4 -0
- data/app/views/workarea/admin/shared/_listrak_configuration_link.html.haml +1 -0
- data/app/views/workarea/storefront/checkouts/_listrak.html.haml +2 -0
- data/app/workers/workarea/listrak/customer_exporter.rb +22 -0
- data/app/workers/workarea/listrak/order_exporter.rb +22 -0
- data/app/workers/workarea/listrak/product_exporter.rb +50 -0
- data/app/workers/workarea/listrak/subscribe_email_signup.rb +34 -0
- data/app/workers/workarea/listrak/unsubscribe_email_signup.rb +27 -0
- data/bin/rails +18 -0
- data/bin/rake +16 -0
- data/bin/rspec +16 -0
- data/bin/rubocop +16 -0
- data/config/initializers/append_points.rb +28 -0
- data/config/initializers/configuration.rb +8 -0
- data/config/locales/en.yml +17 -0
- data/config/routes.rb +10 -0
- data/docs/Listrak Technical Integration Guide.docx +0 -0
- data/lib/generators/workarea/listrak/message/USAGE +9 -0
- data/lib/generators/workarea/listrak/message/message_generator.rb +15 -0
- data/lib/generators/workarea/listrak/message/templates/message.rb.erb +24 -0
- data/lib/workarea/listrak/analytics.rb +17 -0
- data/lib/workarea/listrak/bogus_data_api/customers.rb +9 -0
- data/lib/workarea/listrak/bogus_data_api/orders.rb +9 -0
- data/lib/workarea/listrak/bogus_data_api/products.rb +9 -0
- data/lib/workarea/listrak/bogus_data_api/proxy_client.rb +29 -0
- data/lib/workarea/listrak/bogus_data_api.rb +46 -0
- data/lib/workarea/listrak/bogus_email_api/contacts.rb +8 -0
- data/lib/workarea/listrak/bogus_email_api/events.rb +23 -0
- data/lib/workarea/listrak/bogus_email_api/lists.rb +63 -0
- data/lib/workarea/listrak/bogus_email_api/proxy_client.rb +29 -0
- data/lib/workarea/listrak/bogus_email_api/transactional_messages.rb +9 -0
- data/lib/workarea/listrak/bogus_email_api.rb +51 -0
- data/lib/workarea/listrak/engine.rb +12 -0
- data/lib/workarea/listrak/error.rb +39 -0
- data/lib/workarea/listrak/version.rb +5 -0
- data/lib/workarea/listrak.rb +57 -0
- data/readme/listrak-admin.png +0 -0
- data/script/admin_ci +9 -0
- data/script/ci +11 -0
- data/script/core_ci +9 -0
- data/script/plugins_ci +9 -0
- data/script/storefront_ci +9 -0
- data/test/dummy/Rakefile +6 -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 +34 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/config/application.rb +18 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +9 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +54 -0
- data/test/dummy/config/environments/production.rb +86 -0
- data/test/dummy/config/environments/test.rb +43 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/test/dummy/config/initializers/assets.rb +11 -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/new_framework_defaults.rb +21 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/puma.rb +47 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +38 -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/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/test/dummy/public/apple-touch-icon.png +0 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/factories/workarea/factories/listrak.rb +15 -0
- data/test/helpers/workarea/listrak/analytics/helper_test.rb +38 -0
- data/test/integration/workarea/admin/listrak/configuration_integration_test.rb +26 -0
- data/test/integration/workarea/admin/listrak/events_integration_test.rb +21 -0
- data/test/lib/generators/workarea/listrak/message_generator_test.rb +26 -0
- data/test/queries/workarea/categorization_test.decorator +15 -0
- data/test/services/workarea/listrak/data_api/customers_test.rb +35 -0
- data/test/services/workarea/listrak/data_api/orders_test.rb +24 -0
- data/test/services/workarea/listrak/data_api/products_test.rb +27 -0
- data/test/services/workarea/listrak/email_api/contacts_test.rb +55 -0
- data/test/services/workarea/listrak/email_api/events_test.rb +51 -0
- data/test/services/workarea/listrak/email_api/lists_test.rb +45 -0
- data/test/services/workarea/listrak/email_api/messages_test.rb +28 -0
- data/test/services/workarea/listrak/email_api/transactional_messages_test.rb +50 -0
- data/test/services/workarea/listrak/oauth_test.rb +27 -0
- data/test/services/workarea/listrak/transactional_message_test.rb +48 -0
- data/test/support/workarea/listrak/test_order_confirmation_email.rb +116 -0
- data/test/support/workarea/listrak/vcr_config.rb +31 -0
- data/test/system/workarea/listrak_system_test.rb +75 -0
- data/test/test_helper.rb +16 -0
- data/test/vcr_cassettes/listrak/data_api/customers_import-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/data_api/orders_import-successful.yml +90 -0
- data/test/vcr_cassettes/listrak/data_api/products_import-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/email_api/contacts_get-successful.yml +87 -0
- data/test/vcr_cassettes/listrak/email_api/contacts_upsert-already_unsubscribed.yml +90 -0
- data/test/vcr_cassettes/listrak/email_api/contacts_upsert-successful.yml +87 -0
- data/test/vcr_cassettes/listrak/email_api/events_create-invalid_parameter.yml +90 -0
- data/test/vcr_cassettes/listrak/email_api/events_create-successful.yml +87 -0
- data/test/vcr_cassettes/listrak/email_api/events_get-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/email_api/lists_all-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/email_api/messages_create-successful.yml +88 -0
- data/test/vcr_cassettes/listrak/email_api/transactional_messages_create-successful.yml +89 -0
- data/test/vcr_cassettes/listrak/oauth-successful.yml +44 -0
- data/test/vcr_cassettes/listrak/oauth-unsuccessful.yml +46 -0
- data/test/vcr_cassettes/listrak/system_tests/footer_email_signup-successful.yml +171 -0
- data/test/vcr_cassettes/listrak/system_tests/footer_email_signup_overrides_unsubscribe.yml +255 -0
- data/test/vcr_cassettes/listrak/system_tests/unsubscribing.yml +593 -0
- data/test/workers/workarea/listrak/order_exporter_test.rb +31 -0
- data/test/workers/workarea/listrak/product_exporter_test.rb +62 -0
- data/workarea-listrak.gemspec +16 -0
- metadata +223 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2100d5e0ce9d7e3640ef0987da83414d700c9c3bcd166d59f5d7517d53d46f61
|
4
|
+
data.tar.gz: 628151e8705a7bd39a7c8365b5624701e38009aa70acf57c637b0db4d830e89a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 14769fb83d044f5cccfe0dfaccdcdcb51f3e2ba68df6738b2c0507ca1aaa67fb8e7b4669efa828d247ea8209cdb4c2dbdbb1e495f8249d38838bc2e362fe0ffd
|
7
|
+
data.tar.gz: 4d0141ffd9abfaa4facdc9594768c70424f5b4d0c6e5b1874b2ea40ba424706f65a1fc281e9ffc6d1c4529a27eefd6afb575bc36c2f08df94b3a920c86ae325a
|
data/.eslintrc.json
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
{
|
2
|
+
"extends": "eslint:recommended",
|
3
|
+
"rules": {
|
4
|
+
"semi": ["error", "always"],
|
5
|
+
"eqeqeq": ["error", "always"]
|
6
|
+
},
|
7
|
+
"globals": {
|
8
|
+
"window": true,
|
9
|
+
"document": true,
|
10
|
+
"WORKAREA": true,
|
11
|
+
"$": true,
|
12
|
+
"jQuery": true,
|
13
|
+
"_": true,
|
14
|
+
"feature": true,
|
15
|
+
"JST": true,
|
16
|
+
"Turbolinks": true,
|
17
|
+
"I18n": true,
|
18
|
+
"Chart": true,
|
19
|
+
"Dropzone": true,
|
20
|
+
"strftime": true,
|
21
|
+
"Waypoint": true,
|
22
|
+
"wysihtml": true,
|
23
|
+
"LocalTime": true,
|
24
|
+
"describe": true,
|
25
|
+
"after": true,
|
26
|
+
"afterEach": true,
|
27
|
+
"before": true,
|
28
|
+
"beforeEach": true,
|
29
|
+
"it": true,
|
30
|
+
"expect": true,
|
31
|
+
"sinon": true,
|
32
|
+
"fixture": true,
|
33
|
+
"chai": true,
|
34
|
+
"_ltk": true
|
35
|
+
}
|
36
|
+
}
|
data/.gitignore
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
**/*/.DS_Store
|
4
|
+
/.config
|
5
|
+
/coverage/
|
6
|
+
/InstalledFiles
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/spec/examples.txt
|
10
|
+
/test/tmp/
|
11
|
+
/test/version_tmp/
|
12
|
+
/tmp/
|
13
|
+
Gemfile.lock
|
14
|
+
test/dummy/tmp/export/*.csv
|
15
|
+
.DS_Store
|
16
|
+
|
17
|
+
## Documentation cache and generated files:
|
18
|
+
/.yardoc/
|
19
|
+
/_yardoc/
|
20
|
+
/doc/
|
21
|
+
/rdoc/
|
22
|
+
|
23
|
+
## Environment normalisation:
|
24
|
+
/.bundle/
|
25
|
+
/vendor/bundle
|
26
|
+
/lib/bundler/man/
|
27
|
+
.byebug_history
|
28
|
+
.envrc
|
29
|
+
log
|
30
|
+
tmp
|
31
|
+
test/dummy/public/system/
|
32
|
+
coverage
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,322 @@
|
|
1
|
+
Workarea Listrak 5.0.1 (2019-08-21)
|
2
|
+
--------------------------------------------------------------------------------
|
3
|
+
|
4
|
+
* Open Source!
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
Workarea Listrak 5.0.0 (2019-06-25)
|
9
|
+
--------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
* Listrak REST APIs
|
12
|
+
|
13
|
+
Replace the SOAP implementation with Lisrak's REST APIs
|
14
|
+
|
15
|
+
LISTRAK-52
|
16
|
+
Eric Pigeon
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
Workarea Listrak 4.0.2 (2019-02-19)
|
21
|
+
--------------------------------------------------------------------------------
|
22
|
+
|
23
|
+
* Perform the `_ltk` check when events are fired, instead of when the adapter is registered.
|
24
|
+
|
25
|
+
LISTRAK-59
|
26
|
+
Brian Berg
|
27
|
+
|
28
|
+
* Add condition to check the listrak SDK is available before running adapter callbacks
|
29
|
+
|
30
|
+
LISTRAK-57
|
31
|
+
Jake Beresford
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
Workarea Listrak 4.0.1 (2018-01-11)
|
36
|
+
--------------------------------------------------------------------------------
|
37
|
+
|
38
|
+
* Refactor Listrak SCA reporting
|
39
|
+
|
40
|
+
Our original implementation was not passing along configured
|
41
|
+
`email_capture_ids` to javascript, this updates that config markup to
|
42
|
+
match patterns present in other workarea plugins.
|
43
|
+
|
44
|
+
Listrak adapter was using route syntax from v2 when storefront was
|
45
|
+
called `store_front`. Updating to the new v3 route resolves issues with
|
46
|
+
updating cart items analytics.
|
47
|
+
|
48
|
+
There was room for improvement with how our listrak module handled
|
49
|
+
adding SCA email address abandoner listener to every email field.
|
50
|
+
Before this plugin relied on host app to pass each field name in the
|
51
|
+
configuration, this update enchances that experience by also including a
|
52
|
+
search for _all_ email fields within a given `$scope`.
|
53
|
+
|
54
|
+
LISTRAK-47
|
55
|
+
|
56
|
+
Refactor JS
|
57
|
+
|
58
|
+
The mutation of the emailIds array made the updated JS hard to follow
|
59
|
+
and understand at what point what typeof `configIds`.
|
60
|
+
|
61
|
+
Names and var creation has been cleaned up to make the selector string
|
62
|
+
building more readable.
|
63
|
+
|
64
|
+
LISTRAK-47
|
65
|
+
Jordan Stewart
|
66
|
+
|
67
|
+
|
68
|
+
Workarea Listrak 4.0.0 (2017-07-31)
|
69
|
+
--------------------------------------------------------------------------------
|
70
|
+
|
71
|
+
|
72
|
+
Workarea Listrak 4.0.0 (2017-07-31)
|
73
|
+
--------------------------------------------------------------------------------
|
74
|
+
|
75
|
+
|
76
|
+
Workarea Listrak 4.0.0 (2017-07-31)
|
77
|
+
--------------------------------------------------------------------------------
|
78
|
+
|
79
|
+
* LISTRAK-45
|
80
|
+
Eric Pigeon
|
81
|
+
|
82
|
+
* Use different list ID in transactional email
|
83
|
+
|
84
|
+
Transactional emails always use a different List ID on Listrak than the
|
85
|
+
normal email subscribe list. This new configuration setting is available
|
86
|
+
in the `:listrak` secrets as `:transactional_list_id`.
|
87
|
+
|
88
|
+
LISTRAK-43
|
89
|
+
Tom Scott
|
90
|
+
|
91
|
+
|
92
|
+
WebLinc Listrak 3.1.4.pre (2017-03-14)
|
93
|
+
--------------------------------------------------------------------------------
|
94
|
+
|
95
|
+
* Fix regressions to older arity syntax
|
96
|
+
|
97
|
+
After the LISTRAK-42 fix was deployed as workarea-listrak v3.1.3, another
|
98
|
+
error popped up due to perform_api_call being called with the wrong
|
99
|
+
number of arguments.
|
100
|
+
|
101
|
+
Report: https://discourse.workarea.com/t/listrak-gem-contact-api-call-bug/680/3
|
102
|
+
|
103
|
+
LISTRAK-42
|
104
|
+
Tom Scott
|
105
|
+
|
106
|
+
* Write tagged log messages when making requests
|
107
|
+
|
108
|
+
When sending requests to Listrak's SOAP API, log all request/response
|
109
|
+
params so that we can easily debug the data in case of failure. This is
|
110
|
+
especially true for transactional messages. Also, make sure log messages
|
111
|
+
are tagged with "[LISTRAK]" so they can be easily found when grepping
|
112
|
+
through log history.
|
113
|
+
|
114
|
+
LISTRAK-41
|
115
|
+
Tom Scott
|
116
|
+
|
117
|
+
* Display price in fixed-point notation LISTRAK-40 SHADES-684
|
118
|
+
Tom Scott
|
119
|
+
|
120
|
+
* Use correct attribute for item price.
|
121
|
+
|
122
|
+
Price was not getting passed in AddItem() calls causing improper reports
|
123
|
+
on the Listrak admin side.
|
124
|
+
|
125
|
+
LISTRAK-40
|
126
|
+
SHADES-684
|
127
|
+
Tom Scott
|
128
|
+
|
129
|
+
* Merge branch 'bugfix/LISTRAK-39-dont-run-workers-except-in-production'
|
130
|
+
|
131
|
+
Added more docs.
|
132
|
+
Tom Scott
|
133
|
+
|
134
|
+
* Dont run workers except in production
|
135
|
+
|
136
|
+
all the environments were exporting to the same ftp with the same file
|
137
|
+
name, only enable the scheduled jobs when the environment is production.
|
138
|
+
|
139
|
+
LISTRAK-39
|
140
|
+
Eric Pigeon
|
141
|
+
|
142
|
+
* Fix typo in setting of Order.ItemTotal
|
143
|
+
|
144
|
+
The ItemTotal in this handler was being set to a blank value due to the
|
145
|
+
typo on the `payload.subtotal_price` key.
|
146
|
+
|
147
|
+
LISTRAK-37
|
148
|
+
Tom Scott
|
149
|
+
|
150
|
+
* Improve errors in Workarea::Listrak::Gateway
|
151
|
+
|
152
|
+
LISTRAK-34
|
153
|
+
Tom Scott
|
154
|
+
|
155
|
+
* Fix multiple email captures in Listrak
|
156
|
+
|
157
|
+
It seems that the CaptureEmail calls over each email_capture_id was
|
158
|
+
causing multiple requests to be sent to Listrak for each completed
|
159
|
+
field. This will prevent calls for nonexistent items by checking for
|
160
|
+
whether the field exists on the page prior to calling
|
161
|
+
`_ltk.SCA.CaptureEmail()` on it.
|
162
|
+
|
163
|
+
This fixes one of the tasks in SHADES-668 as well.
|
164
|
+
|
165
|
+
LISTRAK-36
|
166
|
+
Tom Scott
|
167
|
+
|
168
|
+
* Rename checkoutConfirmation to checkoutOrderPlaced
|
169
|
+
|
170
|
+
The JS code wasn't firing on confirmation because the analytics event
|
171
|
+
was misnamed, renamed it ot what's found in base so it will "Just Work".
|
172
|
+
|
173
|
+
This will also resolve SHADES-688 when it's deployed in **v3.0.1**.
|
174
|
+
|
175
|
+
LISTRAK-35
|
176
|
+
Tom Scott
|
177
|
+
|
178
|
+
* Add Jesse's changes for firing the ltk event.
|
179
|
+
|
180
|
+
LISTRAK-30
|
181
|
+
Tom Scott
|
182
|
+
|
183
|
+
* LISTRAK-30 Refactor Listrak JS code as an analytics adapter
|
184
|
+
Eric Pigeon
|
185
|
+
|
186
|
+
* Append sdk partial to storefront.javascript
|
187
|
+
|
188
|
+
This is apparently a more accurate place to be putting this code, in
|
189
|
+
addition, it places the code on the bottom of the page. Not really sure
|
190
|
+
how "breaking" of a change this is gonna be so hold off on merging
|
191
|
+
before we're sure.
|
192
|
+
|
193
|
+
LISTRAK-32
|
194
|
+
Tom Scott
|
195
|
+
|
196
|
+
* Hard-code WSDL URL
|
197
|
+
|
198
|
+
This URL never changes, there's no reason to supply it from secrets.
|
199
|
+
|
200
|
+
LISTRAK-31
|
201
|
+
Tom Scott
|
202
|
+
|
203
|
+
* Fix cart recreate tag
|
204
|
+
|
205
|
+
This is based on the implementation in Tahari, the cart recreate code
|
206
|
+
supplied by Listrak in their docs is apparently incorrect. Since the
|
207
|
+
`_ltk` object is already defined, we don't need to wait for any kind of
|
208
|
+
event. Instead, we should be calling Listrak SCA methods as soon as we
|
209
|
+
can.
|
210
|
+
|
211
|
+
LISTRAK-28
|
212
|
+
Tom Scott
|
213
|
+
|
214
|
+
* Use full url for product images
|
215
|
+
|
216
|
+
LISTRAK-25
|
217
|
+
Eric Pigeon
|
218
|
+
|
219
|
+
* Shedule product export nightly
|
220
|
+
|
221
|
+
LISTRAK-24
|
222
|
+
Eric Pigeon
|
223
|
+
|
224
|
+
* LISTRAK-123: Ensure product URL is fully-qualified
|
225
|
+
|
226
|
+
Had an issue with testing this one...had to hard-set the
|
227
|
+
`Workarea.config.domain`.
|
228
|
+
Tom Scott
|
229
|
+
|
230
|
+
* LISTRAK-20: Use absolute paths for CSVs
|
231
|
+
|
232
|
+
Can cause issues building files on the server, solved by always
|
233
|
+
prepending `Rails.root` in file_to_upload.
|
234
|
+
Tom Scott
|
235
|
+
|
236
|
+
* Fix ftp hash symbol access
|
237
|
+
|
238
|
+
fix trying to access hash from secrets as symbol keys
|
239
|
+
clean up decorator to follow convention
|
240
|
+
test decorated categorization method
|
241
|
+
fix dummy mongoid.yml to be mongoid 5 compliant
|
242
|
+
clean up gemspec authors
|
243
|
+
|
244
|
+
LISTRAK-19
|
245
|
+
Eric Pigeon
|
246
|
+
|
247
|
+
* Update item price method and ensure _ltk var exists
|
248
|
+
|
249
|
+
Running tests on this one uncovered an issue that would have caused the
|
250
|
+
cart summary view to error out. Updated the `item.unit_price` call to
|
251
|
+
`item.total_price` everywhere, since that field is defined on
|
252
|
+
Order::Item and OrderItemViewModel doesn't define a unit_price method.
|
253
|
+
|
254
|
+
LISTRAK-17
|
255
|
+
Tom Scott
|
256
|
+
|
257
|
+
* LISTRAK-17: Trigger cart updates when the cart summary view is rendered
|
258
|
+
bberg
|
259
|
+
|
260
|
+
* LISTRAK-16: Configuration refactor. Tom deflips table.
|
261
|
+
Mark Platt
|
262
|
+
|
263
|
+
* LISTRAK-16: Add secrets to an config in initializer. Update js to use config
|
264
|
+
Mark Platt
|
265
|
+
|
266
|
+
* Fix render_listrak_tracking_code overriding
|
267
|
+
|
268
|
+
This wasn't able to be overridden properly in the host app, and I had to
|
269
|
+
resort to a `nil?` check in order to allow it to be overridden. Not sure
|
270
|
+
of how the configuration hierarchy works in this case, but it's much
|
271
|
+
easier and clearer in the engine.rb to write it this way IMHO.
|
272
|
+
|
273
|
+
LISTRAK-13
|
274
|
+
Tom Scott
|
275
|
+
|
276
|
+
* v0.13.0: Render Listrak JS conditionally
|
277
|
+
|
278
|
+
Some clients wish to use Google Tag Manager in order to render
|
279
|
+
the Listrak JavaScript tracking code. While this was always
|
280
|
+
configurable, the setting has been renamed to
|
281
|
+
`listrak_render_tracking_code` in order to prevent naming conflicts and
|
282
|
+
be more descriptive of the domain in which it is active.
|
283
|
+
|
284
|
+
This is a major-version release in case anyone was already using the old,
|
285
|
+
badly-named config setting. Renamed it to be "namespaced" within
|
286
|
+
listrak, so it's easy to see where the setting is being used.
|
287
|
+
|
288
|
+
LISTRAK-11
|
289
|
+
Tom Scott
|
290
|
+
|
291
|
+
* Use configured merchant_id in Listrak JS tracker
|
292
|
+
|
293
|
+
Listrak needs to include a bit of JS on every page for tracking user
|
294
|
+
movements through the app. The merchant ID included in this tracking
|
295
|
+
code was hard-coded into the gem and the same for every user of the gem.
|
296
|
+
Refactored to use a secret from `config/secrets.yml` instead of the
|
297
|
+
hard-coded value. Users of the workarea-listrak gem will need to update
|
298
|
+
`config/secrets.yml` and insert a `:merchant_id:` into the `listrak:`
|
299
|
+
hash. This ID can be obtained from your client's Listrak account.
|
300
|
+
|
301
|
+
Releasing this as a minor version upgrade (v0.12.0) because it depends on
|
302
|
+
configuration in secrets.yml that wasn't there before, and will break
|
303
|
+
apps in production without a corresponding change to the encrypted data
|
304
|
+
bag for this app.
|
305
|
+
|
306
|
+
LISTRAK-10
|
307
|
+
Tom Scott
|
308
|
+
|
309
|
+
* Disable Listrak JS in testing.
|
310
|
+
|
311
|
+
When testing the application with Capybara, sometimes Listrak can fail
|
312
|
+
the build for random reasons. This definitely shouldn't block feature
|
313
|
+
testing an application, as this kind of integration can fail for a wide
|
314
|
+
variety of reasons, and we want our tests to depend on the network as
|
315
|
+
little as possible. This change surrounds the assignment of the JS
|
316
|
+
partial to the application layout with a conditional, that omits adding
|
317
|
+
the partial if we are currently in the test environment.
|
318
|
+
|
319
|
+
Example: https://bamboo.tools.workarea.com/browse/ESTUYO-DEV-172/log
|
320
|
+
|
321
|
+
LISTRAK-9
|
322
|
+
Tom Scott
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
# Listrak
|
2
|
+
|
3
|
+
Integrate the [Listrak][] ERP with the Workarea platform. This plugin
|
4
|
+
currently implements the following Listrak features:
|
5
|
+
|
6
|
+
- Page view tracking
|
7
|
+
- Cart abandonment
|
8
|
+
- Transactional email delivery
|
9
|
+
- Automatically subscribing users to a distribution list
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Add the following to Gemfile:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'workarea-listrak', '~> 5.0'
|
17
|
+
```
|
18
|
+
|
19
|
+
### Secrets
|
20
|
+
|
21
|
+
```yaml
|
22
|
+
listrak:
|
23
|
+
data_api:
|
24
|
+
client_id:
|
25
|
+
client_secret:
|
26
|
+
email_api:
|
27
|
+
client_id:
|
28
|
+
client_secret:
|
29
|
+
```
|
30
|
+
|
31
|
+
### Configuration
|
32
|
+
|
33
|
+
Most listrak configuration is set via the admin; you will need to set the
|
34
|
+
`Default List` in the admin after installing the plugin.
|
35
|
+
|
36
|
+
![lisrak admin](./readme/listrak-admin.png)
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
Workarea.config do |config|
|
40
|
+
config.listrak.analytics = {
|
41
|
+
merchant_id: 'LISTRAK MERCHANT ID',
|
42
|
+
email_capture_ids: 'ID's OF EMAIL FIELDS USED FOR JAVASCRIPT ABANDONMENT'
|
43
|
+
}
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
47
|
+
### Subscribing email addresses to a distribution list
|
48
|
+
|
49
|
+
When customers sign up for the newsletter within the popup dialog or
|
50
|
+
create a new user account, `Workarea::Listrak` will send the email and
|
51
|
+
any other user-specific information to Listrak. This occurs immediately
|
52
|
+
in a background job during creation of a `Email::Signup`.
|
53
|
+
|
54
|
+
### Data Exporting
|
55
|
+
|
56
|
+
The following will be sent to Listrak via API whenever they are created or saved:
|
57
|
+
|
58
|
+
* Customers
|
59
|
+
* Orders (on order place)
|
60
|
+
* Products
|
61
|
+
|
62
|
+
### Transactional Email Delivery
|
63
|
+
|
64
|
+
This library is capable of replacing the internal application mailers
|
65
|
+
with API calls to Listrak's email delivery service, passing it the data
|
66
|
+
that it needs. To generate a new transactional message class, run:
|
67
|
+
|
68
|
+
```bash
|
69
|
+
$ bin/rails generate workarea:listrak:message OrderConfirmation
|
70
|
+
```
|
71
|
+
|
72
|
+
This will generate a class `app/messages/workarea/order_confirmation_message.rb`
|
73
|
+
|
74
|
+
You will need to define the `message_id` and `messsage_attribute` as well as define the methods
|
75
|
+
for these values. For example:
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
module Workarea
|
79
|
+
module Listrak
|
80
|
+
class OrderConfirmationEmail
|
81
|
+
include Listrak::TransactionalMessage
|
82
|
+
|
83
|
+
attr_reader :order
|
84
|
+
|
85
|
+
message_id 11838256
|
86
|
+
message_attributes(
|
87
|
+
order_date: 2446175
|
88
|
+
)
|
89
|
+
|
90
|
+
def initialize(order)
|
91
|
+
@order = order
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def email_address
|
97
|
+
order.email
|
98
|
+
end
|
99
|
+
|
100
|
+
def order_date
|
101
|
+
order.placed_at.to_s
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
```
|
106
|
+
|
107
|
+
To send the message, call the `#deliver` method:
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
OrderConfirmationMessage.new(order).deliver
|
111
|
+
```
|
112
|
+
|
113
|
+
### JavaScript Analytics Integration
|
114
|
+
|
115
|
+
All of Listrak's JS code blocks respond to the `listrakAsyncListener`
|
116
|
+
event, which is triggered after Listrak's external "SDK" code is loaded
|
117
|
+
onto the page. Workarea's analytics adapter encapsulates this as a public
|
118
|
+
method called `addListrakListener`.
|
119
|
+
|
120
|
+
It's important that the init function from Storefront's **analytics.js**
|
121
|
+
is called prior to the **listrak.js** init, so events can be registered
|
122
|
+
before the SDK is loaded. This happens out-of-box, but is mentioned here
|
123
|
+
if an implementation team creates their own **application.js.erb**
|
124
|
+
manifest manually, or other modules that implement more Listrak features
|
125
|
+
(like recommendations) are added to your application in the future.
|
126
|
+
|
127
|
+
To reiterate, **listrak.js needs to be your last initialized JS
|
128
|
+
module**.
|
129
|
+
|
130
|
+
[Listrak]: http://listrak.com
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require "bundler/setup"
|
4
|
+
rescue LoadError
|
5
|
+
puts "You must `gem install bundler` and `bundle install` to run rake tasks"
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'rdoc/task'
|
9
|
+
|
10
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
11
|
+
rdoc.rdoc_dir = 'rdoc'
|
12
|
+
rdoc.title = 'Tasker'
|
13
|
+
rdoc.options << '--line-numbers'
|
14
|
+
rdoc.rdoc_files.include('README.md')
|
15
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
16
|
+
end
|
17
|
+
|
18
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
19
|
+
load "rails/tasks/engine.rake"
|
20
|
+
load "rails/tasks/statistics.rake"
|
21
|
+
load "workarea/changelog.rake"
|
22
|
+
|
23
|
+
require "rake/testtask"
|
24
|
+
|
25
|
+
Rake::TestTask.new(:test) do |t|
|
26
|
+
t.libs << "lib"
|
27
|
+
t.libs << "test"
|
28
|
+
t.pattern = "test/**/*_test.rb"
|
29
|
+
t.verbose = false
|
30
|
+
end
|
31
|
+
|
32
|
+
task default: :test
|
33
|
+
|
34
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
35
|
+
require "workarea/listrak/version"
|
36
|
+
|
37
|
+
desc "Release version #{Workarea::Listrak::VERSION} of the gem"
|
38
|
+
task :release do
|
39
|
+
host = "https://#{ENV['BUNDLE_GEMS__WEBLINC__COM']}@gems.weblinc.com"
|
40
|
+
|
41
|
+
#Rake::Task['workarea:changelog'].execute
|
42
|
+
#system 'git add CHANGELOG.md'
|
43
|
+
#system 'git commit -m "Update CHANGELOG"'
|
44
|
+
#system 'git push origin HEAD'
|
45
|
+
|
46
|
+
system "git tag -a v#{Workarea::Listrak::VERSION} -m 'Tagging #{Workarea::Listrak::VERSION}'"
|
47
|
+
system "git push --tags"
|
48
|
+
|
49
|
+
system "gem build workarea-listrak.gemspec"
|
50
|
+
system "gem push workarea-listrak-#{Workarea::Listrak::VERSION}.gem"
|
51
|
+
system "gem push workarea-listrak-#{Workarea::Listrak::VERSION}.gem --host #{host}"
|
52
|
+
system "rm workarea-listrak-#{Workarea::Listrak::VERSION}.gem"
|
53
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
/**
|
2
|
+
* @namespace WORKAREA.listrakListEventsSelect
|
3
|
+
*/
|
4
|
+
|
5
|
+
WORKAREA.registerModule('listrakListEventsSelect', (function () {
|
6
|
+
'use strict';
|
7
|
+
|
8
|
+
var injectHiddenInput = function (index, select) {
|
9
|
+
// allows select[multiple=true] elements to post empty values
|
10
|
+
if ( ! $(select).is('[multiple]')) { return; }
|
11
|
+
|
12
|
+
$(select).before(function () {
|
13
|
+
return JST['workarea/core/templates/hidden_input']({
|
14
|
+
name: select.name,
|
15
|
+
value: ''
|
16
|
+
});
|
17
|
+
});
|
18
|
+
},
|
19
|
+
|
20
|
+
getConfig = function () {
|
21
|
+
var settings = _.assign({}, WORKAREA.config.remoteSelects, {
|
22
|
+
placeholder: I18n.t('workarea.admin.listrak_configuration.edit.events_select_placeholder'),
|
23
|
+
allowClear: true,
|
24
|
+
multiple: true,
|
25
|
+
width: false,
|
26
|
+
ajax: {
|
27
|
+
url: function () {
|
28
|
+
return WORKAREA.routes.admin.listrakListEventsPath({ list_id: listId(), format: "json" });
|
29
|
+
},
|
30
|
+
dataType: 'json',
|
31
|
+
delay: 250,
|
32
|
+
processResults: function (data) {
|
33
|
+
return {
|
34
|
+
results: _.map(data.results, function (item) {
|
35
|
+
return {
|
36
|
+
id: item.value,
|
37
|
+
text: item.label
|
38
|
+
};
|
39
|
+
})
|
40
|
+
};
|
41
|
+
},
|
42
|
+
cache: true,
|
43
|
+
escapeMarkup: function (markup) {
|
44
|
+
return markup;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
});
|
48
|
+
|
49
|
+
return settings;
|
50
|
+
},
|
51
|
+
|
52
|
+
listId = function () {
|
53
|
+
return $('#default_list_id').val();
|
54
|
+
},
|
55
|
+
|
56
|
+
initSelect2 = function (index, select) {
|
57
|
+
$(select)
|
58
|
+
.each(injectHiddenInput)
|
59
|
+
.select2(getConfig());
|
60
|
+
},
|
61
|
+
|
62
|
+
resetEventIds = function () {
|
63
|
+
$('[data-listrak-events-select]')
|
64
|
+
.val(null).trigger('change');
|
65
|
+
},
|
66
|
+
|
67
|
+
destroy = function (event) {
|
68
|
+
$('[data-listrak-events-select]', event.currentTarget)
|
69
|
+
.select2('destroy');
|
70
|
+
},
|
71
|
+
|
72
|
+
init = function ($scope) {
|
73
|
+
$('#default_list_id').on("change", resetEventIds);
|
74
|
+
$('[data-listrak-events-select]', $scope)
|
75
|
+
.each(initSelect2);
|
76
|
+
};
|
77
|
+
|
78
|
+
$(document).on('turbolinks:before-cache', destroy);
|
79
|
+
|
80
|
+
return {
|
81
|
+
init: init
|
82
|
+
};
|
83
|
+
}()));
|