rails_autolink-1.1.6/0000755000004100000410000000000012352214235014566 5ustar www-datawww-datarails_autolink-1.1.6/Rakefile0000644000004100000410000000024412352214235016233 0ustar www-datawww-data# Setup some testing require 'rake' require 'rake/testtask' Rake::TestTask.new do |t| t.libs << 'test' t.pattern = 'test/test_*.rb' end task :default => :testrails_autolink-1.1.6/Gemfile0000644000004100000410000000052112352214235016057 0ustar www-datawww-datasource 'https://rubygems.org' # To test on latest Rails release, use the following: gem 'rails' gem 'minitest' # To test on Rails 4.0.x release, use the following e.g. for 4.0.1: # gem 'rails', '= 4.0.1' # gem 'minitest' # To test on Rails 3.2.x, use the following e.g. for 3.2.17: # gem 'rails', '= 3.2.17' # gem 'minitest', '= 4.2' rails_autolink-1.1.6/.autotest0000644000004100000410000000026112352214235016436 0ustar www-datawww-data# -*- ruby -*- require 'autotest/restart' Autotest.add_hook :initialize do |at| at.testlib = 'minitest/autorun' at.find_directories = ARGV unless ARGV.empty? end rails_autolink-1.1.6/CHANGELOG.rdoc0000644000004100000410000000156012352214235016730 0ustar www-datawww-data=== 1.1.6 / 2014-06-08 * Fixed a potential XSS vulnerability #47 * Hold onto trailing = and & characters as part of urls #45 * Ensure test compatibility with Rails 3.2.x/4.0.x/4.1.x #44 * Readme typo #41 * require timeout in tests #40 === 1.1.5 / 2013-10-23 * Improved performance of email regex * Protocol regex is case insensitive === 1.1.3 / 2013-09-12 * Updates gemspec to work with latest rubygems === 1.1.1 / 2013-09-12 * Improved email regex to allow especial chars: !#$%&'*+-/=?^_`{|}~ === 1.1.0 / 2013-05-02 * Ready for Rails 4. === 1.0.7 / 2012-04-27 * Added support for non-latin characters in autolinked urls === 1.0.6 / 2012-03-12 * Added sanitize_options arg === 1.0.5 / 2012-01-27 * Update dependency to include rails 3.2.X === 1.0.2 / 2011-06-18 * Compatibility with rails 3.1.0.rc4 === 1.0.0 / 2011-05-02 * 1 major enhancement * Birthday! rails_autolink-1.1.6/README.rdoc0000644000004100000410000000614212352214235016377 0ustar www-datawww-data= rails_autolink * http://github.com/tenderlove/rails_autolink == DESCRIPTION: This is an extraction of the `auto_link` method from rails. The `auto_link` method was removed from Rails in version Rails 3.1. This gem is meant to bridge the gap for people migrating. == FEATURES: By default auto_link returns sanitized html_safe strings. This behaviour can be overridden by setting the :sanitize option to false (thus making it insecure if you don't have the content under control). == SYNOPSIS: require 'rails_autolink' auto_link("Go to http://www.rubyonrails.org and say hello to david@loudthinking.com") # => "Go to http://www.rubyonrails.org and # say hello to david@loudthinking.com" auto_link("Visit http://www.loudthinking.com/ or e-mail david@loudthinking.com", :link => :urls) # => "Visit http://www.loudthinking.com/ # or e-mail david@loudthinking.com" auto_link("Visit http://www.loudthinking.com/ or e-mail david@loudthinking.com", :link => :email_addresses) # => "Visit http://www.loudthinking.com/ or e-mail david@loudthinking.com" auto_link("Go to http://www.rubyonrails.org ") # => "Go to http://www.rubyonrails.org " auto_link("Go to http://www.rubyonrails.org ", :sanitize => false) # => "Go to http://www.rubyonrails.org " post_body = "Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com." auto_link(post_body, :html => { :target => '_blank' }) do |text| truncate(text, :length => 15) end # => "Welcome to my new blog at http://www.m.... == REQUIREMENTS: * rails > 3.1 == INSTALL: * gem install rails_autolink == LICENSE: (The MIT License) Copyright (c) 2011 DHH Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. rails_autolink-1.1.6/lib/0000755000004100000410000000000012352214235015334 5ustar www-datawww-datarails_autolink-1.1.6/lib/rails_autolink/0000755000004100000410000000000012352214235020354 5ustar www-datawww-datarails_autolink-1.1.6/lib/rails_autolink/helpers.rb0000644000004100000410000001706012352214235022347 0ustar www-datawww-data# encoding: utf-8 module RailsAutolink require 'active_support/core_ext/object/blank' require 'active_support/core_ext/array/extract_options' require 'active_support/core_ext/hash/reverse_merge' require 'active_support/core_ext/hash/keys' module ::ActionView module Helpers # :nodoc: module TextHelper # Turns all URLs and e-mail addresses into clickable links. The :link option # will limit what should be linked. You can add HTML attributes to the links using # :html. Possible values for :link are :all (default), # :email_addresses, and :urls. If a block is given, each URL and # e-mail address is yielded and the result is used as the link text. By default the # text given is sanitized, you can override this behaviour setting the # :sanitize option to false, or you can add options to the sanitization of # the text using the :sanitize_options option hash. # # ==== Examples # auto_link("Go to http://www.rubyonrails.org and say hello to david@loudthinking.com") # # => "Go to http://www.rubyonrails.org and # # say hello to david@loudthinking.com" # # auto_link("Visit http://www.loudthinking.com/ or e-mail david@loudthinking.com", :link => :urls) # # => "Visit http://www.loudthinking.com/ # # or e-mail david@loudthinking.com" # # auto_link("Visit http://www.loudthinking.com/ or e-mail david@loudthinking.com", :link => :email_addresses) # # => "Visit http://www.loudthinking.com/ or e-mail david@loudthinking.com" # # post_body = "Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com." # auto_link(post_body, :html => { :target => '_blank' }) do |text| # truncate(text, :length => 15) # end # # => "Welcome to my new blog at http://www.m.... # Please e-mail me at me@email.com." # # # You can still use auto_link with the old API that accepts the # +link+ as its optional second parameter and the +html_options+ hash # as its optional third parameter: # post_body = "Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com." # auto_link(post_body, :urls) # # => "Welcome to my new blog at http://www.myblog.com. # Please e-mail me at me@email.com." # # auto_link(post_body, :all, :target => "_blank") # # => "Welcome to my new blog at http://www.myblog.com. # Please e-mail me at me@email.com." def auto_link(text, *args, &block) #link = :all, html = {}, &block) return ''.html_safe if text.blank? options = args.size == 2 ? {} : args.extract_options! # this is necessary because the old auto_link API has a Hash as its last parameter unless args.empty? options[:link] = args[0] || :all options[:html] = args[1] || {} end options.reverse_merge!(:link => :all, :html => {}) sanitize = (options[:sanitize] != false) sanitize_options = options[:sanitize_options] || {} text = conditional_sanitize(text, sanitize, sanitize_options).to_str case options[:link].to_sym when :all then conditional_html_safe(auto_link_email_addresses(auto_link_urls(text, options[:html], options, &block), options[:html], &block), sanitize) when :email_addresses then conditional_html_safe(auto_link_email_addresses(text, options[:html], &block), sanitize) when :urls then conditional_html_safe(auto_link_urls(text, options[:html], options, &block), sanitize) end end private AUTO_LINK_RE = %r{ (?: ((?:ed2k|ftp|http|https|irc|mailto|news|gopher|nntp|telnet|webcal|xmpp|callto|feed|svn|urn|aim|rsync|tag|ssh|sftp|rtsp|afs|file):)// | www\. ) [^\s<\u00A0"]+ }ix # regexps for determining context, used high-volume AUTO_LINK_CRE = [/<[^>]+$/, /^[^>]*>/, //i, /<\/a>/i] AUTO_EMAIL_LOCAL_RE = /[\w.!#\$%&'*\/=?^`{|}~+-]/ AUTO_EMAIL_RE = /[\w.!#\$%+-]\.?#{AUTO_EMAIL_LOCAL_RE}*@[\w-]+(?:\.[\w-]+)+/ BRACKETS = { ']' => '[', ')' => '(', '}' => '{' } WORD_PATTERN = RUBY_VERSION < '1.9' ? '\w' : '\p{Word}' # Turns all urls into clickable links. If a block is given, each url # is yielded and the result is used as the link text. def auto_link_urls(text, html_options = {}, options = {}) link_attributes = html_options.stringify_keys text.gsub(AUTO_LINK_RE) do scheme, href = $1, $& punctuation = [] if auto_linked?($`, $') # do not change string; URL is already linked href else # don't include trailing punctuation character as part of the URL while href.sub!(/[^#{WORD_PATTERN}\/-=&]$/, '') punctuation.push $& if opening = BRACKETS[punctuation.last] and href.scan(opening).size > href.scan(punctuation.last).size href << punctuation.pop break end end link_text = block_given?? yield(href) : href href = 'http://' + href unless scheme unless options[:sanitize] == false link_text = sanitize(link_text) href = sanitize(href) end content_tag(:a, link_text, link_attributes.merge('href' => href), !!options[:sanitize]) + punctuation.reverse.join('') end end end # Turns all email addresses into clickable links. If a block is given, # each email is yielded and the result is used as the link text. def auto_link_email_addresses(text, html_options = {}, options = {}) text.gsub(AUTO_EMAIL_RE) do text = $& if auto_linked?($`, $') text.html_safe else display_text = (block_given?) ? yield(text) : text unless options[:sanitize] == false text = sanitize(text) display_text = sanitize(display_text) unless text == display_text end mail_to text, display_text, html_options end end end # Detects already linked context or position in the middle of a tag def auto_linked?(left, right) (left =~ AUTO_LINK_CRE[0] and right =~ AUTO_LINK_CRE[1]) or (left.rindex(AUTO_LINK_CRE[2]) and $' !~ AUTO_LINK_CRE[3]) end def conditional_sanitize(target, condition, sanitize_options = {}) condition ? sanitize(target, sanitize_options) : target end def conditional_html_safe(target, condition) condition ? target.html_safe : target end end end end end rails_autolink-1.1.6/lib/rails_autolink/version.rb0000644000004100000410000000005412352214235022365 0ustar www-datawww-datamodule RailsAutolink VERSION = '1.1.6' endrails_autolink-1.1.6/lib/rails_autolink.rb0000644000004100000410000000032412352214235020700 0ustar www-datawww-datamodule RailsAutolink class Railtie < ::Rails::Railtie initializer 'rails_autolink' do |app| ActiveSupport.on_load(:action_view) do require 'rails_autolink/helpers' end end end end rails_autolink-1.1.6/metadata.yml0000644000004100000410000000330312352214235017070 0ustar www-datawww-data--- !ruby/object:Gem::Specification name: rails_autolink version: !ruby/object:Gem::Version version: 1.1.6 platform: ruby authors: - Aaron Patterson - Juanjo Bazan - Akira Matsuda autorequire: bindir: bin cert_chain: [] date: 2014-06-08 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: rails requirement: !ruby/object:Gem::Requirement requirements: - - ">" - !ruby/object:Gem::Version version: '3.1' type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">" - !ruby/object:Gem::Version version: '3.1' description: This is an extraction of the `auto_link` method from rails. The `auto_link` method was removed from Rails in version Rails 3.1. This gem is meant to bridge the gap for people migrating. email: aaron@tenderlovemaking.com executables: [] extensions: [] extra_rdoc_files: [] files: - ".autotest" - ".gitignore" - CHANGELOG.rdoc - Gemfile - README.rdoc - Rakefile - lib/rails_autolink.rb - lib/rails_autolink/helpers.rb - lib/rails_autolink/version.rb - rails_autolink.gemspec - test/test_rails_autolink.rb homepage: https://github.com/tenderlove/rails_autolink licenses: - MIT metadata: {} post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 1.9.3 required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: rubygems_version: 2.2.2 signing_key: specification_version: 4 summary: Automatic generation of html links in texts test_files: [] rails_autolink-1.1.6/test/0000755000004100000410000000000012352214235015545 5ustar www-datawww-datarails_autolink-1.1.6/test/test_rails_autolink.rb0000644000004100000410000004427212352214235022162 0ustar www-datawww-data# encoding: utf-8 require "minitest/autorun" require "rails" require 'erb' require 'cgi' require 'active_support' require 'active_support/core_ext' require 'action_pack' require 'action_view' require 'action_view/helpers' require 'action_dispatch/testing/assertions' require 'timeout' require "rails_autolink/helpers" class TestRailsAutolink < MiniTest::Unit::TestCase include ActionView::Helpers::CaptureHelper include ActionView::Helpers::TextHelper include ActionView::Helpers::SanitizeHelper include ActionView::Helpers::TagHelper include ActionView::Helpers::UrlHelper include ActionView::Helpers::OutputSafetyHelper include ActionDispatch::Assertions::DomAssertions def test_auto_link_within_tags link_raw = 'http://www.rubyonrails.org/images/rails.png' link_result = %Q() assert_equal link_result, auto_link(link_result) end def test_auto_link_with_brackets link1_raw = 'http://en.wikipedia.org/wiki/Sprite_(computer_graphics)' link1_result = generate_result(link1_raw) assert_equal link1_result, auto_link(link1_raw) assert_equal "(link: #{link1_result})", auto_link("(link: #{link1_raw})") link2_raw = 'http://en.wikipedia.org/wiki/Sprite_[computer_graphics]' link2_result = generate_result(link2_raw) assert_equal link2_result, auto_link(link2_raw) assert_equal "[link: #{link2_result}]", auto_link("[link: #{link2_raw}]") link3_raw = 'http://en.wikipedia.org/wiki/Sprite_{computer_graphics}' link3_result = generate_result(link3_raw) assert_equal link3_result, auto_link(link3_raw) assert_equal "{link: #{link3_result}}", auto_link("{link: #{link3_raw}}") end def test_auto_link_with_options_hash assert_dom_equal 'Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com.', auto_link("Welcome to my new blog at http://www.myblog.com/. Please e-mail me at me@email.com.", :link => :all, :html => { :class => "menu", :target => "_blank" }) end def test_auto_link_with_multiple_trailing_punctuations url = "http://youtube.com" url_result = generate_result(url) assert_equal url_result, auto_link(url) assert_equal "(link: #{url_result}).", auto_link("(link: #{url}).") end def test_auto_link_with_block url = "http://api.rubyonrails.com/Foo.html" email = "fantabulous@shiznadel.ic" assert_equal %(

