Module ActionView::Helpers::TextHelper
In: vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb

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 %>

Methods

Constants

VERBOTEN_TAGS = %w(form script) unless defined?(VERBOTEN_TAGS)
VERBOTEN_ATTRS = /^on/i unless defined?(VERBOTEN_ATTRS)

Public Instance methods

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 david@loudthinking.com") =>
    Go to <a href="http://www.rubyonrails.com">http://www.rubyonrails.com</a> and
    say hello to <a href="mailto:david@loudthinking.com">david@loudthinking.com</a>

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 126
126:       def auto_link(text, link = :all, href_options = {})
127:         case link
128:           when :all             then auto_link_urls(auto_link_email_addresses(text), href_options)
129:           when :email_addresses then auto_link_email_addresses(text)
130:           when :urls            then auto_link_urls(text, href_options)
131:         end
132:       end

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.

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 15
15:       def concat(string, binding)
16:         eval("_erbout", binding).concat(string)
17:       end

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..."

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 38
38:       def excerpt(text, phrase, radius = 100, excerpt_string = "...")
39:         if text.nil? || phrase.nil? then return end
40:         phrase = escape_regexp(phrase)
41: 
42:         if found_pos = text =~ /(#{phrase})/i
43:           start_pos = [ found_pos - radius, 0 ].max
44:           end_pos   = [ found_pos + phrase.length + radius, text.length ].min
45: 
46:           prefix  = start_pos > 0 ? excerpt_string : ""
47:           postfix = end_pos < text.length ? excerpt_string : ""
48: 
49:           prefix + text[start_pos..end_pos].strip + postfix
50:         else
51:           nil
52:         end
53:       end

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.

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 30
30:       def highlight(text, phrase, highlighter = '<strong class="highlight">\1</strong>')
31:         if phrase.blank? then return text end
32:         text.gsub(/(#{escape_regexp(phrase)})/i, highlighter) unless text.nil?
33:       end

Returns the text with all the Markdown codes turned into HTML-tags. This method is only available if BlueCloth can be required.

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 99
 99:         def markdown(text)
100:           text.blank? ? "" : BlueCloth.new(text).to_html
101:         end

Attempts to pluralize the singular word unless count is 1. See source for pluralization rules.

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 56
56:       def pluralize(count, singular, plural = nil)
57:          "#{count} " + if count == 1
58:           singular
59:         elsif plural
60:           plural
61:         elsif Object.const_defined?("Inflector")
62:           Inflector.pluralize(singular)
63:         else
64:           singular + "s"
65:         end
66:       end

Sanitizes the given HTML by making form and script tags into regular text, and removing all "onxxx" attributes (so that arbitrary Javascript cannot be executed). Also removes href attributes that start with "javascript:".

Returns the sanitized text.

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 161
161:       def sanitize(html)
162:         # only do this if absolutely necessary
163:         if html.index("<")
164:           tokenizer = HTML::Tokenizer.new(html)
165:           new_text = ""
166: 
167:           while token = tokenizer.next
168:             node = HTML::Node.parse(nil, 0, 0, token, false)
169:             new_text << case node
170:               when HTML::Tag
171:                 if VERBOTEN_TAGS.include?(node.name)
172:                   node.to_s.gsub(/</, "&lt;")
173:                 else
174:                   if node.closing != :close
175:                     node.attributes.delete_if { |attr,v| attr =~ VERBOTEN_ATTRS }
176:                     if node.attributes["href"] =~ /^javascript:/i
177:                       node.attributes.delete "href"
178:                     end
179:                   end
180:                   node.to_s
181:                 end
182:               else
183:                 node.to_s.gsub(/</, "&lt;")
184:             end
185:           end
186: 
187:           html = new_text
188:         end
189: 
190:         html
191:       end

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

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 110
110:       def simple_format(text)
111:         text.gsub!(/(\r\n|\n|\r)/, "\n") # lets make them newlines crossplatform
112:         text.gsub!(/\n\n+/, "\n\n") # zap dupes
113:         text.gsub!(/\n\n/, '</p>\0<p>') # turn two newlines into paragraph
114:         text.gsub!(/([^\n])(\n)([^\n])/, '\1\2<br />\3') # turn single newline into <br />
115:         
116:         content_tag("p", text)
117:       end

Turns all links into words, like "<a href="something">else</a>" to "else".

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 135
135:       def strip_links(text)
136:         text.gsub(/<a.*>(.*)<\/a>/m, '\1')
137:       end

Returns the text with all the Textile codes turned into HTML-tags. This method is only available if RedCloth can be required.

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 78
78:         def textilize(text)
79:           text.blank? ? "" : RedCloth.new(text, [ :hard_breaks ]).to_html
80:         end

Returns the text with all the Textile codes turned into HTML-tags, but without the regular bounding <p> tag. This method is only available if RedCloth can be required.

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 84
84:         def textilize_without_paragraph(text)
85:           textiled = textilize(text)
86:           if textiled[0..2] == "<p>" then textiled = textiled[3..-1] end
87:           if textiled[-4..-1] == "</p>" then textiled = textiled[0..-5] end
88:           return textiled
89:         end

Truncates text to the length of length and replaces the last three characters with the truncate_string if the text is longer than length.

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 21
21:       def truncate(text, length = 30, truncate_string = "...")
22:         if text.nil? then return end
23:         if text.length > length then text[0..(length - 3)] + truncate_string else text end
24:       end

Word wrap long lines to line_width.

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/text_helper.rb, line 69
69:       def word_wrap(text, line_width = 80)
70:         text.gsub(/\n/, "\n\n").gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip
71:       end

[Validate]