Module: ActionView::Helpers::TextHelper
- Defined in:
- lib/action_view/helpers/text_helper.rb
Overview
Provides a set of methods for working with text strings that can help unburden the level of inline Ruby code in the templates. In the example below we iterate over a collection of posts provided to the template and prints each title after making sure it doesn’t run longer than 20 characters:
<% for post in @posts %>
Title: <%= truncate(post.title, 20) %>
<% end %>
Instance Method Summary collapse
-
#auto_link(text, link = :all) ⇒ Object
Turns all urls and email addresses into clickable links.
-
#concat(string, binding) ⇒ Object
The regular puts and print are outlawed in eRuby.
-
#excerpt(text, phrase, radius = 100, excerpt_string = "...") ⇒ Object
Extracts an excerpt from the
text
surrounding thephrase
with a number of characters on each side determined byradius
. -
#highlight(text, phrase, highlighter = '<strong class="highlight">\1</strong>') ⇒ Object
Highlights the
phrase
where it is found in thetext
by surrounding it like <strong class=“highlight”>I’m a highlight phrase</strong>. -
#pluralize(count, singular, plural = nil) ⇒ Object
Attempts to pluralize the
singular
word unlesscount
is 1. -
#simple_format(text) ⇒ Object
Returns
text
transformed into html using very simple formatting rules Surrounds paragraphs with<p>
tags, and converts line breaks into<br />
Two consecutive newlines(\n\n
) are considered as a paragraph, one newline (\n
) is considered a linebreak, three or more consecutive newlines are turned into two newlines. -
#strip_links(text) ⇒ Object
Turns all links into words, like “<a href=”something“>else</a>” to “else”.
-
#truncate(text, length = 30, truncate_string = "...") ⇒ Object
Truncates
text
to the length oflength
and replaces the last three characters with thetruncate_string
if thetext
is longer thanlength
.
Instance Method Details
#auto_link(text, link = :all) ⇒ Object
Turns all urls and email addresses into clickable links. The link
parameter can limit what should be linked. Options are :all (default), :email_addresses, and :urls.
Example:
auto_link("Go to http://www.rubyonrails.com and say hello to [email protected]") =>
Go to <a href="http://www.rubyonrails.com">http://www.rubyonrails.com</a> and
say hello to <a href="mailto:[email protected]">[email protected]</a>
119 120 121 122 123 124 125 |
# File 'lib/action_view/helpers/text_helper.rb', line 119 def auto_link(text, link = :all) case link when :all then auto_link_urls(auto_link_email_addresses(text)) when :email_addresses then auto_link_email_addresses(text) when :urls then auto_link_urls(text) end end |
#concat(string, binding) ⇒ Object
The regular puts and print are outlawed in eRuby. It’s recommended to use the <%= “hello” %> form instead of print “hello”. If you absolutely must use a method-based output, you can use concat. It’s use like this <% concat “hello”, binding %>. Notice that it doesn’t have an equal sign in front. Using <%= concat “hello” %> would result in a double hello.
13 14 15 |
# File 'lib/action_view/helpers/text_helper.rb', line 13 def concat(string, binding) eval("_erbout", binding).concat(string) end |
#excerpt(text, phrase, radius = 100, excerpt_string = "...") ⇒ Object
Extracts an excerpt from the text
surrounding the phrase
with a number of characters on each side determined by radius
. If the phrase isn’t found, nil is returned. Ex:
excerpt("hello my world", "my", 3) => "...lo my wo..."
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/action_view/helpers/text_helper.rb', line 36 def excerpt(text, phrase, radius = 100, excerpt_string = "...") if text.nil? || phrase.nil? then return end phrase = escape_regexp(phrase) if found_pos = text =~ /(#{phrase})/i start_pos = [ found_pos - radius, 0 ].max end_pos = [ found_pos + phrase.length + radius, text.length ].min prefix = start_pos > 0 ? excerpt_string : "" postfix = end_pos < text.length ? excerpt_string : "" prefix + text[start_pos..end_pos].strip + postfix else nil end end |
#highlight(text, phrase, highlighter = '<strong class="highlight">\1</strong>') ⇒ Object
Highlights the phrase
where it is found in the text
by surrounding it like <strong class=“highlight”>I’m a highlight phrase</strong>. The highlighter can be specialized by passing highlighter
as single-quoted string with 1 where the phrase is supposed to be inserted. N.B.: The phrase
is sanitized to include only letters, digits, and spaces before use.
28 29 30 31 |
# File 'lib/action_view/helpers/text_helper.rb', line 28 def highlight(text, phrase, highlighter = '<strong class="highlight">\1</strong>') if text.nil? || phrase.nil? then return end text.gsub(/(#{escape_regexp(phrase)})/i, highlighter) unless text.nil? end |
#pluralize(count, singular, plural = nil) ⇒ Object
Attempts to pluralize the singular
word unless count
is 1. See source for pluralization rules.
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/action_view/helpers/text_helper.rb', line 54 def pluralize(count, singular, plural = nil) "#{count} " + if count == 1 singular elsif plural plural elsif Object.const_defined?("Inflector") Inflector.pluralize(singular) else singular + "s" end end |
#simple_format(text) ⇒ Object
Returns text
transformed into html using very simple formatting rules Surrounds paragraphs with <p>
tags, and converts line breaks into <br />
Two consecutive newlines(\n\n
) are considered as a paragraph, one newline (\n
) is considered a linebreak, three or more consecutive newlines are turned into two newlines
103 104 105 106 107 108 109 110 |
# File 'lib/action_view/helpers/text_helper.rb', line 103 def simple_format(text) text.gsub!(/(\r\n|\n|\r)/, "\n") # lets make them newlines crossplatform text.gsub!(/\n\n+/, "\n\n") # zap dupes text.gsub!(/\n\n/, '</p>\0<p>') # turn two newlines into paragraph text.gsub!(/([^\n])(\n)([^\n])/, '\1\2<br />\3') # turn single newline into <br /> return '<p>' + text + '</p>' # wrap the first and last line in paragraphs before we're done end |
#strip_links(text) ⇒ Object
Turns all links into words, like “<a href=”something“>else</a>” to “else”.
128 129 130 |
# File 'lib/action_view/helpers/text_helper.rb', line 128 def strip_links(text) text.gsub(/<a.*>(.*)<\/a>/m, '\1') end |
#truncate(text, length = 30, truncate_string = "...") ⇒ Object
Truncates text
to the length of length
and replaces the last three characters with the truncate_string
if the text
is longer than length
.
19 20 21 22 |
# File 'lib/action_view/helpers/text_helper.rb', line 19 def truncate(text, length = 30, truncate_string = "...") if text.nil? then return end if text.length > length then text[0..(length - 3)] + truncate_string else text end end |