class PhusionPassenger::HTMLTemplate
A convenience utility class for rendering our error pages.
def []=(name, value)
def []=(name, value) instance_variable_set("@#{name}".to_sym, value) return self end
def backtrace_html_for(error)
def backtrace_html_for(error) html = %Q{ <table class="backtrace"> <tr class="headers"> <th>#</th> <th>File</th> <th>Line</th> <th>Location</th> </tr> } in_passenger = false error.backtrace.each_with_index do |item, i| filename, line, location = item.split(':', 3) in_passenger ||= starts_with(filename, PASSENGER_FILE_PREFIX) class_names = in_passenger ? "passenger" : "framework" class_names << ((i & 1 == 0) ? " uneven" : " even") html << %Q{ <tr class="backtrace_line #{class_names}"> <td class="index">#{i}</td> <td class="filename">#{filename}</td> <td class="line">#{line}</td> <td class="location">#{location}</td> </tr> } end html << "</table>\n" return html end
def get_binding
def get_binding return binding end
def include(filename)
def include(filename) return File.read("#{TEMPLATE_DIR}/#{filename}") end
def initialize(template_name, options = {})
def initialize(template_name, options = {}) @buffer = '' @template = ERB.new(File.read("#{TEMPLATE_DIR}/#{template_name}.html.erb"), nil, nil, '@buffer') options.each_pair do |name, value| self[name] = value end end
def layout(template_name, options = {})
def layout(template_name, options = {}) options.each_pair do |name, value| self[name] = value end layout_template = ERB.new(File.read("#{TEMPLATE_DIR}/#{template_name}.html.erb")) b = get_binding do old_size = @buffer.size yield @buffer.slice!(old_size .. @buffer.size) end @buffer << layout_template.result(b) end
def result
def result return @template.result(binding) end
def starts_with(str, substr)
def starts_with(str, substr) return str[0 .. substr.size - 1] == substr end