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

Instance Method Details

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 &lt;p&gt; tags, and converts line breaks into &lt;br /&gt; 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

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