rack-tracker 1.12.1 → 1.13.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: 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: