Harbor Documentation

Harbor::Contrib::Debug

USAGE: Add the following code to your config.ru, just before ‘run’

  if ENV['ENVIRONMENT'] == 'development'
    require "harbor/contrib/debug"
    DataObjects::Postgres.logger = Logging::Logger.root
    use Harbor::Contrib::Debug
  end

Public Class Methods

new(app)

      # File lib/harbor/contrib/debug.rb, line 13
13:       def initialize(app)
14:         @app = app
15:         @levels = %w(DEBUG INFO WARN ERROR FATAL)
16:       end

Public Instance Methods

call(env)

      # File lib/harbor/contrib/debug.rb, line 18
18:       def call(env)
19:         start_time = Time.now
20:         status, headers, body = @app.call(env)
21:         load_time = Time.now - start_time
22: 
23:         appenders = Logging::Logger.root.instance_variable_get(:@appenders)
24:         logger = appenders.find { |appender| appender.name == "harbor_debug_messages" }
25:         messages = logger.messages.dup
26:         logger.messages.clear
27: 
28:         return [status, headers, body] unless (headers["Content-Type"] =~ /html/) && body.is_a?(String)
29: 
30:         debugger = @@template.dup
31: 
32:         if body["jquery"]
33:           debugger.gsub!("{{jquery}}", "")
34:         else
35:           debugger.gsub!("{{jquery}}", '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>')
36:         end
37: 
38:         debugger.gsub!("{{load_time}}", "%2.2f" % load_time)
39: 
40:         queries = messages.map do |level, message|
41:           ("<p>[#{@levels[level]}] " + message.gsub("<", "&lt;") + "</p>") if message =~ /^\(/
42:         end.compact
43: 
44:         messages = messages.map do |level, message|
45:           ("<p>[#{@levels[level]}] " + message.gsub("<", "&lt;") + "</p>") if message !~ /^\(/
46:         end.compact
47: 
48:         debugger.gsub!("{{query_count}}", "%s" % queries.size)
49:         debugger.gsub!("{{message_count}}", "%s" % messages.size)
50: 
51:         if messages.any?
52:           debugger.gsub!("{{messages}}", '<div class="messages" style="display: none">' + messages.join("\n") + '</div>')
53:         else
54:           debugger.gsub!("{{messages}}", "")
55:         end
56: 
57:         if queries.any?
58:           debugger.gsub!("{{queries}}", '<div class="queries" style="display: none">' + queries.join("\n") + '</div>')
59:         else
60:           debugger.gsub!("{{queries}}", "")
61:         end
62: 
63:         body.gsub!("</body>", debugger + "</body>")
64:         headers["Content-Length"] = body.length.to_s
65: 
66:         [status, headers, body]
67:       end