From 0c454f3ac5559a84508cc42fcf8b725d70614de2 Mon Sep 17 00:00:00 2001 From: bumi Date: Fri, 9 Jun 2017 17:41:27 +0200 Subject: [PATCH 1/2] Add support for different tracker locations for google tag manager This allows handlers to define an #inject(response) method to directly manipulate the response html. The google tag manager handler uses this to inject a snippet into the head and one snippet into the body (as required by google) --- lib/rack/tracker/handler.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/rack/tracker/handler.rb b/lib/rack/tracker/handler.rb index cf78dcc..1c571b4 100644 --- a/lib/rack/tracker/handler.rb +++ b/lib/rack/tracker/handler.rb @@ -21,6 +21,14 @@ def events def render raise NotImplementedError.new('needs implementation') + def inject(response) + # Sub! is enough, in well formed html there's only one head or body tag. + # Block syntax need to be used, otherwise backslashes in input will mess the output. + # @see http://stackoverflow.com/a/4149087/518204 and https://github.com/railslove/rack-tracker/issues/50 + response.sub! %r{} do |m| + self.render << m.to_s + end + response end def inject(response) From c65b797c9efd758a8e28936c81c820d4c7e2d273 Mon Sep 17 00:00:00 2001 From: bumi Date: Fri, 16 Jun 2017 16:15:03 +0200 Subject: [PATCH 2/2] Fix google tag manager Google Tag Manager currently did not support attributes on the body/head tag. --- lib/rack/tracker/google_tag_manager/google_tag_manager.rb | 4 ++-- .../template/google_tag_manager_head.erb | 7 +------ spec/fixtures/views/layouts/application.html.erb | 2 +- spec/integration/google_tag_manager_integration_spec.rb | 2 +- spec/integration/rails_integration_spec.rb | 2 +- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/rack/tracker/google_tag_manager/google_tag_manager.rb b/lib/rack/tracker/google_tag_manager/google_tag_manager.rb index 06d0c08..e36b8c0 100644 --- a/lib/rack/tracker/google_tag_manager/google_tag_manager.rb +++ b/lib/rack/tracker/google_tag_manager/google_tag_manager.rb @@ -10,10 +10,10 @@ def inject(response) # Sub! is enough, in well formed html there's only one head or body tag. # Block syntax need to be used, otherwise backslashes in input will mess the output. # @see http://stackoverflow.com/a/4149087/518204 and https://github.com/railslove/rack-tracker/issues/50 - response.sub! %r{} do |m| + response.sub! %r{} do |m| m.to_s << self.render_head end - response.sub! %r{} do |m| + response.sub! %r{} do |m| m.to_s << self.render_body end response diff --git a/lib/rack/tracker/google_tag_manager/template/google_tag_manager_head.erb b/lib/rack/tracker/google_tag_manager/template/google_tag_manager_head.erb index f096851..5b4349d 100644 --- a/lib/rack/tracker/google_tag_manager/template/google_tag_manager_head.erb +++ b/lib/rack/tracker/google_tag_manager/template/google_tag_manager_head.erb @@ -1,12 +1,7 @@ <% if container %> - - - +

welcome to metal#index