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, Drift, Facebook, FacebookPixel, GoSquared, GoogleAdwordsConversion, GoogleAnalytics, GoogleGlobal, GoogleTagManager, Handler, HandlerDelegator, HandlerSet, Heap, Hotjar, Hubspot, Railtie, Vwo, Zanox

Constant Summary collapse

EVENT_TRACKING_KEY =
'tracker'
VERSION =
'1.13.0'

Instance Method Summary collapse

Constructor Details

#initialize(app, &block) ⇒ Tracker

Returns a new instance of Tracker.



35
36
37
38
# File 'lib/rack/tracker.rb', line 35

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

Instance Method Details

#_call(env) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rack/tracker.rb', line 44

def _call(env)
  status, headers, body = @app.call(env)
  return [status, headers, body] unless headers['Content-Type'] =~ /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

#call(env) ⇒ Object



40
41
42
# File 'lib/rack/tracker.rb', line 40

def call(env)
  dup._call(env)
end