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, 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
- #_call(env) ⇒ Object
- #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.
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 |