From b54560600b06112723adf286141a9cd7ed67b638 Mon Sep 17 00:00:00 2001 From: Marcel Molina Date: Mon, 26 Sep 2005 20:49:52 +0000 Subject: [PATCH] Have text helpers use built in Regexp.escape rather than home grown alternative git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2350 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/text_helper.rb | 9 ++------- actionpack/test/template/text_helper_test.rb | 6 ++++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/actionpack/lib/action_view/helpers/text_helper.rb b/actionpack/lib/action_view/helpers/text_helper.rb index cafed43aed..732e87078f 100644 --- a/actionpack/lib/action_view/helpers/text_helper.rb +++ b/actionpack/lib/action_view/helpers/text_helper.rb @@ -35,7 +35,7 @@ module ActionView # N.B.: The +phrase+ is sanitized to include only letters, digits, and spaces before use. def highlight(text, phrase, highlighter = '\1') if phrase.blank? then return text end - text.gsub(/(#{escape_regexp(phrase)})/i, highlighter) unless text.nil? + text.gsub(/(#{Regexp.escape(phrase)})/i, highlighter) unless text.nil? end # Extracts an excerpt from the +text+ surrounding the +phrase+ with a number of characters on each side determined @@ -43,7 +43,7 @@ module ActionView # excerpt("hello my world", "my", 3) => "...lo my wo..." def excerpt(text, phrase, radius = 100, excerpt_string = "...") if text.nil? || phrase.nil? then return end - phrase = escape_regexp(phrase) + phrase = Regexp.escape(phrase) if found_pos = text =~ /(#{phrase})/i start_pos = [ found_pos - radius, 0 ].max @@ -280,11 +280,6 @@ module ActionView @_cycles[name] = cycle_object end - # Returns a version of the text that's safe to use in a regular expression without triggering engine features. - def escape_regexp(text) - text.gsub(/([\\|?+*\/\)\(])/) { |m| "\\#{$1}" } - end - AUTO_LINK_RE = / ( # leading text <\w+.*?>| # leading HTML tag, or diff --git a/actionpack/test/template/text_helper_test.rb b/actionpack/test/template/text_helper_test.rb index 856c32c300..3eb70eadae 100644 --- a/actionpack/test/template/text_helper_test.rb +++ b/actionpack/test/template/text_helper_test.rb @@ -100,7 +100,13 @@ class TextHelperTest < Test::Unit::TestCase assert_equal("...iful morning", excerpt("This is a beautiful morning", "morning", 5)) assert_nil excerpt("This is a beautiful morning", "day") end + + def test_excerpt_with_regex + assert_equal('...is a beautiful! morn...', excerpt('This is a beautiful! morning', 'beautiful', 5)) + assert_equal('...is a beautiful? morn...', excerpt('This is a beautiful? morning', 'beautiful', 5)) + end + def test_word_wrap assert_equal("my very very\nvery long\nstring", word_wrap("my very very very long string", 15)) end