aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/template_error.rb
diff options
context:
space:
mode:
authorNicholas Seckar <nseckar@gmail.com>2005-08-26 22:37:36 +0000
committerNicholas Seckar <nseckar@gmail.com>2005-08-26 22:37:36 +0000
commit68c90ab0194a56493ceaafa16f0b5e6b7e36201f (patch)
tree7db83af029c7e70c5b4732dc47e9b809e03f2bc1 /actionpack/lib/action_view/template_error.rb
parent778aeaeffedc468028fc059ab2aa81e7bdfa6de3 (diff)
downloadrails-68c90ab0194a56493ceaafa16f0b5e6b7e36201f.tar.gz
rails-68c90ab0194a56493ceaafa16f0b5e6b7e36201f.tar.bz2
rails-68c90ab0194a56493ceaafa16f0b5e6b7e36201f.zip
Render refactoring; render error reporting fixes
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2058 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib/action_view/template_error.rb')
-rw-r--r--actionpack/lib/action_view/template_error.rb44
1 files changed, 26 insertions, 18 deletions
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