class Rack::WebProfiler::Engine

Public Class Methods

process(request, body, status, headers) click to toggle source

Process request.

@param request [Rack::WebProfiler::Request] @param body [Array, String] @param status [Integer] @param headers [Hash]

@return [Rack::WebProfiler::Response, Rack::Response]

# File lib/rack/web_profiler/engine.rb, line 13
def process(request, body, status, headers)
  response = Rack::WebProfiler::Response.new(request, body, status, headers)
  record   = collect!(request, response)

  @token = record.token
  @url   = WebProfiler::Router.url_for_toolbar(record.token)

  response.header["X-RackWebProfiler-Token"] = @token
  response.header["X-RackWebProfiler-Url"]   = WebProfiler::Router.url_for_profiler(record.token)

  return response if !headers[CONTENT_TYPE].nil? and !headers[CONTENT_TYPE].include? "text/html"

  response = Rack::Response.new([], status, response.headers)

  if body.respond_to?(:each)
    body.each { |fragment| response.write inject(fragment) }
  elsif body.is_a? String
    response.write inject(body)
  end

  response
end
process_exception(request) click to toggle source

Process an exception.

@param request [Rack::WebProfiler::Request]

@return [Rack::Response]

# File lib/rack/web_profiler/engine.rb, line 41
def process_exception(request)
  process(request, [], 500, {})
end

Private Class Methods

collect!(request, response) click to toggle source

Collect

@param request [Rack::WebProfiler::Request] @param response [Rack::Response]

@return [WebProfiler::Model::CollectionRecord]

# File lib/rack/web_profiler/engine.rb, line 53
def collect!(request, response)
  processor = Processor.new(request.clone.freeze, response.clone.freeze)
  processor.save!

  processor.record
end
inject(body) click to toggle source

Inject the webprofiler

@param body [String]

# File lib/rack/web_profiler/engine.rb, line 63
def inject(body)
  body.gsub(%r{</body>}, template.result(binding) + "</body>")
end
template() click to toggle source

Get the javascript code template to inject.

@return [String]

# File lib/rack/web_profiler/engine.rb, line 70
def template
  @template ||= WebProfiler::View.new("async.erb")
end