spree_analytics_trackers 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e0b6411079e555367f446b09fa1a87c6d65ae92a91492864063597fda033d168
4
- data.tar.gz: 817b4c0ad4564596b3e38813557d58f3eb68359d9fb388a8e4f65c6f9c6a4f10
3
+ metadata.gz: 502cf1fa8e70cb9ceb4e1b24ec08c257cb5314249e5ab3403aa61ae463fb69fc
4
+ data.tar.gz: 4c44fd4f1c8172a51499a1e4bcef65538e185ad2c8ace20728a05c28e8347542
5
5
  SHA512:
6
- metadata.gz: 5cb572bed798cf004072d91cd33892302fec6a622fabaa03b0b30bbed97af66215450abfd9f99bb41147ad499656611070e9aa475961f931c5fa16dad00782b4
7
- data.tar.gz: b8366a5461585d8f75ff2e6256b9f1b1ea6d5e2f22ae7940aafb9a3d147d63958ecbd8332e8f5ab1728840558d6eb4b2b16f829cf7e93c50f4749047234cc98e
6
+ metadata.gz: 7824a5e18c3a7d0cd5afdb714f5ef4f727acfbc13e542ad7d33451b5478db03a530ae17dacb48a2dfc799084b3fd4a266417a6c6dfa2dd58d6d98a01c4625c2e
7
+ data.tar.gz: 54f3aeb09eb35e8c0a285778b5e2c91a57dcdd5971b618343a006fcc8a5dbaf7073fbcf902d540c52788d630848992f8e83ff4ec5511dde26295ea64a9ffa959
@@ -0,0 +1,34 @@
1
+ //= require spree/frontend
2
+
3
+ function gaRemoveFromCart(variant) {
4
+ clearGAplugins();
5
+ gtag(
6
+ 'event',
7
+ 'remove_from_cart',
8
+ {
9
+ items: [{
10
+ id: variant.sku,
11
+ name: variant.name,
12
+ price: variant.price,
13
+ variant: variant.options,
14
+ quantity: variant.quantity
15
+ }]
16
+ }
17
+ );
18
+ }
19
+
20
+ Spree.ready(function(){
21
+ $('body').on('product_remove_from_cart', function(event) {
22
+ var variant = {
23
+ sku: event.variant_sku,
24
+ name: event.variant_name,
25
+ price: event.variant_price,
26
+ options: event.variant_options,
27
+ quantity: event.variant_quantity
28
+ }
29
+
30
+ if (typeof gtag !== 'undefined') {
31
+ gaRemoveFromCart(variant)
32
+ }
33
+ })
34
+ })
@@ -66,5 +66,21 @@ module Spree
66
66
  end
67
67
  params_with_values
68
68
  end
69
+
70
+ def segment_tracker
71
+ @segment_tracker ||= Spree::Tracker.current(:segment, current_store)
72
+ end
73
+
74
+ def segment_enabled?
75
+ segment_tracker.present?
76
+ end
77
+
78
+ def ga_tracker
79
+ @ga_tracker ||= Spree::Tracker.current(:google_analytics, current_store)
80
+ end
81
+
82
+ def ga_enabled?
83
+ ga_tracker.present?
84
+ end
69
85
  end
70
86
  end
@@ -2,7 +2,7 @@ if Gem.loaded_specs['spree_core'].version >= Gem::Version.create('3.5.0.alpha')
2
2
  Deface::Override.new(
3
3
  virtual_path: 'spree/shared/_head',
4
4
  name: 'add_google_analytics_initializer_to_spree_application',
5
- insert_before: 'meta',
5
+ insert_after: 'title',
6
6
  partial: 'spree/shared/trackers/google_analytics/initializer.js',
7
7
  original: 'cfa30a2831d9a41394c03229cd28b3c7eee69585'
8
8
  )
@@ -3,7 +3,7 @@ unless spree_version >= Gem::Version.create('3.3.0') && spree_version < Gem::Ver
3
3
  Deface::Override.new(
4
4
  virtual_path: 'spree/shared/_head',
5
5
  name: 'add_segment_initializer_to_layout',
6
- insert_before: 'meta',
6
+ insert_after: 'title',
7
7
  partial: 'spree/shared/trackers/segment/initializer.js',
8
8
  original: '6841b819babbe4df1f03d0bc8e05dc81bf0d45ad'
9
9
  )
