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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c743ccee29e6faa8c5d71c07d205f3ae15be5919
4
- data.tar.gz: efa4ee308684aabf373fb85d37a43d13605d6620
3
+ metadata.gz: 7967cb6b637c7fbcbef964f3e12a198a3e18b4d3
4
+ data.tar.gz: 090e46d7451bf2d2d3a449b04a0162bf39e8fd6e
5
5
  SHA512:
6
- metadata.gz: 579341d83332e1859080caf204e1ad92194c18e9e175194ca75701a23873dc4baa6e21fd97618d1b8d6bafdf70fdc3ee76c73fabbc2e62325c8824420ce4aa73
7
- data.tar.gz: 2549534848b0a718337d61950f56b78e2def2c7e2d723f95dec60605bf868064b8ab15057e9d70f654f43acdadc44034d60ca8a02f6706af7be4c30c962c18d4
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, { name: 'price', value: 'X' }
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
- "'#{event[:name]}': '#{event[:value]}'"
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 %>
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class Tracker
3
- VERSION = '1.0.2'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
@@ -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', 'name' => 'page', 'value' => 'Cart' },
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{'page': 'Cart', 'price': '50'})
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('GTM-ABCDEF')
15
- expect(page.find("body")).to have_content('\'click\': \'X\', \'price\': \'10\'')
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, { name: 'click', value: 'X' }
46
- t.google_tag_manager :push, { name: 'price', value: '10' }
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.2
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 00:00:00.000000000 Z
12
+ date: 2015-11-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack