aboutsummaryrefslogtreecommitdiffstats
path: root/actionview
diff options
context:
space:
mode:
authorJan Szumiec <jan.szumiec@gmail.com>2013-08-07 13:34:24 +0100
committerLucas Mazza <lucastmazza@gmail.com>2014-06-19 14:53:18 -0300
commit490f25034d62817f9315084ddc0506ff6bc65055 (patch)
treec5d80b6668f2bc8a86215dffb63073eb8625b61c /actionview
parent2b617783ad37e1f008499ba8389f50d67e7b78b1 (diff)
downloadrails-490f25034d62817f9315084ddc0506ff6bc65055.tar.gz
rails-490f25034d62817f9315084ddc0506ff6bc65055.tar.bz2
rails-490f25034d62817f9315084ddc0506ff6bc65055.zip
highlight() now accepts regular expressions as well.
Diffstat (limited to 'actionview')
-rw-r--r--actionview/lib/action_view/helpers/text_helper.rb10
-rw-r--r--actionview/test/template/text_helper_test.rb10
2 files changed, 15 insertions, 5 deletions
diff --git a/actionview/lib/action_view/helpers/text_helper.rb b/actionview/lib/action_view/helpers/text_helper.rb
index 2109b2724c..e860577d6f 100644
--- a/actionview/lib/action_view/helpers/text_helper.rb
+++ b/actionview/lib/action_view/helpers/text_helper.rb
@@ -123,7 +123,9 @@ module ActionView
text
else
highlighter = options.fetch(:highlighter, '<mark>\1</mark>')
- match = Array(phrases).map { |p| Regexp.escape(p) }.join('|')
+ match = Array(phrases).map do |p|
+ Regexp === p ? p.to_s : Regexp.escape(p)
+ end.join('|')
text.gsub(/(#{match})(?![^<]*?>)/i, highlighter)
end.html_safe
end
@@ -156,11 +158,11 @@ module ActionView
return unless text && phrase
separator = options.fetch(:separator, nil) || ""
- if Regexp === phrase
+ case phrase
+ when Regexp
regex = phrase
else
- phrase = Regexp.escape(phrase)
- regex = /#{phrase}/i
+ regex = /#{Regexp.escape(phrase)}/i
end
return unless matches = text.match(regex)
diff --git a/actionview/test/template/text_helper_test.rb b/actionview/test/template/text_helper_test.rb
index b3bcf4d67b..2467c9527a 100644
--- a/actionview/test/template/text_helper_test.rb
+++ b/actionview/test/template/text_helper_test.rb
@@ -222,6 +222,11 @@ class TextHelperTest < ActionView::TestCase
)
end
+ def test_highlight_accepts_regexp
+ assert_equal("This day was challenging for judge <mark>Allen</mark> and his colleagues.",
+ highlight("This day was challenging for judge Allen and his colleagues.", /\ballen\b/i))
+ end
+
def test_highlight_with_multiple_phrases_in_one_pass
assert_equal %(<em>wow</em> <em>em</em>), highlight('wow em', %w(wow em), :highlighter => '<em>\1</em>')
end
@@ -264,9 +269,12 @@ class TextHelperTest < ActionView::TestCase
assert_equal("...is a beautiful morn...", excerpt("This is a beautiful morning", "beautiful", :radius => 5))
assert_equal("This is a...", excerpt("This is a beautiful morning", "this", :radius => 5))
assert_equal("...iful morning", excerpt("This is a beautiful morning", "morning", :radius => 5))
+ assert_nil excerpt("This is a beautiful morning", "day")
+ end
+
+ def test_excerpt_with_regex
assert_equal("...udge Allen and...", excerpt("This day was challenging for judge Allen and his colleagues.", /\ballen\b/i, :radius => 5))
assert_equal("...judge Allen and...", excerpt("This day was challenging for judge Allen and his colleagues.", /\ballen\b/i, :radius => 1, :separator => ' '))
- assert_nil excerpt("This is a beautiful morning", "day")
end
def test_excerpt_should_not_be_html_safe