workarea-segment_analytics 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/.eslintrc +35 -0
- data/.gitignore +19 -0
- data/.rubocop.yml +8 -0
- data/CHANGELOG.md +47 -0
- data/Gemfile +16 -0
- data/README.md +91 -0
- data/Rakefile +60 -0
- data/app/assets/javascripts/workarea/storefront/segment_analytics/dependencies/analytics.js.erb +3 -0
- data/app/assets/javascripts/workarea/storefront/segment_analytics/modules/login_events.js +40 -0
- data/app/assets/javascripts/workarea/storefront/segment_analytics/modules/segment_analytics.js +47 -0
- data/app/assets/javascripts/workarea/storefront/segment_analytics/modules/segment_analytics_adapter.js +235 -0
- data/app/assets/stylesheets/segment_analytics/.keep +0 -0
- data/app/helpers/.keep +0 -0
- data/app/helpers/workarea/storefront/segment_analytics_analytics_helper.rb +40 -0
- data/app/views/.keep +0 -0
- data/app/views/workarea/storefront/users/_current_user_segment_analytics.json.jbuilder +6 -0
- data/bin/rails +20 -0
- data/config/initializers/appends.rb +18 -0
- data/config/initializers/workarea.rb +1 -0
- data/config/routes.rb +2 -0
- data/lib/tasks/segment_analytics_tasks.rake +4 -0
- data/lib/workarea/segment_analytics.rb +23 -0
- data/lib/workarea/segment_analytics/engine.rb +14 -0
- data/lib/workarea/segment_analytics/version.rb +5 -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/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 +38 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/bin/yarn +11 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/config/application.rb +29 -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 +54 -0
- data/test/dummy/config/environments/production.rb +91 -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 +14 -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/db/seeds.rb +2 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/package.json +5 -0
- data/test/javascripts/fixtures/payloads.js +232 -0
- data/test/javascripts/fixtures/stubs.js +56 -0
- data/test/javascripts/segment_analytics_spec.js +311 -0
- data/test/javascripts/spec_helper.js +12 -0
- data/test/teaspoon_env.rb +6 -0
- data/test/test_helper.rb +10 -0
- data/workarea-segment_analytics.gemspec +19 -0
- metadata +138 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b63311948bf8b091926cca0496c0502f4bd7093a94f11667a251183711b993a4
|
4
|
+
data.tar.gz: f7739b2422619785b8934267bf3c39ae53a146a3b481484c2c95900fd19c7215
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8f03ef7cbae1463b91c7e2d545530310d4e551362f8da36584fdc05bf015b73eed4c3328b8033e4752d85ccc61e0714cd9ce9ff3a1e3e2670085171146179713
|
7
|
+
data.tar.gz: 3ff6a1baaac585224810578e11d5a38f5a01924dc579513af50576163f608aeda66ac8f0603d8ac1232ef79685310361d274796d8faf1ff65b0e72f8bb3152b5
|
data/.eslintrc
ADDED
@@ -0,0 +1,35 @@
|
|
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
|
+
}
|
35
|
+
}
|
data/.gitignore
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
.bundle/
|
2
|
+
log/*.log
|
3
|
+
pkg/
|
4
|
+
test/dummy/db/*.sqlite3
|
5
|
+
test/dummy/db/*.sqlite3-journal
|
6
|
+
test/dummy/log/*.log
|
7
|
+
test/dummy/tmp/
|
8
|
+
.DS_Store
|
9
|
+
.byebug_history
|
10
|
+
.bundle/
|
11
|
+
.sass-cache/
|
12
|
+
Gemfile.lock
|
13
|
+
pkg/
|
14
|
+
test/dummy/tmp/
|
15
|
+
test/dummy/public/
|
16
|
+
log/*.log
|
17
|
+
test/dummy/log/*.log
|
18
|
+
test/dummy/db/*.sqlite3
|
19
|
+
test/dummy/db/*.sqlite3-journal
|
data/.rubocop.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
Workarea Segment Analytics 1.0.2 (2019-08-21)
|
2
|
+
--------------------------------------------------------------------------------
|
3
|
+
|
4
|
+
* Open Source!
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
Workarea Segment Analytics 1.0.1 (2019-03-19)
|
9
|
+
--------------------------------------------------------------------------------
|
10
|
+
|
11
|
+
* Update for v3.4 compatibility
|
12
|
+
|
13
|
+
* Add CI build scripts
|
14
|
+
* Update gemfile
|
15
|
+
* Add default rubocop.yml configuration
|
16
|
+
* Update ESLint configuration and fix some linting errors
|
17
|
+
* Add keepfile for test/dummy/tmp/screenshots
|
18
|
+
|
19
|
+
SEGMENT-6
|
20
|
+
Jake Beresford
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
Workarea Segment Analytics 1.0.0 (2018-01-11)
|
25
|
+
--------------------------------------------------------------------------------
|
26
|
+
|
27
|
+
To clean up your release notes, add your project's Jira key to the Changelog Rake task!
|
28
|
+
* Bump version for v1.0.0 release
|
29
|
+
Jake Beresford
|
30
|
+
|
31
|
+
To clean up your release notes, add your project's Jira key to the Changelog Rake task!
|
32
|
+
* Fetch teaspoon stubs after renaming plugin
|
33
|
+
|
34
|
+
SEGMENT-5
|
35
|
+
Jake Beresford
|
36
|
+
|
37
|
+
To clean up your release notes, add your project's Jira key to the Changelog Rake task!
|
38
|
+
* Rename plugin to workarea-segment_analytics
|
39
|
+
|
40
|
+
This plugin was renamed due to a name conflict with the Workarea::Segment class in workarea-segmentation.
|
41
|
+
|
42
|
+
SEGMENT-4
|
43
|
+
Jake Beresford
|
44
|
+
|
45
|
+
|
46
|
+
Workarea Segment 0.1.0 (2017-10-13)
|
47
|
+
--------------------------------------------------------------------------------
|
data/Gemfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Declare your gem's dependencies in segment_analytics.gemspec.
|
4
|
+
# Bundler will treat runtime dependencies like base dependencies, and
|
5
|
+
# development dependencies will be added by default to the :development group.
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
# Declare any dependencies that are still in development here instead of in
|
9
|
+
# your gemspec. These might include edge Rails or gems from your path or
|
10
|
+
# Git. Remember to move these dependencies to your gemspec before releasing
|
11
|
+
# your gem to rubygems.org.
|
12
|
+
|
13
|
+
# To use a debugger
|
14
|
+
# gem 'byebug', group: [:development, :test]
|
15
|
+
|
16
|
+
gem 'workarea', source: 'https://gems.weblinc.com'
|
data/README.md
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
Workarea Segment Analytics
|
2
|
+
================================================================================
|
3
|
+
|
4
|
+
Segment plugin for the Workarea platform.
|
5
|
+
|
6
|
+
Integration with segment https://segment.com/
|
7
|
+
API docs: https://segment.com/docs/sources/
|
8
|
+
|
9
|
+
This plugin implements segment's client side tracking API via their 'analytics.js' script.
|
10
|
+
Before installing and configuring this plugin you should set up & configure your segment account with a Website / Javascript source.
|
11
|
+
|
12
|
+
Configuration
|
13
|
+
--------------------------------------------------------------------------------
|
14
|
+
|
15
|
+
To configure segment in your application you must add the segment write key to your application secrets.
|
16
|
+
You can find the write key by logging in to the segment admin and visiting this URL https://segment.com/weblinc/sources/javascript/settings/keys
|
17
|
+
|
18
|
+
segment_analytics:
|
19
|
+
write_key: alongstringgoeshere
|
20
|
+
|
21
|
+
You will also need to update your application views to include an additional analytics payload for checkout started. To do this add the checkoutStarted event & payload to any links to checkout_path, for example in your cart/show.html.haml view.
|
22
|
+
|
23
|
+
snippet to add:
|
24
|
+
data: { analytics: checkout_started_analytics_data(@cart).to_json
|
25
|
+
|
26
|
+
#### Compatability with other plugins
|
27
|
+
|
28
|
+
If you are using the workarea-share plugin you should also add the following to your share links in workarea/storefront/shares/_share_buttons.html.haml
|
29
|
+
|
30
|
+
data: { analytics: share_analytics_data('*share service name goes here*', share_url, message).to_json }
|
31
|
+
|
32
|
+
example:
|
33
|
+
|
34
|
+
data: { analytics: share_analytics_data('facebook', share_url, message).to_json }
|
35
|
+
|
36
|
+
Testing and debugging
|
37
|
+
--------------------------------------------------------------------------------
|
38
|
+
To confirm this plugin is functioning you should check the JS console in development mode, the
|
39
|
+
adapter for this plugin includes a logger which should show multiple console logs in your browser's JS console.
|
40
|
+
All segment logger events begin with 'Segment:'
|
41
|
+
|
42
|
+
Once you have verified there are events firing in the console you should confirm that the data received by segment is error-free.
|
43
|
+
Segment provide an excellent debugger via their admin console, log in and visit this URL: https://segment.com/weblinc/sources/javascript/debugger
|
44
|
+
|
45
|
+
|
46
|
+
Getting Started
|
47
|
+
--------------------------------------------------------------------------------
|
48
|
+
|
49
|
+
This gem contains a rails engine that must be mounted onto a host Rails application.
|
50
|
+
|
51
|
+
To access Workarea gems and source code, you must be an employee of WebLinc or a licensed retailer or partner.
|
52
|
+
|
53
|
+
Workarea gems are hosted privately at https://gems.weblinc.com/.
|
54
|
+
You must have individual or team credentials to install gems from this server. Add your gems server credentials to Bundler:
|
55
|
+
|
56
|
+
bundle config gems.weblinc.com my_username:my_password
|
57
|
+
|
58
|
+
Or set the appropriate environment variable in a shell startup file:
|
59
|
+
|
60
|
+
export BUNDLE_GEMS__WEBLINC__COM='my_username:my_password'
|
61
|
+
|
62
|
+
Then add the gem to your application's Gemfile specifying the source:
|
63
|
+
|
64
|
+
# ...
|
65
|
+
gem 'workarea-segment', source: 'https://gems.weblinc.com'
|
66
|
+
# ...
|
67
|
+
|
68
|
+
Or use a source block:
|
69
|
+
|
70
|
+
# ...
|
71
|
+
source 'https://gems.weblinc.com' do
|
72
|
+
gem 'workarea-segment'
|
73
|
+
end
|
74
|
+
# ...
|
75
|
+
|
76
|
+
Update your application's bundle.
|
77
|
+
|
78
|
+
cd path/to/application
|
79
|
+
bundle
|
80
|
+
|
81
|
+
Workarea Platform Documentation
|
82
|
+
--------------------------------------------------------------------------------
|
83
|
+
|
84
|
+
See [http://developer.weblinc.com](http://developer.weblinc.com) for Workarea platform documentation.
|
85
|
+
|
86
|
+
Copyright & Licensing
|
87
|
+
--------------------------------------------------------------------------------
|
88
|
+
|
89
|
+
Copyright WebLinc 2017. All rights reserved.
|
90
|
+
|
91
|
+
For licensing, contact sales@workarea.com.
|
data/Rakefile
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
9
|
+
rdoc.rdoc_dir = 'rdoc'
|
10
|
+
rdoc.title = 'Segment Analytics'
|
11
|
+
rdoc.options << '--line-numbers'
|
12
|
+
rdoc.rdoc_files.include('README.md')
|
13
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
14
|
+
end
|
15
|
+
|
16
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
17
|
+
load 'rails/tasks/engine.rake'
|
18
|
+
load 'rails/tasks/statistics.rake'
|
19
|
+
load 'workarea/changelog.rake'
|
20
|
+
|
21
|
+
require 'rake/testtask'
|
22
|
+
Rake::TestTask.new(:test) do |t|
|
23
|
+
t.libs << 'lib'
|
24
|
+
t.libs << 'test'
|
25
|
+
t.pattern = 'test/**/*_test.rb'
|
26
|
+
t.verbose = false
|
27
|
+
end
|
28
|
+
task default: :test
|
29
|
+
|
30
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
31
|
+
require 'workarea/segment_analytics/version'
|
32
|
+
|
33
|
+
desc "Release version #{Workarea::SegmentAnalytics::VERSION} of the gem"
|
34
|
+
task :release do
|
35
|
+
host = "https://#{ENV['BUNDLE_GEMS__WEBLINC__COM']}@gems.weblinc.com"
|
36
|
+
|
37
|
+
#Rake::Task['workarea:changelog'].execute
|
38
|
+
#system 'git add CHANGELOG.md'
|
39
|
+
#system 'git commit -m "Update CHANGELOG"'
|
40
|
+
#system 'git push origin HEAD'
|
41
|
+
|
42
|
+
system "git tag -a v#{Workarea::SegmentAnalytics::VERSION} -m 'Tagging #{Workarea::SegmentAnalytics::VERSION}'"
|
43
|
+
system 'git push --tags'
|
44
|
+
|
45
|
+
system "gem build workarea-segment_analytics.gemspec"
|
46
|
+
system "gem push workarea-segment_analytics-#{Workarea::SegmentAnalytics::VERSION}.gem"
|
47
|
+
system "gem push workarea-segment_analytics-#{Workarea::SegmentAnalytics::VERSION}.gem --host #{host}"
|
48
|
+
system "rm workarea-segment_analytics-#{Workarea::SegmentAnalytics::VERSION}.gem"
|
49
|
+
end
|
50
|
+
|
51
|
+
desc 'Run the JavaScript tests'
|
52
|
+
ENV['TEASPOON_RAILS_ENV'] = File.expand_path('../test/dummy/config/environment', __FILE__)
|
53
|
+
task teaspoon: 'app:teaspoon'
|
54
|
+
|
55
|
+
desc 'Start a server at http://localhost:3000/teaspoon for JavaScript tests'
|
56
|
+
task :teaspoon_server do
|
57
|
+
Dir.chdir("test/dummy")
|
58
|
+
teaspoon_env = File.expand_path('../test/teaspoon_env.rb', __FILE__)
|
59
|
+
system "RAILS_ENV=test TEASPOON_ENV=#{teaspoon_env} rails s"
|
60
|
+
end
|
data/app/assets/javascripts/workarea/storefront/segment_analytics/dependencies/analytics.js.erb
ADDED
@@ -0,0 +1,3 @@
|
|
1
|
+
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("SegmentAnalytics snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"cdn.segment_analytics.com/analytics.js/v1/"+t+"/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="4.0.0";
|
2
|
+
analytics.load('<%= Workarea::SegmentAnalytics.write_key %>');
|
3
|
+
}}();
|
@@ -0,0 +1,40 @@
|
|
1
|
+
/**
|
2
|
+
* @namespace WORKAREA.loginEvents
|
3
|
+
*/
|
4
|
+
WORKAREA.registerModule('loginEvents', (function () {
|
5
|
+
'use strict';
|
6
|
+
|
7
|
+
var userStateIsSet = function () {
|
8
|
+
return !_.isEmpty(window.sessionStorage.getItem('segmentAnalyticsLoginState'));
|
9
|
+
},
|
10
|
+
|
11
|
+
setUserState = function (userData) {
|
12
|
+
window.sessionStorage.setItem('segmentAnalyticsLoginState', userData.logged_in);
|
13
|
+
},
|
14
|
+
|
15
|
+
compare = function (userData) {
|
16
|
+
if (userData.logged_in.toString() !== window.sessionStorage.getItem('segmentAnalyticsLoginState')) {
|
17
|
+
if ( userData.logged_in ) {
|
18
|
+
WORKAREA.analytics.fireCallback('justLoggedIn');
|
19
|
+
} else {
|
20
|
+
WORKAREA.analytics.fireCallback('justLoggedOut');
|
21
|
+
}
|
22
|
+
|
23
|
+
setUserState(userData);
|
24
|
+
}
|
25
|
+
},
|
26
|
+
|
27
|
+
setupCallbacks = function () {
|
28
|
+
if ( userStateIsSet() ) {
|
29
|
+
WORKAREA.currentUser.gettingUserData.done(compare);
|
30
|
+
} else {
|
31
|
+
WORKAREA.currentUser.gettingUserData.done(setUserState);
|
32
|
+
}
|
33
|
+
},
|
34
|
+
|
35
|
+
init = _.once(setupCallbacks);
|
36
|
+
|
37
|
+
return {
|
38
|
+
init: init
|
39
|
+
};
|
40
|
+
}()));
|
data/app/assets/javascripts/workarea/storefront/segment_analytics/modules/segment_analytics.js
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
/**
|
2
|
+
* @namespace WORKAREA.segmentAnalytics
|
3
|
+
*/
|
4
|
+
WORKAREA.registerModule('segmentAnalytics', (function () {
|
5
|
+
'use strict';
|
6
|
+
/*global analytics*/
|
7
|
+
|
8
|
+
var logger = function () {
|
9
|
+
if (WORKAREA.analytics.debug && window.console) {
|
10
|
+
window.console.log('SegmentAnalytics: ', Array.prototype.slice.call(arguments));
|
11
|
+
}
|
12
|
+
},
|
13
|
+
|
14
|
+
track = function (eventType, data) {
|
15
|
+
analytics.track(eventType, data);
|
16
|
+
logger('Track', eventType, data);
|
17
|
+
},
|
18
|
+
|
19
|
+
reset = function () {
|
20
|
+
analytics.reset();
|
21
|
+
logger('Reset');
|
22
|
+
},
|
23
|
+
|
24
|
+
identify = function (userId, data) {
|
25
|
+
analytics.identify(userId, data);
|
26
|
+
logger('Identify', userId, data);
|
27
|
+
},
|
28
|
+
|
29
|
+
page = function (payload) {
|
30
|
+
if (_.isUndefined(payload)) {
|
31
|
+
analytics.page();
|
32
|
+
} else if (payload.category) {
|
33
|
+
analytics.page(payload.category, payload.name);
|
34
|
+
} else {
|
35
|
+
analytics.page(payload.name);
|
36
|
+
}
|
37
|
+
|
38
|
+
logger('Page', payload);
|
39
|
+
};
|
40
|
+
|
41
|
+
return {
|
42
|
+
track: track,
|
43
|
+
page: page,
|
44
|
+
reset: reset,
|
45
|
+
identify: identify
|
46
|
+
};
|
47
|
+
}()));
|
@@ -0,0 +1,235 @@
|
|
1
|
+
/**
|
2
|
+
* @namespace WORKAREA.segmentAnalytics
|
3
|
+
* @requires WORKAREA.currentUser
|
4
|
+
*
|
5
|
+
* 1. userData.checkout_id and order.id are the same number from
|
6
|
+
* different sources. interchangable with cart_id in workarea
|
7
|
+
*
|
8
|
+
* 2. analytics_helper refers to these differently depending on whether
|
9
|
+
* order_item_analytics_data or product_analytics_data is used.
|
10
|
+
*/
|
11
|
+
WORKAREA.analytics.registerAdapter('segmentAnalyticsAdapter', function () {
|
12
|
+
'use strict';
|
13
|
+
|
14
|
+
var pageViewSent = false,
|
15
|
+
|
16
|
+
/**
|
17
|
+
* PageView event functions
|
18
|
+
*/
|
19
|
+
|
20
|
+
isLoaded = function () {
|
21
|
+
var scripts = _.toArray(document.scripts),
|
22
|
+
|
23
|
+
loaded = _.some(scripts, function (script) {
|
24
|
+
return script.src.match(/segment_analytics\.com.+analytics.+\.js/i);
|
25
|
+
});
|
26
|
+
|
27
|
+
return loaded;
|
28
|
+
},
|
29
|
+
|
30
|
+
tryPageView = function (payload) {
|
31
|
+
if (pageViewSent) { return; }
|
32
|
+
|
33
|
+
if (isLoaded()) {
|
34
|
+
WORKAREA.segmentAnalytics.page(payload);
|
35
|
+
pageViewSent = true;
|
36
|
+
} else {
|
37
|
+
window.setTimeout(tryPageView(payload), 500);
|
38
|
+
}
|
39
|
+
},
|
40
|
+
|
41
|
+
/**
|
42
|
+
* Data manipulation functions
|
43
|
+
*/
|
44
|
+
|
45
|
+
productData = function(product) {
|
46
|
+
var data = {
|
47
|
+
category: product.category,
|
48
|
+
name: product.name || product.product_name, /* [2] */
|
49
|
+
position: product.position,
|
50
|
+
price: product.price,
|
51
|
+
product_id: product.product_id || product.id, /* [2] */
|
52
|
+
quantity: product.quantity,
|
53
|
+
variant: product.sku
|
54
|
+
};
|
55
|
+
|
56
|
+
return _.omit(data, _.isEmpty);
|
57
|
+
},
|
58
|
+
|
59
|
+
joinPromoCodes = function(promo_codes) {
|
60
|
+
if (Array.isArray(promo_codes)){
|
61
|
+
return promo_codes.join(',');
|
62
|
+
}
|
63
|
+
return promo_codes;
|
64
|
+
},
|
65
|
+
|
66
|
+
orderData = function (order) {
|
67
|
+
var data = {
|
68
|
+
affiliation: order.site_name,
|
69
|
+
checkout_id: order.id, /* [1] */
|
70
|
+
discount: joinPromoCodes(order.promo_codes),
|
71
|
+
payment_method: order.tenders,
|
72
|
+
revenue: order.total_price,
|
73
|
+
shipping: order.shipping_total,
|
74
|
+
tax: order.tax_total
|
75
|
+
};
|
76
|
+
|
77
|
+
|
78
|
+
if ( !_.isEmpty(order.items) ) { /* [2] */
|
79
|
+
data.products = _.map(order.items, productData);
|
80
|
+
} else if ( !_.isEmpty(order.products) ) { /* [2] */
|
81
|
+
data.products = _.map(order.products, productData);
|
82
|
+
}
|
83
|
+
|
84
|
+
return _.omit(data, _.isEmpty);
|
85
|
+
};
|
86
|
+
|
87
|
+
return {
|
88
|
+
'pageView': tryPageView,
|
89
|
+
|
90
|
+
'categoryView': function (payload) {
|
91
|
+
// Send pageview with additional payload data
|
92
|
+
tryPageView({
|
93
|
+
category: payload.name
|
94
|
+
});
|
95
|
+
|
96
|
+
WORKAREA.segmentAnalytics.track('Product Category Viewed', {
|
97
|
+
filters: payload.filters,
|
98
|
+
name: payload.name,
|
99
|
+
page: payload.page,
|
100
|
+
sort: payload.sort
|
101
|
+
});
|
102
|
+
},
|
103
|
+
|
104
|
+
'searchResultsView': function (payload) {
|
105
|
+
WORKAREA.segmentAnalytics.track('Products Searched', {
|
106
|
+
query: payload.terms
|
107
|
+
});
|
108
|
+
},
|
109
|
+
|
110
|
+
'productList': function (payload) {
|
111
|
+
var data = {
|
112
|
+
list_id: payload.name,
|
113
|
+
products: _.map(payload.impressions, productData)
|
114
|
+
};
|
115
|
+
|
116
|
+
WORKAREA.segmentAnalytics.track('Product List Viewed', data);
|
117
|
+
},
|
118
|
+
|
119
|
+
'productClick': function (payload) {
|
120
|
+
WORKAREA.segmentAnalytics.track('Product Clicked', productData(payload));
|
121
|
+
},
|
122
|
+
|
123
|
+
'productView': function (payload) {
|
124
|
+
// Send pageview with additional payload data
|
125
|
+
tryPageView({
|
126
|
+
category: payload.category
|
127
|
+
});
|
128
|
+
|
129
|
+
WORKAREA.segmentAnalytics.track('Product Viewed', productData(payload));
|
130
|
+
},
|
131
|
+
|
132
|
+
'addToCart': function (payload) {
|
133
|
+
WORKAREA.currentUser.gettingUserData.done(function(userData){
|
134
|
+
var data = {
|
135
|
+
cart_id: userData.checkout_id /* [1] */
|
136
|
+
};
|
137
|
+
|
138
|
+
_.assign(data, productData(payload));
|
139
|
+
|
140
|
+
WORKAREA.segmentAnalytics.track('Product Added', data);
|
141
|
+
});
|
142
|
+
},
|
143
|
+
|
144
|
+
'removeFromCart': function (payload) {
|
145
|
+
WORKAREA.currentUser.gettingUserData.done(function(userData){
|
146
|
+
var data = {
|
147
|
+
cart_id: userData.checkout_id /* [1] */
|
148
|
+
};
|
149
|
+
|
150
|
+
_.assign(data, productData(payload));
|
151
|
+
|
152
|
+
WORKAREA.segmentAnalytics.track('Product Removed', data);
|
153
|
+
});
|
154
|
+
},
|
155
|
+
|
156
|
+
'cartView': function (payload) {
|
157
|
+
WORKAREA.currentUser.gettingUserData.done(function(userData){
|
158
|
+
var data = {
|
159
|
+
cart_id: userData.checkout_id, /* [1] */
|
160
|
+
products: _.map(payload.items, productData)
|
161
|
+
};
|
162
|
+
|
163
|
+
WORKAREA.segmentAnalytics.track('Cart Viewed', data);
|
164
|
+
WORKAREA.segmentAnalytics.track('Viewed Checkout Step', _.assign({ step: 1 }, data));
|
165
|
+
});
|
166
|
+
},
|
167
|
+
|
168
|
+
'checkoutStarted': function (payload) {
|
169
|
+
var data = orderData(payload);
|
170
|
+
|
171
|
+
WORKAREA.segmentAnalytics.track('Checkout Started', data);
|
172
|
+
},
|
173
|
+
|
174
|
+
'checkoutAddressesView': function (payload) {
|
175
|
+
var data = orderData(payload);
|
176
|
+
|
177
|
+
WORKAREA.segmentAnalytics.track('Checkout Step Completed', _.assign({ step: 1 }, data));
|
178
|
+
WORKAREA.segmentAnalytics.track('Checkout Step Viewed', _.assign({ step: 2 }, data));
|
179
|
+
},
|
180
|
+
|
181
|
+
'checkoutShippingView': function (payload) {
|
182
|
+
var data = orderData(payload);
|
183
|
+
|
184
|
+
WORKAREA.segmentAnalytics.track('Checkout Step Completed', _.assign({ step: 2 }, data));
|
185
|
+
WORKAREA.segmentAnalytics.track('Checkout Step Viewed', _.assign({ step: 3 }, data));
|
186
|
+
},
|
187
|
+
|
188
|
+
'checkoutPaymentView': function (payload) {
|
189
|
+
var data = orderData(payload);
|
190
|
+
|
191
|
+
WORKAREA.segmentAnalytics.track('Checkout Step Completed', _.assign({ step: 3 }, data));
|
192
|
+
WORKAREA.segmentAnalytics.track('Checkout Step Viewed', _.assign({ step: 4 }, data));
|
193
|
+
},
|
194
|
+
|
195
|
+
'checkoutPaymentSelected': function (payload) {
|
196
|
+
var data = orderData(payload);
|
197
|
+
|
198
|
+
WORKAREA.segmentAnalytics.track('Payment Info Entered', _.assign({ step: 4 }, data));
|
199
|
+
},
|
200
|
+
|
201
|
+
'checkoutOrderPlaced': function (payload) {
|
202
|
+
var data = orderData(payload);
|
203
|
+
|
204
|
+
WORKAREA.segmentAnalytics.track('Checkout Step Completed', _.assign({ step: 4 }, data));
|
205
|
+
WORKAREA.segmentAnalytics.track('Order Completed', data);
|
206
|
+
},
|
207
|
+
|
208
|
+
'justLoggedOut': function () {
|
209
|
+
WORKAREA.segmentAnalytics.reset();
|
210
|
+
},
|
211
|
+
|
212
|
+
'justLoggedIn': function () {
|
213
|
+
WORKAREA.currentUser.gettingUserData.done(function (userData){
|
214
|
+
var data = {
|
215
|
+
email: userData.user_email,
|
216
|
+
name: userData.user_name
|
217
|
+
};
|
218
|
+
|
219
|
+
WORKAREA.segmentAnalytics.identify(userData.user_id, data);
|
220
|
+
});
|
221
|
+
},
|
222
|
+
|
223
|
+
'share': function (payload) {
|
224
|
+
var data = {
|
225
|
+
recipient: payload.recipient,
|
226
|
+
share_via: payload.type,
|
227
|
+
share_message: payload.message
|
228
|
+
};
|
229
|
+
|
230
|
+
_.assign(data, productData(payload));
|
231
|
+
|
232
|
+
WORKAREA.segmentAnalytics.track('Product Shared', data);
|
233
|
+
}
|
234
|
+
};
|
235
|
+
});
|