@@ -1,18 +1,19 @@
1
- <% if @order.present? && !@order.completed? && Spree::Tracker.current(:google_analytics, current_store) %>
1
+ <% if ga_enabled? && @order.present? && !@order.completed? %>
2
2
  <script>
3
- if (typeof gtag !== 'undefined') {
4
- clearGAplugins();
5
- gtag('event', 'checkout_progress', {
6
- checkout_step: '<%= (@order.checkout_steps.index(@order.state) + 1) %>',
7
- items: [
8
- <% @order.line_items.each do |line_item| %>
9
- <%= ga_line_item(line_item) %>,
10
- <% end %>
11
- ],
12
-
13
- coupon: '<%= @order.promo_code %>',
14
- checkout_option: '<%= @order.state %>'
15
- });
16
- };
3
+ window.addEventListener('turbolinks:load', function() {
4
+ if (typeof gtag !== 'undefined') {
5
+ clearGAplugins();
6
+ gtag('event', 'checkout_progress', {
7
+ checkout_step: '<%= (@order.checkout_steps.index(@order.state) + 1) %>',
8
+ items: [
9
+ <% @order.line_items.each do |line_item| %>
10
+ <%= ga_line_item(line_item) %>,
11
+ <% end %>
12
+ ],
13
+ coupon: '<%= @order.promo_code %>',
14
+ checkout_option: '<%= @order.state %>'
15
+ });
16
+ };
17
+ });
17
18
  </script>
18
19
  <% end %>
@@ -1,12 +1,12 @@
1
- <% if tracker = Spree::Tracker.current(:google_analytics, current_store) %>
1
+ <% if ga_enabled? %>
2
2
  <!-- Global site tag (gtag.js) - Google Analytics -->
3
- <script async src="https://www.googletagmanager.com/gtag/js?id=<%= tracker.analytics_id %>"></script>
3
+ <script async src="https://www.googletagmanager.com/gtag/js?id=<%= ga_tracker.analytics_id %>"></script>
4
4
  <script>
5
5
  window.dataLayer = window.dataLayer || [];
6
6
  function gtag(){dataLayer.push(arguments);}
7
7
  gtag('js', new Date());
8
8
 
9
- gtag('config', '<%= tracker.analytics_id %>', { 'send_page_view': false });
9
+ gtag('config', '<%= ga_tracker.analytics_id %>', { 'send_page_view': false });
10
10
  gtag('set', 'allow_google_signals', true )
11
11
  gtag('set', 'allow_ad_personalization_signals', true );
12
12
 
@@ -1,12 +1,12 @@
1
- <% if tracker = Spree::Tracker.current(:google_analytics, current_store) %>
1
+ <% if ga_enabled? %>
2
2
  <script>
