rack-tracker 1.0.2 → 1.1.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/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
|