Permalink
Browse files

Make auto_link parse a greater subset of valid url formats.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4896 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent e4a4287 commit bdf91d67484bd836dc34d54b5565ea05dbb37f20 @jamis jamis committed Sep 2, 2006
View
2 actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Make auto_link parse a greater subset of valid url formats. [Jamis Buck]
+
* Integration tests: headers beginning with X aren't excluded from the HTTP_ prefix, so X-Requested-With becomes HTTP_X_REQUESTED_WITH as expected. [Mike Clark]
* Tighten rescue clauses. #5985 [james@grayproductions.net]
View
29 actionpack/lib/action_view/helpers/text_helper.rb
@@ -313,23 +313,26 @@ def set_cycle(name, cycle_object)
@_cycles[name] = cycle_object
end
- AUTO_LINK_RE = /
- ( # leading text
- <\w+.*?>| # leading HTML tag, or
- [^=!:'"\/]| # leading punctuation, or
- ^ # beginning of line
+ AUTO_LINK_RE = %r{
+ ( # leading text
+ <\w+.*?>| # leading HTML tag, or
+ [^=!:'"/]| # leading punctuation, or
+ ^ # beginning of line
)
(
- (?:http[s]?:\/\/)| # protocol spec, or
- (?:www\.) # www.*
+ (?:https?://)| # protocol spec, or
+ (?:www\.) # www.*
)
(
- ([\w]+:?[=?&\/.-]?)* # url segment
- \w+[\/]? # url tail
- (?:\#\w*)? # trailing anchor
+ [-\w]+ # subdomain or domain
+ (?:\.[-\w]+)* # remaining subdomains or domain
+ (?::\d+)? # port
+ (?:/(?:[~\w%.;-]+)?)* # path
+ (?:\?[\w%&=.;-]+)? # query string
+ (?:\#\w*)? # trailing anchor
)
- ([[:punct:]]|\s|<|$) # trailing text
- /x unless const_defined?(:AUTO_LINK_RE)
+ ([[:punct:]]|\s|<|$) # trailing text
+ }x unless const_defined?(:AUTO_LINK_RE)
# Turns all urls into clickable links. If a block is given, each url
# is yielded and the result is used as the link text. Example:
@@ -339,7 +342,7 @@ def set_cycle(name, cycle_object)
def auto_link_urls(text, href_options = {})
extra_options = tag_options(href_options.stringify_keys) || ""
text.gsub(AUTO_LINK_RE) do
- all, a, b, c, d = $&, $1, $2, $3, $5
+ all, a, b, c, d = $&, $1, $2, $3, $4
if a =~ /<a\s/i # don't replace URL's that are already linked
all
else
View
18 actionpack/test/template/text_helper_test.rb
@@ -114,6 +114,24 @@ def test_pluralization
assert_equal("2 counts", pluralize(2, "count"))
end
+ def test_auto_link_parsing
+ urls = %w(http://www.rubyonrails.com
+ http://www.rubyonrails.com:80
+ http://www.rubyonrails.com/~minam
+ https://www.rubyonrails.com/~minam
+ http://www.rubyonrails.com/~minam/url%20with%20spaces
+ http://www.rubyonrails.com/foo.cgi?something=here
+ http://www.rubyonrails.com/foo.cgi?something=here&and=here
+ http://www.rubyonrails.com/contact;new
+ http://www.rubyonrails.com/contact;new%20with%20spaces
+ http://www.rubyonrails.com/contact;new?with=query&string=params
+ http://www.rubyonrails.com/~minam/contact;new?with=query&string=params)
+
+ urls.each do |url|
+ assert_equal %(<a href="#{url}">#{url}</a>), auto_link(url)
+ end
+ end
+
def test_auto_linking
email_raw = 'david@loudthinking.com'
email_result = %{<a href="mailto:#{email_raw}">#{email_raw}</a>}

0 comments on commit bdf91d6

Please sign in to comment.