spree_analytics_trackers 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: