class Rack::Tracker
Constants
- EVENT_TRACKING_KEY
- VERSION
Public Class Methods
new(app, &block)
click to toggle source
# File lib/rack/tracker.rb, line 35 def initialize(app, &block) @app = app @handlers = Rack::Tracker::HandlerSet.new(&block) end
Public Instance Methods
_call(env)
click to toggle source
# 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)
click to toggle source
# File lib/rack/tracker.rb, line 40 def call(env) dup._call(env) end
Private Instance Methods
inject(env, response)
click to toggle source
# File lib/rack/tracker.rb, line 67 def inject(env, response) duplicated_response = response.dup @handlers.each(env) do |handler| handler.inject(duplicated_response) end duplicated_response end