rack-tracker 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -1
- data/README.md +3 -1
- data/lib/rack/tracker/criteo/criteo.rb +2 -1
- data/lib/rack/tracker/google_tag_manager/google_tag_manager.rb +1 -10
- data/lib/rack/tracker/google_tag_manager/template/google_tag_manager.erb +2 -2
- data/lib/rack/tracker/version.rb +1 -1
- data/spec/handler/google_tag_manager_spec.rb +2 -3
- data/spec/integration/criteo_integration_spec.rb +3 -1
- data/spec/integration/google_tag_manager_integration_spec.rb +3 -3
- data/spec/support/metal_controller.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7967cb6b637c7fbcbef964f3e12a198a3e18b4d3
|
4
|
+
data.tar.gz: 090e46d7451bf2d2d3a449b04a0162bf39e8fd6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0da5aef1623fe668fd12b9c646cc80c262bbcd610bb6686af8fb01b0c201a722191020fa6b4a45ab22e9bf5f33561f7ece544bd9890b88b5f0c85552f0ba6319
|
7
|
+
data.tar.gz: 8ff3380ee3229d099f78eba30914e7cb67a991013810ab0209db287b3b119a93319966015c6cab06f94dd7e3ec1fe7492ab8763d51cf2302c06afd146a6a9ea0
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,15 @@
|
|
1
|
+
# 1.1.0
|
2
|
+
|
3
|
+
* [BREAKING] Google Tag Manager #59
|
4
|
+
* change `dataLayer.push` syntax from from `name: 'click', value: 'X'` to just `click: 'X'`
|
5
|
+
* this allows to specify a hash with multiple key-value pairs for one push event
|
6
|
+
* this will also correctly handle array values (see issue #57)
|
7
|
+
* setEmail event for criteo #51 (thx @florianeck)
|
8
|
+
|
1
9
|
# 1.0.2
|
2
10
|
|
3
11
|
* Back port deep_stringify_keys! from Rails 4 #55 (thx @jivagoalves)
|
4
12
|
* Javascript escape implementation to prevent XSS #54 (thx @fabn)
|
5
|
-
* setEmail event for criteo #51 (thx @florianeck)
|
6
13
|
|
7
14
|
# 1.0.1
|
8
15
|
|
data/README.md
CHANGED
@@ -246,7 +246,7 @@ To add events or variables to the dataLayer from the server side, just call the
|
|
246
246
|
```ruby
|
247
247
|
def show
|
248
248
|
tracker do |t|
|
249
|
-
t.google_tag_manager :push, {
|
249
|
+
t.google_tag_manager :push, { price: 'X', another_variable: ['array', 'values'] }
|
250
250
|
end
|
251
251
|
end
|
252
252
|
```
|
@@ -378,6 +378,7 @@ end
|
|
378
378
|
Other global criteo handler options are:
|
379
379
|
* `set_customer_id: 'x'`
|
380
380
|
* `set_site_type: 'd'` - possible values are `m` (mobile), `t` (tablet), `d` (desktop)
|
381
|
+
* `set_email: 'email'`
|
381
382
|
|
382
383
|
Option values can be either static or dynamic by providing a lambda being reevaluated for each request, e.g. `set_customer_id: lambda { |env| env['rack.session']['user_id'] }`
|
383
384
|
|
@@ -441,6 +442,7 @@ and the following variables:
|
|
441
442
|
```
|
442
443
|
zx_category = 'Swimming';
|
443
444
|
zx_amount = '3.50';
|
445
|
+
```
|
444
446
|
|
445
447
|
#### Conversion tracking
|
446
448
|
|
@@ -4,7 +4,8 @@ class Rack::Tracker::Criteo < Rack::Tracker::Handler
|
|
4
4
|
# event name => event key name, e.g. { event: 'setSiteType', type: '' }
|
5
5
|
set_site_type: :type,
|
6
6
|
set_account: :account,
|
7
|
-
set_customer_id: :id
|
7
|
+
set_customer_id: :id,
|
8
|
+
set_email: :email
|
8
9
|
}
|
9
10
|
|
10
11
|
class Event < OpenStruct
|
@@ -1,17 +1,8 @@
|
|
1
1
|
class Rack::Tracker::GoogleTagManager < Rack::Tracker::Handler
|
2
2
|
|
3
3
|
class Push < OpenStruct
|
4
|
-
|
5
4
|
def write
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
def event
|
10
|
-
attributes.stringify_values.compact
|
11
|
-
end
|
12
|
-
|
13
|
-
def attributes
|
14
|
-
to_h.slice(:name, :value)
|
5
|
+
to_h.to_json
|
15
6
|
end
|
16
7
|
end
|
17
8
|
|
@@ -12,8 +12,8 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
12
12
|
})(window,document,'script','dataLayer','<%= container %>');</script>
|
13
13
|
|
14
14
|
<script>
|
15
|
-
dataLayer.push(
|
15
|
+
dataLayer.push(
|
16
16
|
<%= events.map(&:write).join(', ') %>
|
17
|
-
|
17
|
+
);
|
18
18
|
</script>
|
19
19
|
<% end %>
|
data/lib/rack/tracker/version.rb
CHANGED
@@ -18,15 +18,14 @@ RSpec.describe Rack::Tracker::GoogleTagManager do
|
|
18
18
|
def env
|
19
19
|
{'tracker' => {
|
20
20
|
'google_tag_manager' => [
|
21
|
-
{ 'class_name' => 'Push', '
|
22
|
-
{ 'class_name' => 'Push', 'name' => 'price', 'value' => 50 }
|
21
|
+
{ 'class_name' => 'Push', 'page' => 'Cart', 'price' => 50, 'content_ids' => ['sku_1', 'sku_2', 'sku_3'] }
|
23
22
|
]
|
24
23
|
}}
|
25
24
|
end
|
26
25
|
|
27
26
|
subject { described_class.new(env, container: 'somebody').render }
|
28
27
|
it "will show events" do
|
29
|
-
expect(subject).to match(%r{
|
28
|
+
expect(subject).to match(%r{"page":"Cart","price":50,"content_ids":\["sku_1","sku_2","sku_3"\]})
|
30
29
|
end
|
31
30
|
end
|
32
31
|
end
|
@@ -6,7 +6,8 @@ RSpec.describe "Criteo Integration" do
|
|
6
6
|
tracker.handler(:criteo, {
|
7
7
|
set_account: '1234',
|
8
8
|
set_customer_id: ->(env){ '4711' },
|
9
|
-
set_site_type: ->(env){ 'm' }
|
9
|
+
set_site_type: ->(env){ 'm' },
|
10
|
+
set_email: 'user@test.com'
|
10
11
|
})
|
11
12
|
end
|
12
13
|
visit '/'
|
@@ -19,6 +20,7 @@ RSpec.describe "Criteo Integration" do
|
|
19
20
|
expect(page.find("body")).to have_content "window.criteo_q.push({\"event\":\"setAccount\",\"account\":\"1234\"});"
|
20
21
|
expect(page.find("body")).to have_content "window.criteo_q.push({\"event\":\"setSiteType\",\"type\":\"m\"});"
|
21
22
|
expect(page.find("body")).to have_content "window.criteo_q.push({\"event\":\"setCustomerId\",\"id\":\"4711\"});"
|
23
|
+
expect(page.find("body")).to have_content "window.criteo_q.push({\"event\":\"setEmail\",\"email\":\"user@test.com\"});"
|
22
24
|
|
23
25
|
# events
|
24
26
|
expect(page.find("body")).to have_content "window.criteo_q.push({\"event\":\"viewItem\",\"item\":\"P001\"});"
|
@@ -11,8 +11,8 @@ RSpec.describe "Google Tag Manager Integration" do
|
|
11
11
|
subject { page }
|
12
12
|
|
13
13
|
it "embeds the script tag with tracking event from the controller action" do
|
14
|
-
expect(page.find("body")).to have_content
|
15
|
-
expect(page.find("body")).to have_content(
|
14
|
+
expect(page.find("body")).to have_content 'GTM-ABCDEF'
|
15
|
+
expect(page.find("body")).to have_content "dataLayer.push( {\"click\":\"X\",\"price\":10}, {\"transactionProducts\":[{\"sku\":\"DD44\",\"name\":\"T-shirt\"},{\"sku\":\"DD66\",\"name\":\"Jeans\"}]} );"
|
16
16
|
end
|
17
17
|
|
18
|
-
end
|
18
|
+
end
|
@@ -42,8 +42,8 @@ class MetalController < ActionController::Metal
|
|
42
42
|
|
43
43
|
def google_tag_manager
|
44
44
|
tracker do |t|
|
45
|
-
t.google_tag_manager :push, {
|
46
|
-
t.google_tag_manager :push, { name: '
|
45
|
+
t.google_tag_manager :push, { click: 'X', price: 10 }
|
46
|
+
t.google_tag_manager :push, transactionProducts: [{ sku: 'DD44', name: 'T-shirt' }, { sku: 'DD66', name: 'Jeans' }]
|
47
47
|
end
|
48
48
|
render "metal/index"
|
49
49
|
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.0
|
4
|
+
version: 1.1.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: 2015-10
|
12
|
+
date: 2015-11-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|