#{url[0...7]}...
#{email[0...7]}...

), auto_link("

#{url}
#{email}

") { |_url| truncate(_url, :length => 10) } end def test_auto_link_with_block_with_html pic = "http://example.com/pic.png" url = "http://example.com/album?a&b=c" assert_equal %(My pic: -- full album here #{generate_result(url)}), auto_link("My pic: #{pic} -- full album here #{url}") { |link| if link =~ /\.(jpg|gif|png|bmp|tif)$/i raw %() else link end } end def test_auto_link_should_sanitize_input_when_sanitize_option_is_not_false link_raw = %{http://www.rubyonrails.com?id=1&num=2} malicious_script = '' assert_equal %{http://www.rubyonrails.com?id=1&num=2}, auto_link("#{link_raw}#{malicious_script}") assert auto_link("#{link_raw}#{malicious_script}").html_safe? end def test_auto_link_should_sanitize_input_with_sanitize_options link_raw = %{http://www.rubyonrails.com?id=1&num=2} malicious_script = '' text_with_attributes = %{Ruby} text_result = %{http://www.rubyonrails.com?id=1&num=2Ruby} assert_equal text_result, auto_link("#{link_raw}#{malicious_script}#{text_with_attributes}", :sanitize_options => {:attributes => ["target", "href"]}, :html => {:class => 'big'}) assert auto_link("#{link_raw}#{malicious_script}#{text_with_attributes}", :sanitize_options => {:attributes => ["target", "href"]}, :html => {:class => 'big'}).html_safe? end def test_auto_link_should_not_sanitize_input_when_sanitize_option_is_false link_raw = %{http://www.rubyonrails.com?id=1&num=2} malicious_script = '' assert_equal %{http://www.rubyonrails.com?id=1&num=2}, auto_link("#{link_raw}#{malicious_script}", :sanitize => false) assert !auto_link("#{link_raw}#{malicious_script}", :sanitize => false).html_safe? end def test_auto_link_other_protocols ftp_raw = 'ftp://example.com/file.txt' assert_equal %(Download #{generate_result(ftp_raw)}), auto_link("Download #{ftp_raw}") file_scheme = 'file:///home/username/RomeoAndJuliet.pdf' assert_equal generate_result(file_scheme), auto_link(file_scheme) end def test_auto_link_already_linked linked1 = generate_result('Ruby On Rails', 'http://www.rubyonrails.com') linked2 = %('www.example.com') linked3 = %('www.example.com') linked4 = %('www.example.com') linked5 = %('close www.example.com') linked6 = %('close www.example.com') assert_equal linked1, auto_link(linked1) assert_equal linked2, auto_link(linked2) assert_equal linked3, auto_link(linked3, :sanitize => false) assert_equal linked4, auto_link(linked4) assert_equal linked5, auto_link(linked5) assert_equal linked6, auto_link(linked6, :sanitize_options => {:attributes => ["href", "target", "data-ruby"]}) linked_email = %Q(Mail me) assert_equal linked_email, auto_link(linked_email) end def test_auto_link_with_malicious_attr url1 = "http://api.rubyonrails.com/Foo.html" malicious = "\"onmousemove=\"prompt()" combination = "#{url1}#{malicious}" assert_equal %(

#{url1}#{malicious}

), auto_link("

#{combination}

") end def test_auto_link_at_eol url1 = "http://api.rubyonrails.com/Foo.html" url2 = "http://www.ruby-doc.org/core/Bar.html" assert_equal %(

#{url1}
#{url2}

), auto_link("

#{url1}
#{url2}

") end def test_auto_link_should_be_html_safe email_raw = 'santiago@wyeworks.com' link_raw = 'http://www.rubyonrails.org' malicious_script = '' assert auto_link(nil).html_safe?, 'should be html safe' assert auto_link('').html_safe?, 'should be html safe' assert auto_link("#{link_raw} #{link_raw} #{link_raw}").html_safe?, 'should be html safe' assert auto_link("hello #{email_raw}").html_safe?, 'should be html safe' assert auto_link("hello #{email_raw} #{malicious_script}").html_safe?, 'should be html safe' end def test_auto_link_should_not_be_html_safe_when_sanitize_option_false email_raw = 'santiago@wyeworks.com' link_raw = 'http://www.rubyonrails.org' assert !auto_link("hello", :sanitize => false).html_safe?, 'should not be html safe' assert !auto_link("#{link_raw} #{link_raw} #{link_raw}", :sanitize => false).html_safe?, 'should not be html safe' assert !auto_link("hello #{email_raw}", :sanitize => false).html_safe?, 'should not be html safe' end def test_auto_link_email_address email_raw = 'aaron@tenderlovemaking.com' email_result = %{#{email_raw}} assert !auto_link_email_addresses(email_result).html_safe?, 'should not be html safe' end def test_auto_link_email_addres_with_especial_chars email_raw = "and&re$la*+r-a.o'rea=l~ly@tenderlovemaking.com" email_sanitized = if Rails.version =~ /^3/ # mail_to changed the number base it rendered HTML encoded characters at some point "and&re$la*+r-a.o'rea=l~ly@tenderlovemaking.com" else "and&re$la*+r-a.o'rea=l~ly@tenderlovemaking.com" end email_result = %{#{email_sanitized}} assert_equal email_result, auto_link(email_raw) assert !auto_link_email_addresses(email_result).html_safe?, 'should not be html safe' end def test_auto_link email_raw = 'david@loudthinking.com' email_result = %{#{email_raw}} link_raw = 'http://www.rubyonrails.com' link_result = generate_result(link_raw) link_result_with_options = %{#{link_raw}} assert_equal '', auto_link(nil) assert_equal '', auto_link('') assert_equal "#{link_result} #{link_result} #{link_result}", auto_link("#{link_raw} #{link_raw} #{link_raw}") assert_equal %(hello #{email_result}), auto_link("hello #{email_raw}", :email_addresses) assert_equal %(Go to #{link_result}), auto_link("Go to #{link_raw}", :urls) assert_equal %(Go to #{link_raw}), auto_link("Go to #{link_raw}", :email_addresses) assert_equal %(Go to #{link_result} and say hello to #{email_result}), auto_link("Go to #{link_raw} and say hello to #{email_raw}") assert_equal %(

Link #{link_result}

), auto_link("

Link #{link_raw}

") assert_equal %(

#{link_result} Link

), auto_link("

#{link_raw} Link

") assert_equal %(

Link #{link_result_with_options}

), auto_link("

Link #{link_raw}

", :all, {:target => "_blank"}) assert_equal %(Go to #{link_result}.), auto_link(%(Go to #{link_raw}.)) assert_equal %(

Go to #{link_result}, then say hello to #{email_result}.

), auto_link(%(

Go to #{link_raw}, then say hello to #{email_raw}.

)) assert_equal %(#{link_result} #{link_result}), auto_link(%(#{link_result} #{link_raw})) email2_raw = '+david@loudthinking.com' email2_result = %{#{email2_raw}} assert_equal email2_result, auto_link(email2_raw) assert_equal email2_result, auto_link(email2_raw, :all) assert_equal email2_result, auto_link(email2_raw, :email_addresses) link2_raw = 'www.rubyonrails.com' link2_result = generate_result(link2_raw, "http://#{link2_raw}") assert_equal %(Go to #{link2_result}), auto_link("Go to #{link2_raw}", :urls) assert_equal %(Go to #{link2_raw}), auto_link("Go to #{link2_raw}", :email_addresses) assert_equal %(

Link #{link2_result}

), auto_link("

Link #{link2_raw}

") assert_equal %(

#{link2_result} Link

), auto_link("

#{link2_raw} Link

") assert_equal %(Go to #{link2_result}.), auto_link(%(Go to #{link2_raw}.)) assert_equal %(

Say hello to #{email_result}, then go to #{link2_result}.

), auto_link(%(

Say hello to #{email_raw}, then go to #{link2_raw}.

)) link3_raw = 'http://manuals.ruby-on-rails.com/read/chapter.need_a-period/103#page281' link3_result = generate_result(link3_raw) assert_equal %(Go to #{link3_result}), auto_link("Go to #{link3_raw}", :urls) assert_equal %(Go to #{link3_raw}), auto_link("Go to #{link3_raw}", :email_addresses) assert_equal %(

Link #{link3_result}

), auto_link("

Link #{link3_raw}

") assert_equal %(

#{link3_result} Link

), auto_link("

#{link3_raw} Link

") assert_equal %(Go to #{link3_result}.), auto_link(%(Go to #{link3_raw}.)) assert_equal %(

Go to #{link3_result}. Seriously, #{link3_result}? I think I'll say hello to #{email_result}. Instead.

), auto_link(%(

Go to #{link3_raw}. Seriously, #{link3_raw}? I think I'll say hello to #{email_raw}. Instead.

)) link4_raw = 'http://foo.example.com/controller/action?parm=value&p2=v2#anchor123' link4_result = generate_result(link4_raw) assert_equal %(

Link #{link4_result}

), auto_link("

Link #{link4_raw}

") assert_equal %(

#{link4_result} Link

), auto_link("

#{link4_raw} Link

") link5_raw = 'http://foo.example.com:3000/controller/action' link5_result = generate_result(link5_raw) assert_equal %(

#{link5_result} Link

), auto_link("

#{link5_raw} Link

") link6_raw = 'http://foo.example.com:3000/controller/action+pack' link6_result = generate_result(link6_raw) assert_equal %(

#{link6_result} Link

), auto_link("

#{link6_raw} Link

") link7_raw = 'http://foo.example.com/controller/action?parm=value&p2=v2#anchor-123' link7_result = generate_result(link7_raw) assert_equal %(

#{link7_result} Link

), auto_link("

#{link7_raw} Link

") link8_raw = 'http://foo.example.com:3000/controller/action.html' link8_result = generate_result(link8_raw) assert_equal %(Go to #{link8_result}), auto_link("Go to #{link8_raw}", :urls) assert_equal %(Go to #{link8_raw}), auto_link("Go to #{link8_raw}", :email_addresses) assert_equal %(

Link #{link8_result}

), auto_link("

Link #{link8_raw}

") assert_equal %(

#{link8_result} Link

), auto_link("

#{link8_raw} Link

") assert_equal %(Go to #{link8_result}.), auto_link(%(Go to #{link8_raw}.)) assert_equal %(

Go to #{link8_result}. Seriously, #{link8_result}? I think I'll say hello to #{email_result}. Instead.

), auto_link(%(

Go to #{link8_raw}. Seriously, #{link8_raw}? I think I'll say hello to #{email_raw}. Instead.

)) link9_raw = 'http://business.timesonline.co.uk/article/0,,9065-2473189,00.html' link9_result = generate_result(link9_raw) assert_equal %(Go to #{link9_result}), auto_link("Go to #{link9_raw}", :urls) assert_equal %(Go to #{link9_raw}), auto_link("Go to #{link9_raw}", :email_addresses) assert_equal %(

Link #{link9_result}

), auto_link("

Link #{link9_raw}

") assert_equal %(

#{link9_result} Link

), auto_link("

#{link9_raw} Link

") assert_equal %(Go to #{link9_result}.), auto_link(%(Go to #{link9_raw}.)) assert_equal %(

Go to #{link9_result}. Seriously, #{link9_result}? I think I'll say hello to #{email_result}. Instead.

), auto_link(%(

Go to #{link9_raw}. Seriously, #{link9_raw}? I think I'll say hello to #{email_raw}. Instead.

)) link10_raw = 'http://www.mail-archive.com/ruby-talk@ruby-lang.org/' link10_result = generate_result(link10_raw) assert_equal %(

#{link10_result} Link

), auto_link("

#{link10_raw} Link

") link11_raw = 'http://asakusa.rubyist.net/' link11_result = generate_result(link11_raw) with_kcode 'u' do assert_equal %(浅草.rbの公式サイトはこちら#{link11_result}), auto_link("浅草.rbの公式サイトはこちら#{link11_raw}") end link12_raw = 'http://tools.ietf.org/html/rfc3986' link12_result = generate_result(link12_raw) assert_equal %(

#{link12_result} text-after-nonbreaking-space

), auto_link("

#{link12_raw} text-after-nonbreaking-space

") link13_raw = 'HTtP://www.rubyonrails.com' assert_equal generate_result(link13_raw), auto_link(link13_raw) 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 http://en.wikipedia.org/wiki/Wikipedia:Today%27s_featured_picture_%28animation%29/January_20%2C_2007 http://www.mail-archive.com/rails@lists.rubyonrails.org/ http://www.amazon.com/Testing-Equal-Sign-In-Path/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1198861734&sr=8-1 http://en.wikipedia.org/wiki/Texas_hold'em https://www.google.com/doku.php?id=gps:resource:scs:start http://connect.oraclecorp.com/search?search[q]=green+france&search[type]=Group http://of.openfoundry.org/projects/492/download#4th.Release.3 http://maps.google.co.uk/maps?f=q&q=the+london+eye&ie=UTF8&ll=51.503373,-0.11939&spn=0.007052,0.012767&z=16&iwloc=A http://около.кола/колокола ) urls.each do |url| assert_equal generate_result(url), auto_link(url) end end def test_autolink_with_trailing_equals_on_link url = "http://www.rubyonrails.com/foo.cgi?trailing_equals=" assert_equal generate_result(url), auto_link(url) end def test_autolink_with_trailing_amp_on_link url = "http://www.rubyonrails.com/foo.cgi?trailing_ampersand=value&" assert_equal generate_result(url), auto_link(url) end def test_auto_link_does_not_timeout_when_parsing_odd_email_input inputs = %w( foo@................................... foo@........................................ foo@............................................. ) inputs.each do |input| Timeout.timeout(0.2) do assert_equal input, auto_link(input) end end end private def generate_result(link_text, href = nil, escape = false) href ||= link_text if escape %{#{CGI::escapeHTML link_text}} else %{#{link_text}} end end # from ruby core def build_message(head, template=nil, *arguments) template &&= template.chomp template.gsub(/\?/) { mu_pp(arguments.shift) } end # Temporarily replaces KCODE for the block def with_kcode(kcode) if RUBY_VERSION < '1.9' old_kcode, $KCODE = $KCODE, kcode begin yield ensure $KCODE = old_kcode end else yield end end end rails_autolink-1.1.6/rails_autolink.gemspec0000644000004100000410000000147312352214235021160 0ustar www-datawww-datarequire File.expand_path "#{File.dirname(__FILE__)}/lib/rails_autolink/version" Gem::Specification.new do |s| s.name = 'rails_autolink' s.version = RailsAutolink::VERSION s.date = Time.now.strftime('%Y-%m-%d') s.authors = ['Aaron Patterson', 'Juanjo Bazan', 'Akira Matsuda'] s.email = 'aaron@tenderlovemaking.com' s.homepage = 'https://github.com/tenderlove/rails_autolink' s.summary = 'Automatic generation of html links in texts' s.description = 'This is an extraction of the `auto_link` method from rails. The `auto_link` method was removed from Rails in version Rails 3.1. This gem is meant to bridge the gap for people migrating.' s.add_dependency 'rails', '> 3.1' s.required_ruby_version = '>= 1.9.3' s.license = 'MIT' s.files = Dir.glob("{test,lib/**/*}") + `git ls-files -z`.split("\0") end rails_autolink-1.1.6/.gitignore0000644000004100000410000000020612352214235016554 0ustar www-datawww-dataGemfile.lock *.gem *.rbc .bundle .config coverage InstalledFiles lib/bundler/man pkg rdoc test/tmp test/version_tmp tmp .rvmrc .ruby-*rails_autolink-1.1.6/checksums.yaml.gz0000444000004100000410000000041412352214235020053 0ustar www-datawww-dataD`Se;R0 D"#9T4L*NI z{.o~^?ai{_E<]i6 ⍹|E w;(gVY\a