Module: Merb::Dispatcher::DefaultExceptionHelper

Defined in:
lib/merb-core/dispatch/default_exception/default_exception.rb

Overview

:api: private

Instance Method Summary collapse

Instance Method Details

#error_codes(exception) ⇒ Object

:api: private



12
13
14
15
16
17
18
19
# File 'lib/merb-core/dispatch/default_exception/default_exception.rb', line 12

def error_codes(exception)
  if @show_details
    message, message_details = exception.message.split("\n", 2)
    "<h2>#{escape_html(message)}</h2><p>#{escape_html(message_details)}</p>"
  else
    "<h2>Sorry about that...</h2>"
  end
end

#frame_details(line) ⇒ Object

:api: private



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/merb-core/dispatch/default_exception/default_exception.rb', line 22

def frame_details(line)
  if (match = line.match(/^(.+):(\d+):(.+)$/))
    filename = match[1]
    lineno = match[2]
    location = match[3]
    if filename.index(Merb.framework_root) == 0
      type = "framework"
      shortname = Pathname.new(filename).relative_path_from(Pathname.new(Merb.framework_root))
    elsif filename.index(Merb.root) == 0
      type = "app"
      shortname = Pathname.new(filename).relative_path_from(Pathname.new(Merb.root))
    elsif path = Gem.path.find {|p| filename.index(p) == 0}
      type = "gem"
      shortname = Pathname.new(filename).relative_path_from(Pathname.new(path))
    else
      type = "other"
      shortname = filename
    end
    [type, shortname, filename, lineno, location]
  else
    ['', '', '', nil, nil]
  end
end

#humanize_exception(e) ⇒ Object

:api: private



7
8
9
# File 'lib/merb-core/dispatch/default_exception/default_exception.rb', line 7

def humanize_exception(e)
  e.class.name.split("::").last.gsub(/([a-z])([A-Z])/, '\1 \2')
end

#jar?(filename) ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/merb-core/dispatch/default_exception/default_exception.rb', line 66

def jar?(filename)
  filename.match(/jar\!/)
end

#listing(key, value, arr) ⇒ Object

:api: private



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/merb-core/dispatch/default_exception/default_exception.rb', line 47

def listing(key, value, arr)
  ret   =  []
  ret   << "<table class=\"listing\" style=\"display: none\">"
  ret   << "  <thead>"
  ret   << "    <tr><th width='25%'>#{key}</th><th width='75%'>#{value}</th></tr>"
  ret   << "  </thead>"
  ret   << "  <tbody>"
  (arr || []).each_with_index do |(key, val), i|
    klass = i % 2 == 0 ? "even" : "odd"
    ret << "    <tr class=\"#{klass}\"><td>#{key}</td><td>#{val.inspect}</td></tr>"
  end
  if arr.blank?
    ret << "    <tr class='odd'><td colspan='2'>None</td></tr>"
  end
  ret   << "  </tbody>"
  ret   << "</table>"
  ret.join("\n")
end

#render_source(filename, line) ⇒ Object

:api: private



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/merb-core/dispatch/default_exception/default_exception.rb', line 76

def render_source(filename, line)
  line = line.to_i
  ret   =  []
  ret   << "<tr class='source'>"
  ret   << "  <td class='collapse'></td>"
  str   =  "  <td class='code' colspan='2'><div>"
  
  __caller_lines__(filename, line, 5) do |lline, lcode|
    str << "<a href='txmt://open?url=file://#{filename}&amp;line=#{lline}'>#{lline}</a>"
    str << "<em>" if line == lline
    str << Erubis::XmlHelper.escape_xml(lcode)
    str << "</em>" if line == lline
    str << "\n"
  end
  str   << "</div></td>"
  ret   << str
  ret   << "</tr>"
  ret.join("\n")
end

#textmate_url(filename, line) ⇒ Object

:api: private



71
72
73
# File 'lib/merb-core/dispatch/default_exception/default_exception.rb', line 71

def textmate_url(filename, line)
  "<a href='txmt://open?url=file://#{filename}&amp;line=#{line}'>#{line}</a>"
end