rack-tracker 1.8.0 → 1.9.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 +4 -4
- data/.travis.yml +5 -10
- data/CHANGELOG.md +6 -0
- data/Gemfile.rails-5.2 +6 -0
- data/README.md +26 -0
- data/lib/rack/tracker.rb +1 -0
- data/lib/rack/tracker/bing/bing.rb +12 -0
- data/lib/rack/tracker/bing/template/bing.erb +22 -0
- data/lib/rack/tracker/google_global/google_global.rb +28 -2
- data/lib/rack/tracker/google_global/template/google_global.erb +4 -0
- data/lib/rack/tracker/version.rb +1 -1
- data/rack-tracker.gemspec +1 -1
- data/spec/handler/bing_spec.rb +53 -0
- data/spec/handler/google_global_spec.rb +36 -0
- data/spec/integration/bing_integration_spec.rb +17 -0
- data/spec/support/metal_controller.rb +4 -0
- metadata +14 -9
- data/Gemfile.rails-5.1 +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36432546f568d8bd4224d5009397e5dbaa6481977b605c7faaa4248caa527a0c
|
4
|
+
data.tar.gz: 54aa497e17eda29100f863958db67dc9a8a68331f580719d2c425e4cf8325341
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1eb4c67eeddaae64d5f539d2d276fdb19e5bfded706e5e0156f68ab3edb4a1bcb159fdb959bba69f0480c7068397d7a2bb38f1e9476c6a98670199eacbccc0e
|
7
|
+
data.tar.gz: a927f10a586c038598836ed80528ee3ecc7d122dfb22d63b43a5c88dff06cb98b6472dd0eb7fea7affe2a8a89a1b1eed9802b5294e83efe150b92c0eca430e31
|
data/.travis.yml
CHANGED
@@ -1,18 +1,13 @@
|
|
1
1
|
language: ruby
|
2
2
|
sudo: false
|
3
3
|
rvm:
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
- 2.3
|
7
|
-
- 2.
|
8
|
-
- 2.5.0
|
4
|
+
- 2.3.8
|
5
|
+
- 2.4.5
|
6
|
+
- 2.5.3
|
7
|
+
- 2.6.1
|
9
8
|
- jruby-9.1.10.0
|
10
9
|
gemfile:
|
11
10
|
- Gemfile
|
12
11
|
- Gemfile.rails-3.2
|
13
12
|
- Gemfile.rails-4.2
|
14
|
-
- Gemfile.rails-5.
|
15
|
-
matrix:
|
16
|
-
exclude:
|
17
|
-
- rvm: 2.1.10
|
18
|
-
gemfile: Gemfile.rails-5.1 # rails 5 needs ruby >= 2.2.2
|
13
|
+
- Gemfile.rails-5.2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# 1.9.0
|
2
|
+
|
3
|
+
* [ENHANCEMENT] Integration for Bing tracking #131 (thx @pcraston)
|
4
|
+
* [ENHANCEMENT] Possibility to integrate Google Optimize ID into the allowed tracker options #127 (thx @nachoabad)
|
5
|
+
* [ENHANCEMENT] Support for google global events #126 (thx @atd)
|
6
|
+
|
1
7
|
# 1.8.0
|
2
8
|
|
3
9
|
* [ENHANCEMENT] Google Global Site Tag: basic integration with support for pageviews to Google global tag #123 (thx @atd)
|
data/Gemfile.rails-5.2
ADDED
data/README.md
CHANGED
@@ -120,6 +120,7 @@ request.env['tracker'] = {
|
|
120
120
|
* `:link_attribution` - Enables [Enhanced Link Attribution](https://developers.google.com/analytics/devguides/collection/gtagjs/enhanced-link-attribution).
|
121
121
|
* `:allow_display_features` - Can be used to disable [Display Features](https://developers.google.com/analytics/devguides/collection/gtagjs/display-features).
|
122
122
|
* `:custom_map` - Used to [Configure and send custom dimensions](https://developers.google.com/analytics/devguides/collection/gtagjs/custom-dims-mets)
|
123
|
+
* `:optimize_id` - Used to [Deploy Optimize using gtag](https://support.google.com/optimize/answer/7513085)
|
123
124
|
* `:set` - Used in the [set command to configure multiple properties](https://developers.google.com/analytics/devguides/collection/gtagjs/setting-values)
|
124
125
|
|
125
126
|
#### Trackers
|
@@ -575,6 +576,31 @@ config.middleware.use(Rack::Tracker) do
|
|
575
576
|
end
|
576
577
|
```
|
577
578
|
|
579
|
+
### Bing
|
580
|
+
|
581
|
+
[Bing](https://bingads.microsoft.com/)
|
582
|
+
|
583
|
+
To add the tracking snippet:
|
584
|
+
|
585
|
+
```
|
586
|
+
config.middleware.use(Rack::Tracker) do
|
587
|
+
handler :bing, { tracker: '12345678' }
|
588
|
+
end
|
589
|
+
```
|
590
|
+
|
591
|
+
To send conversion events:
|
592
|
+
```
|
593
|
+
tracker do |t|
|
594
|
+
t.bing :conversion, {
|
595
|
+
type: 'event',
|
596
|
+
category: 'Users',
|
597
|
+
action: 'Login',
|
598
|
+
label: 'Standard',
|
599
|
+
value: 10
|
600
|
+
}
|
601
|
+
end
|
602
|
+
```
|
603
|
+
|
578
604
|
|
579
605
|
### Custom Handlers
|
580
606
|
|
data/lib/rack/tracker.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
<% if events.any? %>
|
2
|
+
<script src="//bat.bing.com/bat.js" async=""></script>
|
3
|
+
<script>
|
4
|
+
window.uetq = window.uetq || [];
|
5
|
+
<% events.each do |event| %>
|
6
|
+
window.uetq.push({ 'ec': '<%= event.category %>', 'ea': '<%= event.action %>', 'el': '<%= event.label %>', 'ev': <%= event.value %> });
|
7
|
+
<% end %>
|
8
|
+
</script>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
|
12
|
+
<script>(function (w, d, t, r, u) {
|
13
|
+
var f, n, i;
|
14
|
+
w[u] = w[u] || [], f = function () {
|
15
|
+
var o = {ti: "<%= tracker %>"};
|
16
|
+
o.q = w[u], w[u] = new UET(o), w[u].push("pageLoad")
|
17
|
+
}, n = d.createElement(t), n.src = r, n.async = 1, n.onload = n.onreadystatechange = function () {
|
18
|
+
var s = this.readyState;
|
19
|
+
s && s !== "loaded" && s !== "complete" || (f(), n.onload = n.onreadystatechange = null)
|
20
|
+
}, i = d.getElementsByTagName(t)[0], i.parentNode.insertBefore(n, i)
|
21
|
+
})(window, document, "script", "//bat.bing.com/bat.js", "uetq");
|
22
|
+
</script>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Rack::Tracker::GoogleGlobal < Rack::Tracker::Handler
|
2
2
|
self.allowed_tracker_options = [:cookie_domain, :user_id,
|
3
3
|
:link_attribution, :allow_display_features, :anonymize_ip,
|
4
|
-
:custom_map]
|
4
|
+
:custom_map, :optimize_id]
|
5
5
|
|
6
6
|
class Page < OpenStruct
|
7
7
|
def params
|
@@ -9,8 +9,30 @@ class Rack::Tracker::GoogleGlobal < Rack::Tracker::Handler
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
class Event < OpenStruct
|
13
|
+
PREFIXED_PARAMS = %i[category label]
|
14
|
+
LITERAL_PARAMS = %i[value]
|
15
|
+
PARAMS = PREFIXED_PARAMS + LITERAL_PARAMS
|
16
|
+
|
17
|
+
def params
|
18
|
+
Hash[to_h.slice(*PARAMS).map { |key, value| [param_key(key), value] }]
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def param_key(key)
|
24
|
+
PREFIXED_PARAMS.include?(key) ? "event_#{key}" : key.to_s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
12
28
|
def pages
|
13
|
-
|
29
|
+
select_handler_events(Page)
|
30
|
+
end
|
31
|
+
|
32
|
+
alias handler_events events
|
33
|
+
|
34
|
+
def events
|
35
|
+
select_handler_events(Event)
|
14
36
|
end
|
15
37
|
|
16
38
|
def trackers
|
@@ -29,4 +51,8 @@ class Rack::Tracker::GoogleGlobal < Rack::Tracker::Handler
|
|
29
51
|
value = options[:set]
|
30
52
|
value.respond_to?(:call) ? value.call(env) : value
|
31
53
|
end
|
54
|
+
|
55
|
+
def select_handler_events(klass)
|
56
|
+
handler_events.select { |event| event.is_a?(klass) }
|
57
|
+
end
|
32
58
|
end
|
data/lib/rack/tracker/version.rb
CHANGED
data/rack-tracker.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'activesupport', '>= 3.0'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'actionpack', '>= 3.0'
|
26
|
-
spec.add_development_dependency "bundler", "
|
26
|
+
spec.add_development_dependency "bundler", ">= 1.16"
|
27
27
|
spec.add_development_dependency "rake"
|
28
28
|
spec.add_development_dependency "rspec", "~> 3.2"
|
29
29
|
spec.add_development_dependency "capybara", "~> 2.4"
|
@@ -0,0 +1,53 @@
|
|
1
|
+
RSpec.describe Rack::Tracker::Bing do
|
2
|
+
|
3
|
+
it 'will be placed in the body' do
|
4
|
+
expect(described_class.position).to eq(:body)
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "with events" do
|
8
|
+
subject { described_class.new(env, tracker: 'somebody').render }
|
9
|
+
|
10
|
+
describe "default" do
|
11
|
+
def env
|
12
|
+
{'tracker' => {
|
13
|
+
'bing' => [
|
14
|
+
{ 'class_name' => 'Conversion', 'category' => 'Users', 'action' => 'Login', 'label' => 'Standard', 'value' => 10 }
|
15
|
+
]
|
16
|
+
}}
|
17
|
+
end
|
18
|
+
|
19
|
+
it "will show event initialiser" do
|
20
|
+
expect(subject).to include "window.uetq = window.uetq || [];"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "will show events" do
|
24
|
+
expect(subject).to include "window.uetq.push({ 'ec': 'Users', 'ea': 'Login', 'el': 'Standard', 'ev': 10 });"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "with multiple events" do
|
30
|
+
subject { described_class.new(env, tracker: 'somebody').render }
|
31
|
+
|
32
|
+
describe "default" do
|
33
|
+
def env
|
34
|
+
{'tracker' => {
|
35
|
+
'bing' => [
|
36
|
+
{ 'class_name' => 'Conversion', 'category' => 'Users', 'action' => 'Login', 'label' => 'Standard', 'value' => 10 },
|
37
|
+
{ 'class_name' => 'Conversion', 'category' => 'Users', 'action' => 'Logout', 'label' => 'Standard', 'value' => 5 }
|
38
|
+
]
|
39
|
+
}}
|
40
|
+
end
|
41
|
+
|
42
|
+
it "will show event initialiser" do
|
43
|
+
expect(subject).to include "window.uetq = window.uetq || [];"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "will show events" do
|
47
|
+
expect(subject).to include "window.uetq.push({ 'ec': 'Users', 'ea': 'Login', 'el': 'Standard', 'ev': 10 });"
|
48
|
+
expect(subject).to include "window.uetq.push({ 'ec': 'Users', 'ea': 'Logout', 'el': 'Standard', 'ev': 5 });"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -184,4 +184,40 @@ RSpec.describe Rack::Tracker::GoogleGlobal do
|
|
184
184
|
end
|
185
185
|
end
|
186
186
|
end
|
187
|
+
|
188
|
+
describe "with events" do
|
189
|
+
subject { described_class.new(env, trackers: [{ id: 'somebody' }]).render }
|
190
|
+
|
191
|
+
describe "default" do
|
192
|
+
def env
|
193
|
+
{'tracker' => {
|
194
|
+
'google_global' => [
|
195
|
+
{ 'class_name' => 'Event', 'action' => 'login' }
|
196
|
+
]
|
197
|
+
}}
|
198
|
+
end
|
199
|
+
|
200
|
+
it "will show the event" do
|
201
|
+
expect(subject).to match(%r{gtag\('event', 'login', {}\);})
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
describe "with event parameters" do
|
206
|
+
def env
|
207
|
+
{'tracker' => {
|
208
|
+
'google_global' => [
|
209
|
+
{ 'class_name' => 'Event',
|
210
|
+
'action' => 'login',
|
211
|
+
'category' => 'engagement',
|
212
|
+
'label' => 'Github',
|
213
|
+
'value' => 5 }
|
214
|
+
]
|
215
|
+
}}
|
216
|
+
end
|
217
|
+
|
218
|
+
it "will show event" do
|
219
|
+
expect(subject).to match(%r{gtag\('event', 'login', {\"event_category\":\"engagement\",\"event_label\":\"Github\",\"value\":5}\);})
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
187
223
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'support/capybara_app_helper'
|
2
|
+
|
3
|
+
RSpec.describe "Bing Integration" do
|
4
|
+
before do
|
5
|
+
setup_app(action: :bing) do |tracker|
|
6
|
+
tracker.handler :bing, { tracker: '12345678' }
|
7
|
+
end
|
8
|
+
visit '/'
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { page }
|
12
|
+
|
13
|
+
it "embeds the script tag with tracker" do
|
14
|
+
expect(page.find("body")).to have_content('var o = {ti: "12345678"};')
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-tracker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Brillert
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-03-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
@@ -71,16 +71,16 @@ dependencies:
|
|
71
71
|
name: bundler
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - "
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '1.
|
76
|
+
version: '1.16'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '1.
|
83
|
+
version: '1.16'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: rake
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -153,11 +153,13 @@ files:
|
|
153
153
|
- Gemfile
|
154
154
|
- Gemfile.rails-3.2
|
155
155
|
- Gemfile.rails-4.2
|
156
|
-
- Gemfile.rails-5.
|
156
|
+
- Gemfile.rails-5.2
|
157
157
|
- LICENSE.txt
|
158
158
|
- README.md
|
159
159
|
- Rakefile
|
160
160
|
- lib/rack/tracker.rb
|
161
|
+
- lib/rack/tracker/bing/bing.rb
|
162
|
+
- lib/rack/tracker/bing/template/bing.erb
|
161
163
|
- lib/rack/tracker/controller.rb
|
162
164
|
- lib/rack/tracker/criteo/criteo.rb
|
163
165
|
- lib/rack/tracker/criteo/template/criteo.erb
|
@@ -197,6 +199,7 @@ files:
|
|
197
199
|
- spec/fixtures/views/layouts/application.html.erb
|
198
200
|
- spec/fixtures/views/metal/index.html.erb
|
199
201
|
- spec/fixtures/views/metal/turing.html.erb
|
202
|
+
- spec/handler/bing_spec.rb
|
200
203
|
- spec/handler/criteo_spec.rb
|
201
204
|
- spec/handler/facebook_pixel_spec.rb
|
202
205
|
- spec/handler/facebook_spec.rb
|
@@ -209,6 +212,7 @@ files:
|
|
209
212
|
- spec/handler/hotjar_spec.rb
|
210
213
|
- spec/handler/vwo_spec.rb
|
211
214
|
- spec/handler/zanox_spec.rb
|
215
|
+
- spec/integration/bing_integration_spec.rb
|
212
216
|
- spec/integration/criteo_integration_spec.rb
|
213
217
|
- spec/integration/facebook_integration_spec.rb
|
214
218
|
- spec/integration/facebook_pixel_integration_spec.rb
|
@@ -249,8 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
253
|
- !ruby/object:Gem::Version
|
250
254
|
version: '0'
|
251
255
|
requirements: []
|
252
|
-
|
253
|
-
rubygems_version: 2.7.7
|
256
|
+
rubygems_version: 3.0.1
|
254
257
|
signing_key:
|
255
258
|
specification_version: 4
|
256
259
|
summary: Tracking made easy
|
@@ -262,6 +265,7 @@ test_files:
|
|
262
265
|
- spec/fixtures/views/layouts/application.html.erb
|
263
266
|
- spec/fixtures/views/metal/index.html.erb
|
264
267
|
- spec/fixtures/views/metal/turing.html.erb
|
268
|
+
- spec/handler/bing_spec.rb
|
265
269
|
- spec/handler/criteo_spec.rb
|
266
270
|
- spec/handler/facebook_pixel_spec.rb
|
267
271
|
- spec/handler/facebook_spec.rb
|
@@ -274,6 +278,7 @@ test_files:
|
|
274
278
|
- spec/handler/hotjar_spec.rb
|
275
279
|
- spec/handler/vwo_spec.rb
|
276
280
|
- spec/handler/zanox_spec.rb
|
281
|
+
- spec/integration/bing_integration_spec.rb
|
277
282
|
- spec/integration/criteo_integration_spec.rb
|
278
283
|
- spec/integration/facebook_integration_spec.rb
|
279
284
|
- spec/integration/facebook_pixel_integration_spec.rb
|