Class: WebTools::Middleware::Debugger::InProcessDebugger

Inherits:
Object
  • Object
show all
Defined in:
lib/web_tools/middleware/debugger.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ InProcessDebugger

Returns a new instance of InProcessDebugger.



39
40
41
42
43
# File 'lib/web_tools/middleware/debugger.rb', line 39

def initialize(app)
  @app = app
  @debugger_app = WebTools::Debugger.new
  load_template
end

Instance Method Details

#application_call(env, result) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# 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?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/web_tools/middleware/debugger.rb', line 51

def debugger_active?
  defined?(@@debugger_active) && !!@@debugger_active
end

#info_message(env) ⇒ Object



79
80
81
82
83
84
85
# 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_templateObject



45
46
47
48
49
# 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) ⇒ Object



55
56
57
58
59
60
61
62
63
# 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