Class: Rack::Tracker
- Inherits:
-
Object
- Object
- Rack::Tracker
- 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
- #call(env) ⇒ Object
-
#initialize(app, &block) ⇒ Tracker
constructor
A new instance of Tracker.
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 |