workarea-listrak 5.0.1
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/.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
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Admin
|
|
3
|
+
class ListrakConfigurationViewModel < ApplicationViewModel
|
|
4
|
+
def all_lists
|
|
5
|
+
@all_lists ||= Workarea::Listrak.email.lists.all
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def event_options
|
|
9
|
+
events.map { |event| [event.name, event.id] }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def events
|
|
13
|
+
@events ||= Workarea::Listrak.email.events.all default_list_id
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
- @page_title = t('workarea.admin.listrak_configuration.edit.title')
|
|
2
|
+
|
|
3
|
+
.view
|
|
4
|
+
.view__header
|
|
5
|
+
.view__heading
|
|
6
|
+
= link_to "↑ #{t('workarea.admin.dashboards.settings.settings_dashboard')}", settings_dashboards_path
|
|
7
|
+
%h1= t('workarea.admin.listrak_configuration.edit.title')
|
|
8
|
+
|
|
9
|
+
.view__container
|
|
10
|
+
= form_tag listrak_configuration_path, method: :patch, data: { unsaved_changes: '' } do
|
|
11
|
+
.property
|
|
12
|
+
= label_tag 'default_list_id', t('workarea.admin.listrak_configuration.edit.default_list'), class: 'property__name'
|
|
13
|
+
= select_tag 'default_list_id', options_from_collection_for_select(@configuration.all_lists, 'id', 'name', @configuration.default_list_id)
|
|
14
|
+
|
|
15
|
+
.property
|
|
16
|
+
= label_tag 'external_event_ids[]', class: 'property__name' do
|
|
17
|
+
%span= t('workarea.admin.listrak_configuration.edit.external_events')
|
|
18
|
+
|
|
19
|
+
= link_to "#event_ids", data: { tooltip: '' } do
|
|
20
|
+
= inline_svg('workarea/admin/icons/help.svg', class: 'svg-icon svg-icon--small svg-icon--blue', title: t('workarea.admin.content.form.tooltip.title'))
|
|
21
|
+
#event_ids.tooltip-content= t('workarea.admin.listrak_configuration.edit.event_itds_tooltip')
|
|
22
|
+
|
|
23
|
+
= select_tag "external_event_ids[]", options_for_select(@configuration.event_options, @configuration.external_event_ids), multiple: true, data: { listrak_events_select: "" }
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
.workflow-bar
|
|
27
|
+
.grid.grid--auto.grid--right.grid--middle
|
|
28
|
+
.grid__cell= button_tag t('workarea.admin.listrak_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.listrak_configuration_title'), edit_listrak_configuration_path, class: navigation_link_classes(edit_listrak_configuration_path)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class CustomerExporter
|
|
4
|
+
include Sidekiq::Worker
|
|
5
|
+
include Sidekiq::CallbacksWorker
|
|
6
|
+
|
|
7
|
+
sidekiq_options(
|
|
8
|
+
enqueue_on: {
|
|
9
|
+
Workarea::User => :save
|
|
10
|
+
}
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
def perform(user_id)
|
|
14
|
+
user = Workarea::User.find user_id
|
|
15
|
+
|
|
16
|
+
customer_form = Listrak::Models::CustomerForm.new user
|
|
17
|
+
|
|
18
|
+
Listrak.data.customers.import [customer_form]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class OrderExporter
|
|
4
|
+
include Sidekiq::Worker
|
|
5
|
+
include Sidekiq::CallbacksWorker
|
|
6
|
+
|
|
7
|
+
sidekiq_options(
|
|
8
|
+
enqueue_on: {
|
|
9
|
+
Workarea::Order => :place
|
|
10
|
+
}
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
def perform(order_id)
|
|
14
|
+
order = Workarea::Order.find order_id
|
|
15
|
+
|
|
16
|
+
order_form = Listrak::Models::OrderForm.new order
|
|
17
|
+
|
|
18
|
+
Listrak.data.orders.import [order_form]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class ProductExporter
|
|
4
|
+
include Sidekiq::Worker
|
|
5
|
+
include Sidekiq::CallbacksWorker
|
|
6
|
+
|
|
7
|
+
sidekiq_options(
|
|
8
|
+
enqueue_on: {
|
|
9
|
+
Catalog::Product => :save,
|
|
10
|
+
Shipping::Sku => :save,
|
|
11
|
+
Pricing::Sku => :save,
|
|
12
|
+
Pricing::Price => :save,
|
|
13
|
+
with: -> { ProductExporter.perform_with(self) }
|
|
14
|
+
}
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
def self.perform_with(model)
|
|
18
|
+
case model.class.name
|
|
19
|
+
when "Workarea::Pricing::Price"
|
|
20
|
+
[model.sku.class.name, model.sku.id]
|
|
21
|
+
else
|
|
22
|
+
[model.class.name, model.id]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def perform(class_name, id)
|
|
27
|
+
product, skus =
|
|
28
|
+
if class_name == "Workarea::Catalog::Product"
|
|
29
|
+
prod = Catalog::Product.find(id)
|
|
30
|
+
[prod, prod.skus]
|
|
31
|
+
else
|
|
32
|
+
[Catalog::Product.find_by_sku(id), [id]]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
return unless product.present?
|
|
36
|
+
|
|
37
|
+
inventory = Inventory::Collection.new product.skus
|
|
38
|
+
pricing = Inventory::Collection.new product.skus
|
|
39
|
+
|
|
40
|
+
listrak_products = skus.map do |sku|
|
|
41
|
+
Listrak::Models::ProductForm.new product,
|
|
42
|
+
pricing_sku: pricing.for_sku(sku),
|
|
43
|
+
inventory_sku: inventory.for_sku(sku)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
Workarea::Listrak.data.products.import(listrak_products)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class SubscribeEmailSignup
|
|
4
|
+
include Sidekiq::Worker
|
|
5
|
+
include Sidekiq::CallbacksWorker
|
|
6
|
+
|
|
7
|
+
sidekiq_options(
|
|
8
|
+
enqueue_on: {
|
|
9
|
+
Email::Signup => :create
|
|
10
|
+
},
|
|
11
|
+
queue: "low",
|
|
12
|
+
retry: true
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
def perform(id)
|
|
16
|
+
signup = Email::Signup.find id
|
|
17
|
+
list_id = Listrak.configuration.default_list_id
|
|
18
|
+
event_ids = Array.wrap(Listrak.configuration.external_event_ids).to_csv(row_sep: nil).presence
|
|
19
|
+
|
|
20
|
+
contact = Listrak::Models::ContactForm.new(
|
|
21
|
+
email: signup.email,
|
|
22
|
+
subscription_state: 'Subscribed'
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
options = {
|
|
26
|
+
overrideUnsubscribe: true,
|
|
27
|
+
eventIds: event_ids
|
|
28
|
+
}.compact
|
|
29
|
+
|
|
30
|
+
Listrak.email.contacts.upsert list_id, contact, options
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class UnsubscribeEmailSignup
|
|
4
|
+
include Sidekiq::Worker
|
|
5
|
+
include Sidekiq::CallbacksWorker
|
|
6
|
+
|
|
7
|
+
sidekiq_options(
|
|
8
|
+
enqueue_on: {
|
|
9
|
+
Email::Signup => :destroy,
|
|
10
|
+
with: -> { [email] }
|
|
11
|
+
},
|
|
12
|
+
queue: "low",
|
|
13
|
+
retry: true
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
def perform(email)
|
|
17
|
+
contact = Listrak::Models::ContactForm.new(
|
|
18
|
+
email: email,
|
|
19
|
+
subscription_state: 'Unsubscribed'
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
list_id = Listrak.configuration.default_list_id
|
|
23
|
+
Listrak.email.contacts.upsert list_id, contact, overrideUnsubscribe: true
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/bin/rails
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# This command will automatically be run when you run "rails" with Rails gems
|
|
3
|
+
# installed from the root of your application.
|
|
4
|
+
|
|
5
|
+
ENGINE_ROOT = File.expand_path("../..", __FILE__)
|
|
6
|
+
ENGINE_PATH = File.expand_path("../../lib/workarea/listrak/engine", __FILE__)
|
|
7
|
+
|
|
8
|
+
# Set up gems listed in the Gemfile.
|
|
9
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
|
|
10
|
+
require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
|
|
11
|
+
|
|
12
|
+
require "action_controller/railtie"
|
|
13
|
+
require "action_view/railtie"
|
|
14
|
+
require "action_mailer/railtie"
|
|
15
|
+
require "rails/test_unit/railtie"
|
|
16
|
+
require "sprockets/railtie"
|
|
17
|
+
|
|
18
|
+
require "rails/engine/commands"
|
data/bin/rake
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# This file was generated by Bundler.
|
|
4
|
+
#
|
|
5
|
+
# The application 'rake' is installed as part of a gem, and
|
|
6
|
+
# this file is here to facilitate running it.
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require "pathname"
|
|
10
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
11
|
+
Pathname.new(__FILE__).realpath)
|
|
12
|
+
|
|
13
|
+
require "rubygems"
|
|
14
|
+
require "bundler/setup"
|
|
15
|
+
|
|
16
|
+
load Gem.bin_path("rake", "rake")
|
data/bin/rspec
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# This file was generated by Bundler.
|
|
4
|
+
#
|
|
5
|
+
# The application 'rspec' is installed as part of a gem, and
|
|
6
|
+
# this file is here to facilitate running it.
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require "pathname"
|
|
10
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
11
|
+
Pathname.new(__FILE__).realpath)
|
|
12
|
+
|
|
13
|
+
require "rubygems"
|
|
14
|
+
require "bundler/setup"
|
|
15
|
+
|
|
16
|
+
load Gem.bin_path("rspec-core", "rspec")
|
data/bin/rubocop
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# This file was generated by Bundler.
|
|
4
|
+
#
|
|
5
|
+
# The application 'rubocop' is installed as part of a gem, and
|
|
6
|
+
# this file is here to facilitate running it.
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require "pathname"
|
|
10
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
11
|
+
Pathname.new(__FILE__).realpath)
|
|
12
|
+
|
|
13
|
+
require "rubygems"
|
|
14
|
+
require "bundler/setup"
|
|
15
|
+
|
|
16
|
+
load Gem.bin_path("rubocop", "rubocop")
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Analytics adapter for Listrak tag management
|
|
2
|
+
Workarea::Plugin.append_javascripts(
|
|
3
|
+
"storefront.modules",
|
|
4
|
+
"workarea/storefront/listrak/adapters/listrak_adapter",
|
|
5
|
+
"workarea/storefront/listrak/modules/listrak"
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
# Pass configuration for the Listrak adapter to the client-side
|
|
9
|
+
Workarea::Plugin.append_javascripts(
|
|
10
|
+
"storefront.config",
|
|
11
|
+
"workarea/storefront/listrak/listrak_config"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
Workarea::Plugin.append_javascripts(
|
|
15
|
+
"admin.modules",
|
|
16
|
+
"workarea/admin/modules/listrak/list_events_select"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
# Tracking pixel for checkout conversion tracking
|
|
20
|
+
Workarea::Plugin.append_javascripts(
|
|
21
|
+
"storefront.checkout_confirmation",
|
|
22
|
+
"workarea/storefront/checkouts/listrak"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
Workarea.append_partials(
|
|
26
|
+
"admin.settings_menu",
|
|
27
|
+
"workarea/admin/shared/listrak_configuration_link"
|
|
28
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
en:
|
|
2
|
+
workarea:
|
|
3
|
+
admin:
|
|
4
|
+
listrak_configuration:
|
|
5
|
+
edit:
|
|
6
|
+
flash_messages:
|
|
7
|
+
updated: Listrak configuration has been updated
|
|
8
|
+
save_error: There was a problem updating the configuration
|
|
9
|
+
title: Listrak Configuration
|
|
10
|
+
default_list: Default List
|
|
11
|
+
external_events: External Events
|
|
12
|
+
events_select_placeholder: Choose external events
|
|
13
|
+
event_itds_tooltip: External event ids to trigger when subscribing the customer
|
|
14
|
+
button: Save Listrak Configuration
|
|
15
|
+
shared:
|
|
16
|
+
primary_nav:
|
|
17
|
+
listrak_configuration_title: Listrak Configuration
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Workarea::Admin::Engine.routes.draw do
|
|
2
|
+
scope '(:locale)', constraints: Workarea::I18n.routes_constraint do
|
|
3
|
+
namespace :listrak do
|
|
4
|
+
resource :configuration, only: [:edit, :update]
|
|
5
|
+
resources :lists, only: [] do
|
|
6
|
+
resources :events, only: :index
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
# Generate new Message classes for your host app (or plugin).
|
|
4
|
+
class MessageGenerator < Rails::Generators::NamedBase
|
|
5
|
+
source_root File.expand_path("../templates", __FILE__)
|
|
6
|
+
|
|
7
|
+
def copy_agent
|
|
8
|
+
template(
|
|
9
|
+
"message.rb.erb",
|
|
10
|
+
"app/messages/workarea/#{file_name}_message.rb"
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
class <%= class_name %>Message
|
|
3
|
+
include Listrak::TransactionalMessage
|
|
4
|
+
|
|
5
|
+
# message_id 45678
|
|
6
|
+
# message_attributes(
|
|
7
|
+
# name: 12345
|
|
8
|
+
# )
|
|
9
|
+
#
|
|
10
|
+
# def initialize(order)
|
|
11
|
+
# @order = order
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
# def name
|
|
15
|
+
# "#{@order.first_name} #{@order.last_name}"
|
|
16
|
+
# end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def email_address
|
|
21
|
+
# TODO
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
module Analytics
|
|
4
|
+
# Shorthand for analytics module specific configuration.
|
|
5
|
+
def self.config
|
|
6
|
+
Workarea.config.listrak.analytics
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.javascript_config
|
|
10
|
+
{
|
|
11
|
+
merchantId: config[:merchant_id],
|
|
12
|
+
emailIds: config[:email_capture_ids]
|
|
13
|
+
}.compact.to_json
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class BogusDataApi
|
|
4
|
+
class ProxyClient
|
|
5
|
+
attr_reader :client_name, :client
|
|
6
|
+
|
|
7
|
+
def initialize(client_name, client)
|
|
8
|
+
@client_name = client_name
|
|
9
|
+
@client = client
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def method_missing(method, *args)
|
|
13
|
+
if client.respond_to?(method)
|
|
14
|
+
if BogusDataApi.store_requests
|
|
15
|
+
BogusDataApi.requests[client_name][method] << args
|
|
16
|
+
end
|
|
17
|
+
client.send(method, *args)
|
|
18
|
+
else
|
|
19
|
+
super
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def respond_to_missing?(method, include_all = false)
|
|
24
|
+
client.respond_to?(method) || super
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
# @!visibility private
|
|
4
|
+
class BogusDataApi
|
|
5
|
+
require 'workarea/listrak/bogus_data_api/proxy_client'
|
|
6
|
+
require 'workarea/listrak/bogus_data_api/products'
|
|
7
|
+
require 'workarea/listrak/bogus_data_api/customers'
|
|
8
|
+
require 'workarea/listrak/bogus_data_api/orders'
|
|
9
|
+
|
|
10
|
+
thread_cattr_accessor :requests, :store_requests
|
|
11
|
+
|
|
12
|
+
def self.reset_requests!
|
|
13
|
+
self.requests = Hash.new do |client_hash, client_class|
|
|
14
|
+
client_hash[client_class] = Hash.new do |method_hash, method_name|
|
|
15
|
+
method_hash[method_name] = []
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.total_request_count
|
|
21
|
+
self.requests.sum do |client, method_calls|
|
|
22
|
+
method_calls.sum { |_method, calls| calls.size }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
self.store_requests = false
|
|
27
|
+
self.reset_requests!
|
|
28
|
+
|
|
29
|
+
def method_missing(method)
|
|
30
|
+
client_class = client(method)
|
|
31
|
+
|
|
32
|
+
if client_class
|
|
33
|
+
ProxyClient.new(method, client_class.new)
|
|
34
|
+
else
|
|
35
|
+
super
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def client(client_name)
|
|
42
|
+
BogusDataApi.const_get(client_name.to_s.camelize) rescue nil
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class BogusEmailApi::Events
|
|
4
|
+
def all(_list_id)
|
|
5
|
+
events = [
|
|
6
|
+
{
|
|
7
|
+
"eventId" => 12714,
|
|
8
|
+
"eventName" => "Test",
|
|
9
|
+
"eventGroupId" => 0,
|
|
10
|
+
"status" => "Active"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"eventId" => 12715,
|
|
14
|
+
"eventName" => "footer signup",
|
|
15
|
+
"eventGroupId" => 0,
|
|
16
|
+
"status" => "Active"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
events.map { |event| Listrak::Models::Event.new event }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class BogusEmailApi::Lists
|
|
4
|
+
def all
|
|
5
|
+
lists = [
|
|
6
|
+
{
|
|
7
|
+
"listId" => 349956,
|
|
8
|
+
"listName" => "My First List",
|
|
9
|
+
"folderId" => 0,
|
|
10
|
+
"ipPoolId" => 11,
|
|
11
|
+
"bounceDomainAlias" => "",
|
|
12
|
+
"bounceHandling" => "Standard",
|
|
13
|
+
"bounceUnsubscribeCount" => 5,
|
|
14
|
+
"createDate" => "2015-08-31T16:02:41.65",
|
|
15
|
+
"enableBrowserLink" => false,
|
|
16
|
+
"enableDoubleOptIn" => false,
|
|
17
|
+
"enableDynamicContent" => false,
|
|
18
|
+
"enableGoogleAnalytics" => false,
|
|
19
|
+
"enableInternationalization" => false,
|
|
20
|
+
"enableListHygiene" => true,
|
|
21
|
+
"enableListRemovalHeader" => true,
|
|
22
|
+
"enableListRemovalLink" => true,
|
|
23
|
+
"enableListrakAnalytics" => false,
|
|
24
|
+
"enableSpamScorePersonalization" => false,
|
|
25
|
+
"enableToNamePersonalization" => false,
|
|
26
|
+
"fromEmail" => "",
|
|
27
|
+
"fromName" => "",
|
|
28
|
+
"googleTrackingDomains" => [],
|
|
29
|
+
"linkDomainAlias" => "",
|
|
30
|
+
"mediaDomainAlias" => ""
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"listId" => 349984,
|
|
34
|
+
"listName" => "gem-testing",
|
|
35
|
+
"folderId" => 0,
|
|
36
|
+
"ipPoolId" => 11,
|
|
37
|
+
"bounceDomainAlias" => "",
|
|
38
|
+
"bounceHandling" => "Standard",
|
|
39
|
+
"bounceUnsubscribeCount" => 5,
|
|
40
|
+
"createDate" => "2015-09-02T14:42:38.91",
|
|
41
|
+
"enableBrowserLink" => false,
|
|
42
|
+
"enableDoubleOptIn" => false,
|
|
43
|
+
"enableDynamicContent" => false,
|
|
44
|
+
"enableGoogleAnalytics" => false,
|
|
45
|
+
"enableInternationalization" => false,
|
|
46
|
+
"enableListHygiene" => true,
|
|
47
|
+
"enableListRemovalHeader" => true,
|
|
48
|
+
"enableListRemovalLink" => true,
|
|
49
|
+
"enableListrakAnalytics" => false,
|
|
50
|
+
"enableSpamScorePersonalization" => false,
|
|
51
|
+
"enableToNamePersonalization" => false,
|
|
52
|
+
"fromEmail" => "mac@weblinc.com",
|
|
53
|
+
"fromName" => "WebLinc Developer",
|
|
54
|
+
"googleTrackingDomains" => [],
|
|
55
|
+
"linkDomainAlias" => "",
|
|
56
|
+
"mediaDomainAlias" => ""
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
lists.map { |list| Listrak::Models::List.new list }
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Workarea
|
|
2
|
+
module Listrak
|
|
3
|
+
class BogusEmailApi
|
|
4
|
+
class ProxyClient
|
|
5
|
+
attr_reader :client_name, :client
|
|
6
|
+
|
|
7
|
+
def initialize(client_name, client)
|
|
8
|
+
@client_name = client_name
|
|
9
|
+
@client = client
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def method_missing(method, *args)
|
|
13
|
+
if client.respond_to?(method)
|
|
14
|
+
if BogusEmailApi.store_requests
|
|
15
|
+
BogusEmailApi.requests[client_name][method] << args
|
|
16
|
+
end
|
|
17
|
+
client.send(method, *args)
|
|
18
|
+
else
|
|
19
|
+
super
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def respond_to_missing?(method, include_all = false)
|
|
24
|
+
client.respond_to?(method) || super
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|