From bdf91d67484bd836dc34d54b5565ea05dbb37f20 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Sat, 2 Sep 2006 01:47:32 +0000 Subject: 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 --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_view/helpers/text_helper.rb | 29 +++++++++++++---------- actionpack/test/template/text_helper_test.rb | 18 ++++++++++++++ 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index faf205df87..d7cec7c7d4 100644 --- a/actionpack/CHANGELOG +++ b/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] diff --git a/actionpack/lib/action_view/helpers/text_helper.rb b/actionpack/lib/action_view/helpers/text_helper.rb index f668f09d34..a2efedf100 100644 --- a/actionpack/lib/action_view/helpers/text_helper.rb +++ b/actionpack/lib/action_view/helpers/text_helper.rb @@ -313,23 +313,26 @@ module ActionView @_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 @@ module ActionView 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 =~ /#{url}), auto_link(url) + end + end + def test_auto_linking email_raw = 'david@loudthinking.com' email_result = %{#{email_raw}} -- cgit v1.2.3