diff --git a/lib/rack/tracker.rb b/lib/rack/tracker.rb index d549a53..23cf5c5 100644 --- a/lib/rack/tracker.rb +++ b/lib/rack/tracker.rb @@ -33,24 +33,28 @@ def initialize(app, &block) end def call(env) - @status, @headers, @body = @app.call(env) - return [@status, @headers, @body] unless html? - response = Rack::Response.new([], @status, @headers) - - env[EVENT_TRACKING_KEY] ||= {} + @status, @headers, @body = @app.call(env) + return [@status, @headers, @body] unless html? + isAMP = false + if @body.class.name == "ActionDispatch" + isAMP = @body.body.include? "amp-img" + end - if session = env["rack.session"] - env[EVENT_TRACKING_KEY].deep_merge!(session.delete(EVENT_TRACKING_KEY) || {}) { |key, old, new| Array.wrap(old) + Array.wrap(new) } - end + return [@status, @headers, @body] if (env['REQUEST_PATH'].match(/^*amp/) || isAMP) + response = Rack::Response.new([], @status, @headers) - if response.redirection? && session - session[EVENT_TRACKING_KEY] = env[EVENT_TRACKING_KEY] - end + env[EVENT_TRACKING_KEY] ||= {} - @body.each { |fragment| response.write inject(env, fragment) } - @body.close if @body.respond_to?(:close) + if session = env["rack.session"] + env[EVENT_TRACKING_KEY].deep_merge!(session.delete(EVENT_TRACKING_KEY) || {}) { |key, old, new| Array.wrap(old) + Array.wrap(new) } + end - response.finish + if response.redirection? && session + session[EVENT_TRACKING_KEY] = env[EVENT_TRACKING_KEY] + end + @body.each { |fragment| response.write inject(env, fragment) } + @body.close if @body.respond_to?(:close) + response.finish end private diff --git a/lib/rack/tracker/google_analytics/template/google_analytics.erb b/lib/rack/tracker/google_analytics/template/google_analytics.erb index d56f043..1dd591a 100644 --- a/lib/rack/tracker/google_analytics/template/google_analytics.erb +++ b/lib/rack/tracker/google_analytics/template/google_analytics.erb @@ -1,4 +1,4 @@ -