From 68c90ab0194a56493ceaafa16f0b5e6b7e36201f Mon Sep 17 00:00:00 2001 From: Nicholas Seckar Date: Fri, 26 Aug 2005 22:37:36 +0000 Subject: Render refactoring; render error reporting fixes git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2058 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/template_error.rb | 44 ++++++++++++++++------------ 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'actionpack/lib/action_view/template_error.rb') diff --git a/actionpack/lib/action_view/template_error.rb b/actionpack/lib/action_view/template_error.rb index 5fa7f2db5e..28f11675cf 100644 --- a/actionpack/lib/action_view/template_error.rb +++ b/actionpack/lib/action_view/template_error.rb @@ -7,16 +7,13 @@ module ActionView attr_reader :original_exception def initialize(base_path, file_name, assigns, source, original_exception) - @base_path, @file_name, @assigns, @source, @original_exception = - base_path, file_name, assigns, source, original_exception + @base_path, @assigns, @source, @original_exception = + base_path, assigns, source, original_exception + @file_name = File.expand_path file_name end def message - if original_exception.message.include?("(eval):") - original_exception.message.scan(/\(eval\):(?:[0-9]*):in `.*'(.*)/).first.first - else - original_exception.message - end + original_exception.message end def sub_template_message @@ -42,21 +39,20 @@ module ActionView extract.join end - + def sub_template_of(file_name) @sub_templates ||= [] @sub_templates << file_name end def line_number - trace = @original_exception.backtrace.join - if trace.include?("erb):") - trace.scan(/\((?:erb)\):([0-9]*)/).first.first.to_i - elsif trace.include?("eval):") - trace.scan(/\((?:eval)\):([0-9]*)/).first.first.to_i - else - 1 + if @file_name + regexp = /#{Regexp.escape @file_name}(?:\(.*?\))?:(\d+)/ # A regexp to match a line number in our file + [@original_exception.message, @original_exception.backtrace].flatten.each do |line| + return $1.to_i if regexp =~ line + end end + 0 end def file_name @@ -79,12 +75,24 @@ module ActionView private def strip_base_path(file_name) + file_name = File.expand_path(file_name).gsub(/^#{Regexp.escape File.expand_path(RAILS_ROOT)}/, '') file_name.gsub(@base_path, "") end + if defined?(RAILS_ROOT) + RailsRootRegexp = %r((#{Regexp.escape RAILS_ROOT}|#{Regexp.escape File.expand_path(RAILS_ROOT)})/(.*)?) + else + RailsRootRegexp = /^()(.*)$/ + end + def clean_backtrace(exception) - base_dir = File.expand_path(File.dirname(__FILE__) + "/../../../../") - exception.backtrace.collect { |line| line.gsub(base_dir, "").gsub("/public/../config/environments/../../", "").gsub("/public/../", "") } + exception.backtrace.collect do |line| + line.gsub %r{^(\s*)(/[-\w\d\./]+)} do + leading, path = $1, $2 + path = $2 if RailsRootRegexp =~ path + leading + path + end + end end end -end \ No newline at end of file +end -- cgit v1.2.3