3
3
  if (typeof gtag !== 'undefined') {
4
4
  <% if user_id = try_spree_current_user.try(:id) %>
5
- gtag('config', '<%= tracker.analytics_id %>', {
5
+ gtag('config', '<%= ga_tracker.analytics_id %>', {
6
6
  'user_id': '<%= user_id %>'
7
7
  });
8
8
  <% else %>
9
- gtag('config', '<%= tracker.analytics_id %>');
9
+ gtag('config', '<%= ga_tracker.analytics_id %>');
10
10
  <% end %>
11
11
  }
12
12
  </script>
@@ -1,20 +1,22 @@
1
- <% if @order.present? && order_just_completed?(@order) && Spree::Tracker.current(:google_analytics, current_store) %>
1
+ <% if ga_enabled? && @order.present? && order_just_completed?(@order) %>
2
2
  <script>
3
- if (typeof gtag !== 'undefined') {
4
- clearGAplugins();
5
- gtag('event', 'purchase', {
6
- transaction_id: '<%= @order.number %>',
7
- value: <%= @order.total&.to_f %>,
8
- currency: '<%= @order.currency %>',
9
- tax: <%= @order.tax_total&.to_f %>,
10
- shipping: <%= @order.shipment_total&.to_f %>,
11
- coupon: '<%= @order.promo_code %>',
12
- items: [
13
- <% @order.line_items.each do |line_item| %>
14
- <%= ga_line_item(line_item) %>,
15
- <% end %>
16
- ]
17
- });
18
- }
3
+ window.addEventListener('turbolinks:load', function() {
4
+ if (typeof gtag !== 'undefined') {
5
+ clearGAplugins();
6
+ gtag('event', 'purchase', {
7
+ transaction_id: '<%= @order.number %>',
8
+ value: <%= @order.total&.to_f %>,
9
+ currency: '<%= @order.currency %>',
10
+ tax: <%= @order.tax_total&.to_f %>,
11
+ shipping: <%= @order.shipment_total&.to_f %>,
12
+ coupon: '<%= @order.promo_code %>',
13
+ items: [
14
+ <% @order.line_items.each do |line_item| %>
15
+ <%= ga_line_item(line_item) %>,
16
+ <% end %>
17
+ ]
18
+ });
19
+ }
20
+ });
19
21
  </script>
20
22
  <% end %>
@@ -1,22 +1,27 @@
1
- <% if @order.present? && !@order.complete? && Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? && @order.present? && !@order.complete? %>
2
2
  <script>
3
- if (typeof analytics !== 'undefined') {
4
- var segmentCartJson = {
5
- cart_id: '<%= @order.number %>',
6
- products: [
7
- <% @order.line_items.each_with_index do |line_item, index| %>
8
- <%= product_for_segment(
9
- line_item.product,
10
- position: index+1,
11
- quantity: line_item.quantity,
12
- image: default_image_for_product_or_variant(line_item.variant)
13
- ) %>,
14
- <% end %>
15
- ]
16
- }
3
+ window.addEventListener('turbolinks:load', function() {
4
+ if (typeof analytics !== 'undefined') {
5
+ var segmentCartJson = {
6
+ cart_id: '<%= @order.number %>',
7
+ products: [
8
+ <% @order.line_items.each_with_index do |line_item, index| %>
9
+ <%=
10
+ product_for_segment(
11
+ line_item.product,
12
+ position: index+1,
13
+ quantity: line_item.quantity,
14
+ image: default_image_for_product_or_variant(line_item.variant)
15
+ )
16
+ %>,
17
+ <% end %>
18
+ ]
19
+ }
17
20
 
18
- analytics.track('Cart Viewed', segmentCartJson);
19
- analytics.page('Cart Viewed', segmentCartJson);
20
- }
21
+ analytics.track('Cart Viewed', segmentCartJson);
22
+ analytics.page('Cart Viewed', segmentCartJson);
23
+ }
24
+ });
21
25
  </script>
22
26
  <% end %>
27
+
@@ -1,14 +1,21 @@
1
- <% if @order.present? && !@order.completed? && Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? && @order.present? && !@order.completed? %>
2
2
  <script>
3
- if (typeof analytics !== 'undefined') {
4
- analytics.track('Checkout Step Viewed', {
5
- checkout_id: '<%= @order.number %>',
6
- step: '<%= (@order.checkout_steps.index(@order.state) + 1) %>'
7
- });
8
- analytics.page('Checkout Step Viewed', {
9
- checkout_id: '<%= @order.number %>',
10
- step: '<%= (@order.checkout_steps.index(@order.state) + 1) %>'
11
- });
12
- }
3
+ window.addEventListener('turbolinks:load', function() {
4
+ if (typeof analytics !== 'undefined') {
5
+ analytics.track('Checkout Step Viewed',
6
+ {
7
+ checkout_id: '<%= @order.number %>',
8
+ step: '<%= (@order.checkout_steps.index(@order.state) + 1) %>'
9
+ }
10
+ );
11
+
12
+ analytics.page('Checkout Step Viewed',
13
+ {
14
+ checkout_id: '<%= @order.number %>',
15
+ step: '<%= (@order.checkout_steps.index(@order.state) + 1) %>'
16
+ }
17
+ );
18
+ }
19
+ });
13
20
  </script>
14
21
  <% end %>
@@ -1,7 +1,7 @@
1
- <% if tracker = Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? %>
2
2
  <script>
3
3
  !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment 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,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
4
- analytics.load('<%=tracker.analytics_id%>'.replace(/^\s+|\s+$/g, ''));
4
+ analytics.load('<%=segment_tracker.analytics_id%>'.replace(/^\s+|\s+$/g, ''));
5
5
  }}();
