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