diff --git a/lib/rack/tracker.rb b/lib/rack/tracker.rb index 5f3dbf9..a81aeb3 100644 --- a/lib/rack/tracker.rb +++ b/lib/rack/tracker.rb @@ -56,15 +56,11 @@ def call(env) def html?; @headers['Content-Type'] =~ /html/; end def inject(env, response) + duplicated_response = response.dup @handlers.each(env) do |handler| - # 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| - handler.render << m.to_s - end + handler.inject(duplicated_response) end - response + duplicated_response end class HandlerSet diff --git a/lib/rack/tracker/controller.rb b/lib/rack/tracker/controller.rb index a565557..801a52a 100644 --- a/lib/rack/tracker/controller.rb +++ b/lib/rack/tracker/controller.rb @@ -3,7 +3,7 @@ class Tracker module Controller def tracker(&block) if block_given? - yield(Rack::Tracker::HandlerDelegator.new(env)) + yield(Rack::Tracker::HandlerDelegator.new(respond_to?(:request) ? request.env : env)) end end end diff --git a/lib/rack/tracker/google_analytics/template/google_analytics.erb b/lib/rack/tracker/google_analytics/template/google_analytics.erb index d56f043..dddd03d 100644 --- a/lib/rack/tracker/google_analytics/template/google_analytics.erb +++ b/lib/rack/tracker/google_analytics/template/google_analytics.erb @@ -1,34 +1,41 @@ diff --git a/lib/rack/tracker/handler.rb b/lib/rack/tracker/handler.rb index cab471d..cf78dcc 100644 --- a/lib/rack/tracker/handler.rb +++ b/lib/rack/tracker/handler.rb @@ -23,6 +23,16 @@ def render raise NotImplementedError.new('needs implementation') end + 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 self.track(name, event) raise NotImplementedError.new("class method `#{__callee__}` is not implemented.") end diff --git a/lib/rack/tracker/version.rb b/lib/rack/tracker/version.rb index 9c92cfb..4249ed8 100644 --- a/lib/rack/tracker/version.rb +++ b/lib/rack/tracker/version.rb @@ -1,5 +1,5 @@ module Rack class Tracker - VERSION = '1.1.0' + VERSION = '1.1.2' end end