6
6
  </script>
7
7
  <% end %>
@@ -1,8 +1,11 @@
1
- <% if @order.present? && order_just_completed?(@order) && Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? && @order.present? && order_just_completed?(@order) %>
2
2
  <% order_json = SpreeAnalyticsTrackers::Segment::OrderPresenter.new(@order).to_json %>
3
3
  <script>
4
- if (typeof analytics !== 'undefined') {
5
- analytics.page('Order Completed', <%= order_json.html_safe %>);
6
- }
4
+ window.addEventListener('turbolinks:load', function() {
5
+ if (typeof analytics !== 'undefined') {
6
+ analytics.page('Order Completed', <%= order_json.html_safe %>);
7
+ analytics.track('Order Completed', <%= order_json.html_safe %>);
8
+ }
9
+ });
7
10
  </script>
8
11
  <% end %>
@@ -1,4 +1,4 @@
1
- <% if tracker = Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? %>
2
2
  <script>
3
3
  if (typeof analytics !== 'undefined') {
4
4
  analytics.page();
@@ -1,21 +1,23 @@
1
- <% if any_filtering_params? && Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? && any_filtering_params? %>
2
2
  <script>
3
- if (typeof analytics !== 'undefined') {
4
- var segmentProductListFilteredJson = {
5
- filters: [
6
- <% filtering_params_with_values.each do |type, value| %>
7
- <%= { type: type, value: value } .to_json.html_safe %>,
8
- <% end %>
9
- ],
10
- products: [
11
- <% @products.each_with_index do |product, index| %>
12
- <%= product_for_segment(product, position: index+1) %>,
13
- <% end %>
14
- ]
15
- }
3
+ window.addEventListener('turbolinks:load', function() {
4
+ if (typeof analytics !== 'undefined') {
5
+ var segmentProductListFilteredJson = {
6
+ filters: [
7
+ <% filtering_params_with_values.each do |type, value| %>
8
+ <%= { type: type, value: value } .to_json.html_safe %>,
9
+ <% end %>
10
+ ],
11
+ products: [
12
+ <% @products.each_with_index do |product, index| %>
13
+ <%= product_for_segment(product, position: index + 1) %>,
14
+ <% end %>
15
+ ]
16
+ }
16
17
 
17
- analytics.track('Product List Filtered', segmentProductListFilteredJson);
18
- analytics.page('Product List Filtered', segmentProductListFilteredJson);
19
- }
18
+ analytics.track('Product List Filtered', segmentProductListFilteredJson);
19
+ analytics.page('Product List Filtered', segmentProductListFilteredJson);
20
+ }
21
+ });
20
22
  </script>
21
23
  <% end %>
@@ -1,17 +1,19 @@
1
- <% if defined?(products) && products.present? && Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? && defined?(products) && products.present? %>
2
2
  <script>
3
- if (typeof analytics !== 'undefined') {
4
- var segmentProductListViewedJson = {
5
- category: '<%= @taxon&.name %>',
6
- products: [
7
- <% products.each_with_index do |product, index| %>
8
- <%= product_for_segment(product, position: index+1, image: default_image_for_product_or_variant(product)) %>,
9
- <% end %>
10
- ]
11
- }
3
+ window.addEventListener('turbolinks:load', function() {
4
+ if (typeof analytics !== 'undefined') {
5
+ var segmentProductListViewedJson = {
6
+ category: '<%= @taxon&.name %>',
7
+ products: [
8
+ <% products.each_with_index do |product, index| %>
9
+ <%= product_for_segment(product, position: index+1, image: default_image_for_product_or_variant(product)) %>,
10
+ <% end %>
11
+ ]
12
+ }
12
13
 
13
- analytics.track('Product List Viewed', segmentProductListViewedJson);
14
- analytics.page('Product List Viewed', segmentProductListViewedJson);
15
- }
14
+ analytics.track('Product List Viewed', segmentProductListViewedJson);
15
+ analytics.page('Product List Viewed', segmentProductListViewedJson);
16
+ }
17
+ });
16
18
  </script>
17
19
  <% end %>
@@ -1,10 +1,12 @@
1
- <% if @product.present? && Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? && @product.present? %>
2
2
  <script>
3
- if (typeof analytics !== 'undefined') {
4
- var segmentProductViewed = <%= product_for_segment(@product, image: default_image_for_product_or_variant(@product)) %>;
3
+ window.addEventListener('turbolinks:load', function() {
4
+ if (typeof analytics !== 'undefined') {
5
+ var segmentProductViewed = <%= product_for_segment(@product, image: default_image_for_product_or_variant(@product)) %>;
5
6
 
6
- analytics.page('Product Viewed', segmentProductViewed);
7
- analytics.track('Product Viewed', segmentProductViewed);
8
- }
7
+ analytics.page('Product Viewed', segmentProductViewed);
8
+ analytics.track('Product Viewed', segmentProductViewed);
9
+ }
10
+ });
9
11
  </script>
10
12
  <% end %>
@@ -1,12 +1,10 @@
1
- <% if params.key?(:keywords) && params[:keywords].present? && Spree::Tracker.current(:segment, current_store) %>
1
+ <% if segment_enabled? && params.key?(:keywords) && params[:keywords].present? %>
2
2
  <script>
3
- if (typeof analytics !== 'undefined') {
4
- analytics.track('Products Searched', {
5
- query: '<%= params[:keywords] %>',
6
- });
7
- analytics.page('Products Searched', {
8
- query: '<%= params[:keywords] %>',
9
- });
10
- }
3
+ window.addEventListener('turbolinks:load', function() {
4
+ if (typeof analytics !== 'undefined') {
5
+ analytics.track('Products Searched', { query: '<%= params[:keywords] %>' });
6
+ analytics.page('Products Searched', { query: '<%= params[:keywords] %>' });
7
+ }
8
+ });
11
9
  </script>
12
10
  <% end %>
@@ -8,6 +8,7 @@ module SpreeAnalyticsTrackers
8
8
  return unless File.file?(javascripts_path)
9
9
 
10
10
  append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/add_to_cart_analytics\n"
11
+ append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/remove_from_cart_analytics\n"
11
12
  end
12
13
 
13
14
  def add_migrations
@@ -9,7 +9,7 @@ module SpreeAnalyticsTrackers
9
9
 
10
10
  module VERSION
11
11
  MAJOR = 2
12
- MINOR = 0
12
+ MINOR = 1
13
13
  TINY = 0
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY].compact.join('.')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_analytics_trackers
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spark Solutions
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-11 00:00:00.000000000 Z
11
+ date: 2021-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -109,6 +109,7 @@ files:
109
109
  - README.md
110
110
  - Rakefile
111
111
  - app/assets/javascripts/spree/frontend/add_to_cart_analytics.js
112
+ - app/assets/javascripts/spree/frontend/remove_from_cart_analytics.js
112
113
  - app/controllers/spree/admin/trackers_controller.rb
113
114
  - app/controllers/spree_analytics_trackers/store_controller_decorator.rb
114
115
  - app/helpers/spree/trackers_helper.rb
@@ -174,7 +175,7 @@ homepage: https://github.com/spree-contrib/spree_analytics_trackers
174
175
  licenses:
175
176
  - BSD-3-Clause
176
177
  metadata: {}
177
- post_install_message:
178
+ post_install_message:
178
179
  rdoc_options: []
179
180
  require_paths:
180
181
  - lib
@@ -190,8 +191,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
191
  version: '0'
191
192
  requirements:
192
193
  - none
193
- rubygems_version: 3.1.2
194
- signing_key:
194
+ rubygems_version: 3.1.4
195
+ signing_key:
195
196
  specification_version: 4
196
197
  summary: Adds analytics trackers functionality to Spree
197
198
  test_files: