From 9c02a3d9bacdc0571ec178bd61c5aab81a7301cf Mon Sep 17 00:00:00 2001 From: Xavier Shay and Matthew Todd Date: Tue, 1 Sep 2009 16:09:05 +0300 Subject: [PATCH] Better gem regex for Rails::BacktraceCleaner so that gems with underscores, extra hypens, and capital letters in their names are now detected --- railties/lib/rails/backtrace_cleaner.rb | 6 +++- railties/test/backtrace_cleaner_test.rb | 43 ++++++++++++++++++------------ 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/railties/lib/rails/backtrace_cleaner.rb b/railties/lib/rails/backtrace_cleaner.rb index 1605429..849def6 100644 --- a/railties/lib/rails/backtrace_cleaner.rb +++ b/railties/lib/rails/backtrace_cleaner.rb @@ -31,14 +31,16 @@ module Rails private + GEM_REGEX = "([A-Za-z0-9_-]+)-([0-9.]+)" + def add_gem_filters Gem.path.each do |path| # http://gist.github.com/30430 - add_filter { |line| line.sub(/(#{path})\/gems\/([a-z]+)-([0-9.]+)\/(.*)/, '\2 (\3) \4')} + add_filter { |line| line.sub(/(#{path})\/gems\/#{GEM_REGEX}\/(.*)/, '\2 (\3) \4')} end vendor_gems_path = Rails::GemDependency.unpacked_path.sub("#{RAILS_ROOT}/",'') - add_filter { |line| line.sub(/(#{vendor_gems_path})\/([a-z]+)-([0-9.]+)\/(.*)/, '\2 (\3) [v] \4')} + add_filter { |line| line.sub(/(#{vendor_gems_path})\/#{GEM_REGEX}\/(.*)/, '\2 (\3) [v] \4')} end end diff --git a/railties/test/backtrace_cleaner_test.rb b/railties/test/backtrace_cleaner_test.rb index 7a1b361..02dbb75 100644 --- a/railties/test/backtrace_cleaner_test.rb +++ b/railties/test/backtrace_cleaner_test.rb @@ -36,26 +36,35 @@ class BacktraceCleanerVendorGemTest < ActiveSupport::TestCase @cleaner = Rails::BacktraceCleaner.new end - test "should format installed gems correctly" do - @backtrace = [ "#{Gem.default_dir}/gems/nosuchgem-1.2.3/lib/foo.rb" ] - @result = @cleaner.clean(@backtrace) - assert_equal "nosuchgem (1.2.3) lib/foo.rb", @result[0] - end - - test "should format installed gems not in Gem.default_dir correctly" do - @target_dir = Gem.path.detect { |p| p != Gem.default_dir } - # skip this test if default_dir is the only directory on Gem.path - if @target_dir - @backtrace = [ "#{@target_dir}/gems/nosuchgem-1.2.3/lib/foo.rb" ] + + { + "nosuchgem" => "1.2.3", + "prereleasegem" => "1.2.3.4", + "thoughtbot-factory_girl" => "1.0.2", + "ZenTest" => "0.4.0", + "xaviershay-db2s3" => "0.2.0" + }.each do |gem_name, version| + test "should format installed gems correctly for #{gem_name} #{version}" do + @backtrace = [ "#{Gem.default_dir}/gems/#{gem_name}-#{version}/lib/foo.rb" ] @result = @cleaner.clean(@backtrace) - assert_equal "nosuchgem (1.2.3) lib/foo.rb", @result[0] + assert_equal "#{gem_name} (#{version}) lib/foo.rb", @result[0] + end + + test "should format installed gems not in Gem.default_dir correctly for #{gem_name} #{version}" do + @target_dir = Gem.path.detect { |p| p != Gem.default_dir } + # skip this test if default_dir is the only directory on Gem.path + if @target_dir + @backtrace = [ "#{@target_dir}/gems/#{gem_name}-#{version}/lib/foo.rb" ] + @result = @cleaner.clean(@backtrace) + assert_equal "#{gem_name} (#{version}) lib/foo.rb", @result[0] + end end - end - test "should format vendor gems correctly" do - @backtrace = [ "#{Rails::GemDependency.unpacked_path}/nosuchgem-1.2.3/lib/foo.rb" ] - @result = @cleaner.clean(@backtrace) - assert_equal "nosuchgem (1.2.3) [v] lib/foo.rb", @result[0] + test "should format vendor gems correctly for #{gem_name} #{version}" do + @backtrace = [ "#{Rails::GemDependency.unpacked_path}/#{gem_name}-#{version}/lib/foo.rb" ] + @result = @cleaner.clean(@backtrace) + assert_equal "#{gem_name} (#{version}) [v] lib/foo.rb", @result[0] + end end end -- 1.6.2.4