A convenience utility class for rendering our error pages.
# File lib/phusion_passenger/html_template.rb, line 31 def initialize(template_name, options = {}) @buffer = '' @template = ERB.new(File.read("#{TEMPLATES_DIR}/#{template_name}.html.erb"), nil, nil, '@buffer') options.each_pair do |name, value| self[name] = value end end
# File lib/phusion_passenger/html_template.rb, line 40 def []=(name, value) instance_variable_set("@#{name}".to_sym, value) return self end
# File lib/phusion_passenger/html_template.rb, line 45 def result return @template.result(binding) end
# File lib/phusion_passenger/html_template.rb, line 73 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, "#{LIBDIR}/phusion_passenger") 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
# File lib/phusion_passenger/html_template.rb, line 52 def get_binding return binding end
# File lib/phusion_passenger/html_template.rb, line 69 def include(filename) return File.read("#{TEMPLATES_DIR}/#{filename}") end
# File lib/phusion_passenger/html_template.rb, line 56 def layout(template_name, options = {}) options.each_pair do |name, value| self[name] = value end layout_template = ERB.new(File.read("#{TEMPLATES_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
# File lib/phusion_passenger/html_template.rb, line 102 def starts_with(str, substr) return str[0 .. substr.size - 1] == substr end