Class: Rack::Tracker

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/tracker.rb,
lib/rack/tracker/railtie.rb,
lib/rack/tracker/version.rb,
lib/rack/tracker/controller.rb

Defined Under Namespace

Modules: Controller, JavaScriptHelper Classes: Bing, Criteo, Facebook, FacebookPixel, GoSquared, GoogleAdwordsConversion, GoogleAnalytics, GoogleGlobal, GoogleTagManager, Handler, HandlerDelegator, HandlerSet, Hotjar, Railtie, Vwo, Zanox

Constant Summary collapse

EVENT_TRACKING_KEY =
'tracker'
VERSION =
'1.9.0'

Instance Method Summary collapse

Constructor Details

#initialize(app, &block) ⇒ Tracker

Returns a new instance of Tracker.



32
33
34
35
# File 'lib/rack/tracker.rb', line 32

def initialize(app, &block)
  @app = app
  @handlers = Rack::Tracker::HandlerSet.new(&block)
end

Instance Method Details

#call(env) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/rack/tracker.rb', line 37

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] ||= {}

  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

  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