rails_autolink 1.1.6 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.rdoc +8 -0
- data/lib/rails_autolink/helpers.rb +3 -3
- data/lib/rails_autolink/version.rb +2 -2
- data/test/test_rails_autolink.rb +48 -20
- metadata +6 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8151243f8627232813288a4ec8e6e7c9ff2df1b9bab1d8d093534fc09359a866
|
4
|
+
data.tar.gz: 6ee3e115c0e7400fc0f1aebd68ef5e727db8b0d08b46c3daff87788d5ff7f52a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98f03447600e361b2061cb12ccab3e215d56eff9e3ffacf9a70507873fea8e3a92882446959d307f787206aed77f8d5f28a248c3dbcea56e274335592ae04028
|
7
|
+
data.tar.gz: 10228d699f37f4a8d08e7d430e3eb9516387ced3b3dc964e95b1a4717deda33121a0670ee4b6cccb042f08ff0b53a7f783c50a63b73de0a0c592fe6f81144ab2
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 1.1.7 / 2022-11-02
|
2
|
+
|
3
|
+
* Require a word part after “www.” when auto linking #75
|
4
|
+
* Include trailing hyphens in URL #74
|
5
|
+
* Make test suite work under Rails 7 #72
|
6
|
+
* Optimize email address parsing #63
|
7
|
+
* Switch to MiniTest 5 #48
|
8
|
+
|
1
9
|
=== 1.1.6 / 2014-06-08
|
2
10
|
|
3
11
|
* Fixed a potential XSS vulnerability #47
|
@@ -71,7 +71,7 @@ module RailsAutolink
|
|
71
71
|
private
|
72
72
|
|
73
73
|
AUTO_LINK_RE = %r{
|
74
|
-
(?: ((?: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
|
74
|
+
(?: ((?: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\.\w )
|
75
75
|
[^\s<\u00A0"]+
|
76
76
|
}ix
|
77
77
|
|
@@ -79,7 +79,7 @@ module RailsAutolink
|
|
79
79
|
AUTO_LINK_CRE = [/<[^>]+$/, /^[^>]*>/, /<a\b.*?>/i, /<\/a>/i]
|
80
80
|
|
81
81
|
AUTO_EMAIL_LOCAL_RE = /[\w.!#\$%&'*\/=?^`{|}~+-]/
|
82
|
-
AUTO_EMAIL_RE = /[\w.!#\$%+-]\.?#{AUTO_EMAIL_LOCAL_RE}*@[\w-]+(?:\.[\w-]+)+/
|
82
|
+
AUTO_EMAIL_RE = /(?<!#{AUTO_EMAIL_LOCAL_RE})[\w.!#\$%+-]\.?#{AUTO_EMAIL_LOCAL_RE}*@[\w-]+(?:\.[\w-]+)+/
|
83
83
|
|
84
84
|
BRACKETS = { ']' => '[', ')' => '(', '}' => '{' }
|
85
85
|
|
@@ -98,7 +98,7 @@ module RailsAutolink
|
|
98
98
|
href
|
99
99
|
else
|
100
100
|
# don't include trailing punctuation character as part of the URL
|
101
|
-
while href.sub!(/[^#{WORD_PATTERN}
|
101
|
+
while href.sub!(/[^#{WORD_PATTERN}\/\-=;]$/, '')
|
102
102
|
punctuation.push $&
|
103
103
|
if opening = BRACKETS[punctuation.last] and href.scan(opening).size > href.scan(punctuation.last).size
|
104
104
|
href << punctuation.pop
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module RailsAutolink
|
2
|
-
VERSION = '1.1.
|
3
|
-
end
|
2
|
+
VERSION = '1.1.7'
|
3
|
+
end
|
data/test/test_rails_autolink.rb
CHANGED
@@ -13,7 +13,7 @@ require 'action_dispatch/testing/assertions'
|
|
13
13
|
require 'timeout'
|
14
14
|
require "rails_autolink/helpers"
|
15
15
|
|
16
|
-
class TestRailsAutolink <
|
16
|
+
class TestRailsAutolink < Minitest::Test
|
17
17
|
include ActionView::Helpers::CaptureHelper
|
18
18
|
include ActionView::Helpers::TextHelper
|
19
19
|
include ActionView::Helpers::SanitizeHelper
|
@@ -24,7 +24,7 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
24
24
|
|
25
25
|
def test_auto_link_within_tags
|
26
26
|
link_raw = 'http://www.rubyonrails.org/images/rails.png'
|
27
|
-
link_result = %Q(<img src="#{link_raw}"
|
27
|
+
link_result = %Q(<img src="#{link_raw}">)
|
28
28
|
assert_equal link_result, auto_link(link_result)
|
29
29
|
end
|
30
30
|
|
@@ -62,7 +62,7 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
62
62
|
url = "http://api.rubyonrails.com/Foo.html"
|
63
63
|
email = "fantabulous@shiznadel.ic"
|
64
64
|
|
65
|
-
assert_equal %(<p><a href="#{url}">#{url[0...7]}...</a><br
|
65
|
+
assert_equal %(<p><a href="#{url}">#{url[0...7]}...</a><br><a href="mailto:#{email}">#{email[0...7]}...</a><br></p>), auto_link("<p>#{url}<br>#{email}<br></p>") { |_url| truncate(_url, :length => 10) }
|
66
66
|
end
|
67
67
|
|
68
68
|
def test_auto_link_with_block_with_html
|
@@ -81,7 +81,7 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
81
81
|
def test_auto_link_should_sanitize_input_when_sanitize_option_is_not_false
|
82
82
|
link_raw = %{http://www.rubyonrails.com?id=1&num=2}
|
83
83
|
malicious_script = '<script>alert("malicious!")</script>'
|
84
|
-
assert_equal %{<a href="http://www.rubyonrails.com?id=1&num=
|
84
|
+
assert_equal %{<a href="http://www.rubyonrails.com?id=1&num=2alert">http://www.rubyonrails.com?id=1&num=2alert</a>("malicious!")}, auto_link("#{link_raw}#{malicious_script}")
|
85
85
|
assert auto_link("#{link_raw}#{malicious_script}").html_safe?
|
86
86
|
end
|
87
87
|
|
@@ -90,7 +90,7 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
90
90
|
malicious_script = '<script>alert("malicious!")</script>'
|
91
91
|
text_with_attributes = %{<a href="http://ruby-lang-org" target="_blank" data-malicious="inject">Ruby</a>}
|
92
92
|
|
93
|
-
text_result = %{<a class="big" href="http://www.rubyonrails.com?id=1&num=
|
93
|
+
text_result = %{<a class="big" href="http://www.rubyonrails.com?id=1&num=2alert">http://www.rubyonrails.com?id=1&num=2alert</a>("malicious!")<a href="http://ruby-lang-org" target="_blank">Ruby</a>}
|
94
94
|
assert_equal text_result, auto_link("#{link_raw}#{malicious_script}#{text_with_attributes}",
|
95
95
|
:sanitize_options => {:attributes => ["target", "href"]},
|
96
96
|
:html => {:class => 'big'})
|
@@ -146,7 +146,7 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
146
146
|
url1 = "http://api.rubyonrails.com/Foo.html"
|
147
147
|
url2 = "http://www.ruby-doc.org/core/Bar.html"
|
148
148
|
|
149
|
-
assert_equal %(<p><a href="#{url1}">#{url1}</a><br
|
149
|
+
assert_equal %(<p><a href="#{url1}">#{url1}</a><br><a href="#{url2}">#{url2}</a><br></p>), auto_link("<p>#{url1}<br>#{url2}<br></p>")
|
150
150
|
end
|
151
151
|
|
152
152
|
def test_auto_link_should_be_html_safe
|
@@ -177,14 +177,16 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
177
177
|
end
|
178
178
|
|
179
179
|
def test_auto_link_email_addres_with_especial_chars
|
180
|
-
email_raw
|
180
|
+
email_raw = "andre$la*+r-a.o'rea=l~ly@tenderlovemaking.com"
|
181
|
+
email_raw_encoded = ERB::Util.url_encode("andre$la*+r-a.o'rea=l~ly@tenderlovemaking.com").gsub("%40", "@")
|
181
182
|
email_sanitized = if Rails.version =~ /^3/
|
182
183
|
# mail_to changed the number base it rendered HTML encoded characters at some point
|
183
|
-
"
|
184
|
+
"andre$la*+r-a.o'rea=l~ly@tenderlovemaking.com"
|
184
185
|
else
|
185
|
-
"
|
186
|
+
"andre$la*+r-a.o'rea=l~ly@tenderlovemaking.com"
|
186
187
|
end
|
187
|
-
email_result = %{<a href="mailto:#{
|
188
|
+
email_result = %{<a href="mailto:#{email_raw_encoded}">#{email_sanitized}</a>}
|
189
|
+
|
188
190
|
assert_equal email_result, auto_link(email_raw)
|
189
191
|
assert !auto_link_email_addresses(email_result).html_safe?, 'should not be html safe'
|
190
192
|
end
|
@@ -194,7 +196,7 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
194
196
|
email_result = %{<a href="mailto:#{email_raw}">#{email_raw}</a>}
|
195
197
|
link_raw = 'http://www.rubyonrails.com'
|
196
198
|
link_result = generate_result(link_raw)
|
197
|
-
link_result_with_options = %{<a href="#{link_raw}"
|
199
|
+
link_result_with_options = %{<a target="_blank" href="#{link_raw}">#{link_raw}</a>}
|
198
200
|
|
199
201
|
assert_equal '', auto_link(nil)
|
200
202
|
assert_equal '', auto_link('')
|
@@ -212,7 +214,7 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
212
214
|
assert_equal %(#{link_result} #{link_result}), auto_link(%(#{link_result} #{link_raw}))
|
213
215
|
|
214
216
|
email2_raw = '+david@loudthinking.com'
|
215
|
-
email2_result = %{<a href="mailto
|
217
|
+
email2_result = %{<a href="mailto:%2Bdavid@loudthinking.com">#{email2_raw}</a>}
|
216
218
|
assert_equal email2_result, auto_link(email2_raw)
|
217
219
|
assert_equal email2_result, auto_link(email2_raw, :all)
|
218
220
|
assert_equal email2_result, auto_link(email2_raw, :email_addresses)
|
@@ -313,6 +315,7 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
313
315
|
http://of.openfoundry.org/projects/492/download#4th.Release.3
|
314
316
|
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
|
315
317
|
http://около.кола/колокола
|
318
|
+
https://123domain.com https://123.com https://123.domain.com https://www.123.domain.com
|
316
319
|
)
|
317
320
|
|
318
321
|
urls.each do |url|
|
@@ -330,11 +333,35 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
330
333
|
assert_equal generate_result(url), auto_link(url)
|
331
334
|
end
|
332
335
|
|
336
|
+
def test_autolink_with_trailing_colon_on_link
|
337
|
+
url = "http://www.rubyonrails.com/foo.cgi?trailing_colon=value:"
|
338
|
+
expected_url = "http://www.rubyonrails.com/foo.cgi?trailing_colon=value"
|
339
|
+
|
340
|
+
assert_equal "#{generate_result(expected_url)}:", auto_link(url)
|
341
|
+
end
|
342
|
+
|
343
|
+
def test_autolink_with_trailing_hyphen_on_link
|
344
|
+
url = "http://www.rubyonrails.com/foo.cgi?trailing_hyphen=value-"
|
345
|
+
assert_equal generate_result(url), auto_link(url)
|
346
|
+
end
|
347
|
+
|
348
|
+
def test_autolink_with_trailing_forward_slash_on_link
|
349
|
+
url = "http://www.rubyonrails.com/foo.cgi?trailing_forward_slash=value/"
|
350
|
+
assert_equal generate_result(url), auto_link(url)
|
351
|
+
end
|
352
|
+
|
353
|
+
def test_autolink_with_trailing_number_on_link
|
354
|
+
url = "http://www.rubyonrails.com/foo.cgi?trailing_number=value3"
|
355
|
+
assert_equal generate_result(url), auto_link(url)
|
356
|
+
end
|
357
|
+
|
333
358
|
def test_auto_link_does_not_timeout_when_parsing_odd_email_input
|
334
|
-
inputs = %
|
359
|
+
inputs = %W(
|
335
360
|
foo@...................................
|
336
361
|
foo@........................................
|
337
362
|
foo@.............................................
|
363
|
+
|
364
|
+
#{'foo' * 20000}@
|
338
365
|
)
|
339
366
|
|
340
367
|
inputs.each do |input|
|
@@ -344,14 +371,15 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
344
371
|
end
|
345
372
|
end
|
346
373
|
|
374
|
+
def test_auto_link_with_www_in_non_url_string
|
375
|
+
assert_equal "awww.", auto_link("awww.")
|
376
|
+
end
|
377
|
+
|
347
378
|
private
|
348
|
-
def generate_result(link_text, href = nil
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
else
|
353
|
-
%{<a href="#{href}">#{link_text}</a>}
|
354
|
-
end
|
379
|
+
def generate_result(link_text, href = nil)
|
380
|
+
text = sanitize(link_text)
|
381
|
+
href = sanitize(href) || text
|
382
|
+
%{<a href="#{href}">#{text}</a>}.gsub("'", "'") # ActionView does not escape '
|
355
383
|
end
|
356
384
|
|
357
385
|
# from ruby core
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_autolink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
- Juanjo Bazan
|
9
9
|
- Akira Matsuda
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2022-11-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -49,7 +49,7 @@ homepage: https://github.com/tenderlove/rails_autolink
|
|
49
49
|
licenses:
|
50
50
|
- MIT
|
51
51
|
metadata: {}
|
52
|
-
post_install_message:
|
52
|
+
post_install_message:
|
53
53
|
rdoc_options: []
|
54
54
|
require_paths:
|
55
55
|
- lib
|
@@ -64,9 +64,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
- !ruby/object:Gem::Version
|
65
65
|
version: '0'
|
66
66
|
requirements: []
|
67
|
-
|
68
|
-
|
69
|
-
signing_key:
|
67
|
+
rubygems_version: 3.2.33
|
68
|
+
signing_key:
|
70
69
|
specification_version: 4
|
71
70
|
summary: Automatic generation of html links in texts
|
72
71
|
test_files: []
|