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 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