aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-05-03 12:54:52 +0200
committerJosé Valim <jose.valim@gmail.com>2010-05-03 12:59:48 +0200
commit8ae9b05fa0ca579ecabcd563e6ba75ea0f44f074 (patch)
treedc8f820019681e695f5e4c26f49095a530e4f82d /railties/lib/rails
parent0e00f428a816cd24ca645794385fd7b71dbfed73 (diff)
downloadrails-8ae9b05fa0ca579ecabcd563e6ba75ea0f44f074.tar.gz
rails-8ae9b05fa0ca579ecabcd563e6ba75ea0f44f074.tar.bz2
rails-8ae9b05fa0ca579ecabcd563e6ba75ea0f44f074.zip
Make backtrace_cleaner work as expected. Prior to this patch, the Full Trace rarely showed the full trace. Also, increase performance considerably.
Diffstat (limited to 'railties/lib/rails')
-rw-r--r--railties/lib/rails/backtrace_cleaner.rb23
1 files changed, 11 insertions, 12 deletions
diff --git a/railties/lib/rails/backtrace_cleaner.rb b/railties/lib/rails/backtrace_cleaner.rb
index ee2635d4cd..bedefaa51c 100644
--- a/railties/lib/rails/backtrace_cleaner.rb
+++ b/railties/lib/rails/backtrace_cleaner.rb
@@ -2,29 +2,28 @@ require 'active_support/backtrace_cleaner'
module Rails
class BacktraceCleaner < ActiveSupport::BacktraceCleaner
- ERB_METHOD_SIG = /:in `_run_erb_.*/
- APP_DIRS = %w( app config lib test )
+ APP_DIRS_PATTERN = /^\/?(app|config|lib|test)/
+ RENDER_TEMPLATE_PATTERN = /:in `_render_template_\w*'/
def initialize
super
add_filter { |line| line.sub("#{Rails.root}/", '') }
- add_filter { |line| line.sub(ERB_METHOD_SIG, '') }
+ add_filter { |line| line.sub(RENDER_TEMPLATE_PATTERN, '') }
add_filter { |line| line.sub('./', '/') } # for tests
add_gem_filters
-
- add_silencer { |line| !APP_DIRS.any? { |dir| line =~ /^\/?#{dir}/ } }
+ add_silencer { |line| line !~ APP_DIRS_PATTERN }
end
private
def add_gem_filters
- return unless defined? Gem
- (Gem.path + [Gem.default_dir]).uniq.each do |path|
- # http://gist.github.com/30430
- add_filter { |line|
- line.sub(%r{(#{path})/gems/([^/]+)-([0-9.]+)/(.*)}, '\2 (\3) \4')
- }
- end
+ return unless defined?(Gem)
+
+ gems_paths = (Gem.path + [Gem.default_dir]).uniq.map!{ |p| Regexp.escape(p) }
+ return if gems_paths.empty?
+
+ gems_regexp = %r{(#{gems_paths.join('|')})/gems/([^/]+)-([\w\.]+)/(.*)}
+ add_filter { |line| line.sub(gems_regexp, '\2 (\3) \4') }
end
end