From 4d5c7bd63b47ea9eddad58872ef883a26204d7d2 Mon Sep 17 00:00:00 2001 From: Nacho Abad Date: Mon, 8 Oct 2018 15:53:40 +0200 Subject: [PATCH 1/2] adds optimize_id to allowed tracker options --- README.md | 1 + lib/rack/tracker/google_global/google_global.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b7ac59..499098a 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ request.env['tracker'] = { * `:link_attribution` - Enables [Enhanced Link Attribution](https://developers.google.com/analytics/devguides/collection/gtagjs/enhanced-link-attribution). * `:allow_display_features` - Can be used to disable [Display Features](https://developers.google.com/analytics/devguides/collection/gtagjs/display-features). * `:custom_map` - Used to [Configure and send custom dimensions](https://developers.google.com/analytics/devguides/collection/gtagjs/custom-dims-mets) +* `:optimize_id` - Used to [Deploy Optimize using gtag](https://support.google.com/optimize/answer/7513085) * `:set` - Used in the [set command to configure multiple properties](https://developers.google.com/analytics/devguides/collection/gtagjs/setting-values) #### Trackers diff --git a/lib/rack/tracker/google_global/google_global.rb b/lib/rack/tracker/google_global/google_global.rb index 5075906..764ee02 100644 --- a/lib/rack/tracker/google_global/google_global.rb +++ b/lib/rack/tracker/google_global/google_global.rb @@ -1,7 +1,7 @@ class Rack::Tracker::GoogleGlobal < Rack::Tracker::Handler self.allowed_tracker_options = [:cookie_domain, :user_id, :link_attribution, :allow_display_features, :anonymize_ip, - :custom_map] + :custom_map, :optimize_id] class Page < OpenStruct def params From cc3cdc9addd28d1219ab33ab063a06ed04cf16c7 Mon Sep 17 00:00:00 2001 From: Antonio Tapiador del Dujo Date: Tue, 15 Jan 2019 12:56:42 +0100 Subject: [PATCH 2/2] Support for google global events --- .../tracker/google_global/google_global.rb | 28 ++++++++++++++- .../google_global/template/google_global.erb | 4 +++ spec/handler/google_global_spec.rb | 36 +++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/lib/rack/tracker/google_global/google_global.rb b/lib/rack/tracker/google_global/google_global.rb index 764ee02..4214ea3 100644 --- a/lib/rack/tracker/google_global/google_global.rb +++ b/lib/rack/tracker/google_global/google_global.rb @@ -9,8 +9,30 @@ def params end end + class Event < OpenStruct + PREFIXED_PARAMS = %i[category label] + LITERAL_PARAMS = %i[value] + PARAMS = PREFIXED_PARAMS + LITERAL_PARAMS + + def params + Hash[to_h.slice(*PARAMS).map { |key, value| [param_key(key), value] }] + end + + private + + def param_key(key) + PREFIXED_PARAMS.include?(key) ? "event_#{key}" : key.to_s + end + end + def pages - events # TODO: Filter pages after Event is implemented + select_handler_events(Page) + end + + alias handler_events events + + def events + select_handler_events(Event) end def trackers @@ -29,4 +51,8 @@ def build_set_options value = options[:set] value.respond_to?(:call) ? value.call(env) : value end + + def select_handler_events(klass) + handler_events.select { |event| event.is_a?(klass) } + end end diff --git a/lib/rack/tracker/google_global/template/google_global.erb b/lib/rack/tracker/google_global/template/google_global.erb index ea656a3..b6141a8 100644 --- a/lib/rack/tracker/google_global/template/google_global.erb +++ b/lib/rack/tracker/google_global/template/google_global.erb @@ -15,5 +15,9 @@ <% end %> gtag('config', '<%= tracker[:id] %>', <%= tracker_options.to_json %>); <% end %> + + <% events.each do |event| %> + gtag('event', '<%= event.action %>', <%= event.params.to_json %>); + <% end %> <% end %> diff --git a/spec/handler/google_global_spec.rb b/spec/handler/google_global_spec.rb index d955bdd..dcf6fcc 100644 --- a/spec/handler/google_global_spec.rb +++ b/spec/handler/google_global_spec.rb @@ -184,4 +184,40 @@ def env end end end + + describe "with events" do + subject { described_class.new(env, trackers: [{ id: 'somebody' }]).render } + + describe "default" do + def env + {'tracker' => { + 'google_global' => [ + { 'class_name' => 'Event', 'action' => 'login' } + ] + }} + end + + it "will show the event" do + expect(subject).to match(%r{gtag\('event', 'login', {}\);}) + end + end + + describe "with event parameters" do + def env + {'tracker' => { + 'google_global' => [ + { 'class_name' => 'Event', + 'action' => 'login', + 'category' => 'engagement', + 'label' => 'Github', + 'value' => 5 } + ] + }} + end + + it "will show event" do + expect(subject).to match(%r{gtag\('event', 'login', {\"event_category\":\"engagement\",\"event_label\":\"Github\",\"value\":5}\);}) + end + end + end end