rack-tracker 1.8.0 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|