class WebTools::Middleware::Debugger::InProcessDebugger

Public Class Methods

new(app) click to toggle source
# File lib/web_tools/middleware/debugger.rb, line 39
def initialize(app)
  @app = app
  @debugger_app = WebTools::Debugger.new
  load_template
end

Public Instance Methods

application_call(env, result) click to toggle source
# File lib/web_tools/middleware/debugger.rb, line 65
def application_call(env, result)
  if result.is_a? Maglev::Debugger::Process
    raise result.exception if result[:skip_debugger]
    result[:skip_debugger] = false
    @@debugged_path = env["PATH_INFO"]
    @@debugged_process = result.thread.object_id
    @@debugger_active = true
    @@debugged_exception = result.exception.message
    [500, {"Content-Type" => "text/html"}, info_message(env)]
  else
    result
  end
end
debugger_active?() click to toggle source
# File lib/web_tools/middleware/debugger.rb, line 51
def debugger_active?
  defined?(@@debugger_active) && !!@@debugger_active
end
info_message(env) click to toggle source
# File lib/web_tools/middleware/debugger.rb, line 79
def info_message(env)
  [render_template(@@debugged_exception,
                   env['rack.url_scheme'].to_s + "://" +
                   env['HTTP_HOST'].to_s +
                   env['SCRIPT_NAME'].to_s + "/process/" +
                   @@debugged_process.to_s)]
end
load_template() click to toggle source
# File lib/web_tools/middleware/debugger.rb, line 45
def load_template
  file = File.expand_path(__FILE__)
  _, @template = ::IO.read(file).gsub("\r\n", "\n").split(/^__END__$/, 2)
  ERB.new(@template).def_method(self.class, 'render_template(title, path)')
end
wrap_call(env) { || ... } click to toggle source
# File lib/web_tools/middleware/debugger.rb, line 55
def wrap_call(env)
  if debugger_active?
    response = @debugger_app.call(env)
    response[1]['Access-Control-Allow-Origin'] = "*"
    response
  else
    application_call(env, yield)
  end
end