rack-tracker 1.12.1 → 1.13.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: 0ba26127c80f03ca9e62148bcc7bed290e716f268ee5b0db44ab0e8f0bfda6b7
4
- data.tar.gz: 53c75c93dc91a11a0d55e2b415ce3f4a4045ea5c36e0bf3f606f7b2174c0ec02
3
+ metadata.gz: 4942ee895d5b92722012f0238986942a903a0633233f49e30d9f7da65b4496ed
4
+ data.tar.gz: 7d103f64e4153ae08e38c952fda4395c65617f0534ddd166b31840448f0df22d
5
5
  SHA512:
6
- metadata.gz: a50ac45ea4aed6309bdf29b910b2d86ef25a1b1543c1d322ee51932711cc929e9ce5acd068f2785ed9dbb124ac991cb238741f3d06c6c189075b684e11b30734
7
- data.tar.gz: 36a514edc61a4d2b1357ac347610749fba442cf7f16da4457b20749ae3545327d7ea793e75d127ad84def56b00165ccbb4cbf79fa5e2982f1636b677926e47f2
6
+ metadata.gz: c8bd7a5bec291496d4f49017a8dfe5572c5f748d9a783922bea3fc9cc47e646cc504d845dd1c2ec86eccbb0cc7592a8834a02e503d4f814ea6eb5d9d9f2738a0
7
+ data.tar.gz: fbc9b64700eb94ae1ab531b1ea43c4abc6f36084c2799366300f9e9c5ed5a9d8840859ed145a537be6e0a7ca23799991334255a541f42222b917c9d4fa6cb20d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 1.13.0
2
+
3
+ * [ENHANCEMENT] hotwired/turbo support #160 (thx @wrozka)
4
+ * [BUGFIX] Use leftmost match for gtm tag injection #156 (thx @yutoji)
5
+
1
6
  # 1.12.1
2
7
 
3
8
  * [ENHANCEMENT] Use local variables to prevent instance state #151 (thx @bumi)
@@ -10,7 +10,7 @@ class Rack::Tracker::GoogleTagManager < Rack::Tracker::Handler
10
10
  # Sub! is enough, in well formed html there's only one head or body tag.
11
11
  # Block syntax need to be used, otherwise backslashes in input will mess the output.
12
12
  # @see http://stackoverflow.com/a/4149087/518204 and https://github.com/railslove/rack-tracker/issues/50
13
- response.sub! %r{<head.*>} do |m|
13
+ response.sub! %r{<head.*?>} do |m|
14
14
  m.to_s << self.render_head
15
15
  end
16
16
  response.sub! %r{<body.*?>} do |m|
@@ -1,23 +1,29 @@
1
1
  <% if container %>
2
- <% unless options[:turbolinks] %>
3
- <% if events.any? %>
4
- <script>
5
- dataLayer = [];
6
- dataLayer.push(<%= events.map(&:write).join(', ') %>);
7
- </script>
8
- <% end %>
9
- <% end %>
10
-
11
2
  <script>
3
+ dataLayer = [];
4
+
12
5
  <% if options[:turbolinks] %>
13
6
  document.addEventListener('turbolinks:load', function(event) {
14
7
  var url = event.data.url;
15
- <% if events.any? %>
16
- dataLayer.push(<%= events.map(&:write).join(', ') %>);
17
- <% end %>
8
+ dataLayer.push({'event':'pageView','virtualUrl': url});
9
+ });
10
+ document.addEventListener('turbo:load', function(event) {
11
+ var url = event.detail.url;
18
12
  dataLayer.push({'event':'pageView','virtualUrl': url});
19
13
  });
20
14
  <% end %>
15
+ </script>
16
+
17
+ <% if events.any? %>
18
+ <script>
19
+ <%# Generates unique script tags to ensure that turbo/turbolinks include %>
20
+ <%# them in the document even if the same event happens more than once %>
21
+ // Unique Script ID: <%= SecureRandom.base64(8) %>
22
+ dataLayer.push(<%= events.map(&:write).join(', ') %>);
23
+ </script>
24
+ <% end %>
25
+
26
+ <script>
21
27
  (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
22
28
  new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
23
29
  j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class Tracker
3
- VERSION = '1.12.1'
3
+ VERSION = '1.13.0'
4
4
  end
5
5
  end
@@ -32,4 +32,27 @@ RSpec.describe Rack::Tracker::GoogleTagManager do
32
32
  end
33
33
  end
34
34
 
35
+ describe '#inject' do
36
+ subject { handler_object.inject(example_response) }
37
+ let(:handler_object) { described_class.new(env, container: 'somebody') }
38
+
39
+ before do
40
+ allow(handler_object).to receive(:render_head).and_return('<script>"HEAD"</script>')
41
+ allow(handler_object).to receive(:render_body).and_return('<script>"BODY"</script>')
42
+ end
43
+
44
+ context 'with one line html response' do
45
+ let(:example_response) { "<html><head></head><body></body></html>" }
46
+
47
+ it 'will have render_head content in head tag' do
48
+ expect(subject).to match(%r{<head>.*<script>"HEAD"</script>.*</head>})
49
+ end
50
+
51
+ it 'will have render_body content in body tag' do
52
+ expect(subject).to match(%r{<body>.*<script>"BODY"</script>.*</body>})
53
+ end
54
+
55
+ end
56
+ end
57
+
35
58
  end
@@ -23,7 +23,7 @@ RSpec.describe "Google Tag Manager Integration" do
23
23
  expect(page.find("body")).to have_xpath '//body/noscript/iframe[@src="https://www.googletagmanager.com/ns.html?id=GTM-ABCDEF"]'
24
24
  end
25
25
 
26
- it "embeds the turbolinks observer if requested" do
26
+ it "embeds turbolinks and turbo observers if requested" do
27
27
  visit '/'
28
28
  expect(page.find("head")).to_not have_content "turbolinks:load"
29
29
  setup_app(action: :google_tag_manager) do |tracker|
@@ -31,5 +31,6 @@ RSpec.describe "Google Tag Manager Integration" do
31
31
  end
32
32
  visit '/'
33
33
  expect(page.find("head")).to have_content "turbolinks:load"
34
+ expect(page.find("head")).to have_content "turbo:load"
34
35
  end
35
- end
36
+ end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-tracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.1
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Brillert
8
8
  - Marco Schaden
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-27 00:00:00.000000000 Z
12
+ date: 2021-07-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -251,7 +251,7 @@ homepage: https://github.com/railslove/rack-tracker
251
251
  licenses:
252
252
  - MIT
253
253
  metadata: {}
254
- post_install_message:
254
+ post_install_message:
255
255
  rdoc_options: []
256
256
  require_paths:
257
257
  - lib
@@ -266,8 +266,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
266
  - !ruby/object:Gem::Version
267
267
  version: '0'
268
268
  requirements: []
269
- rubygems_version: 3.0.6
270
- signing_key:
269
+ rubygems_version: 3.0.8
270
+ signing_key:
271
271
  specification_version: 4
272
272
  summary: Tracking made easy
273
273
  test_files: