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.
Examples
excerpt('This is an example', 'an', 5) # => "...s is an examp..." excerpt('This is an example', 'is', 5) # => "This is an..." excerpt('This is an example', 'is') # => "This is an example" excerpt('This next thing is an example', 'ex', 2) # => "...next t..." excerpt('This is also an example', 'an', 8, '<chop> ') # => "<chop> is also an example"</chop></chop>
Source Code
# File action_view/helpers/text_helper.rb, line 113 def excerpt(text, phrase, radius = 100, excerpt_string = "...") if text && phrase phrase = Regexp.escape(phrase) 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 prefix = start_pos > 0 ? excerpt_string : "" postfix = end_pos < text.chars.length ? excerpt_string : "" prefix + text.chars[start_pos..end_pos].strip + postfix else nil end end end
<code/>and<pre/>for code samples.