From 5f5822af37b439caabf1993453e93ac6182a4c9e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 15 Mar 2008 19:59:34 +0000 Subject: Fixed that TextHelper#excerpt would include one character too many (closes #11268) [Irfy] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9030 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/text_helper.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'actionpack/lib') diff --git a/actionpack/lib/action_view/helpers/text_helper.rb b/actionpack/lib/action_view/helpers/text_helper.rb index d6dbcfbbea..599cd43721 100644 --- a/actionpack/lib/action_view/helpers/text_helper.rb +++ b/actionpack/lib/action_view/helpers/text_helper.rb @@ -92,21 +92,21 @@ module ActionView # Extracts an excerpt from +text+ that matches the first instance of +phrase+. # The +radius+ expands the excerpt on each side of the first occurrence of +phrase+ by the number of characters # defined in +radius+ (which defaults to 100). If the excerpt radius overflows the beginning or end of the +text+, - # then the +excerpt_string+ will be prepended/appended accordingly. If the +phrase+ - # isn't found, nil is returned. + # then the +excerpt_string+ will be prepended/appended accordingly. The resulting string will be stripped in any case. + # If the +phrase+ isn't found, nil is returned. # # ==== Examples # excerpt('This is an example', 'an', 5) - # # => "...s is an examp..." + # # => "...s is an exam..." # # excerpt('This is an example', 'is', 5) - # # => "This is an..." + # # => "This is a..." # # excerpt('This is an example', 'is') # # => "This is an example" # # excerpt('This next thing is an example', 'ex', 2) - # # => "...next t..." + # # => "...next..." # # excerpt('This is also an example', 'an', 8, ' ') # # => " is also an example" @@ -116,10 +116,10 @@ module ActionView if found_pos = text.chars =~ /(#{phrase})/i start_pos = [ found_pos - radius, 0 ].max - end_pos = [ found_pos + phrase.chars.length + radius, text.chars.length ].min + end_pos = [ [ found_pos + phrase.chars.length + radius - 1, 0].max, text.chars.length ].min prefix = start_pos > 0 ? excerpt_string : "" - postfix = end_pos < text.chars.length ? excerpt_string : "" + postfix = end_pos < text.chars.length - 1 ? excerpt_string : "" prefix + text.chars[start_pos..end_pos].strip + postfix else @@ -134,10 +134,10 @@ module ActionView if found_pos = text =~ /(#{phrase})/i start_pos = [ found_pos - radius, 0 ].max - end_pos = [ found_pos + phrase.length + radius, text.length ].min + end_pos = [ [ found_pos + phrase.length + radius - 1, 0].max, text.length ].min prefix = start_pos > 0 ? excerpt_string : "" - postfix = end_pos < text.length ? excerpt_string : "" + postfix = end_pos < text.length - 1 ? excerpt_string : "" prefix + text[start_pos..end_pos].strip + postfix else -- cgit v1.2.3