rails_autolink 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +4 -0
- data/lib/rails_autolink.rb +1 -1
- data/lib/rails_autolink/helpers.rb +7 -5
- data/test/test_loco.rb +64 -0
- data/test/test_rails_autolink.rb +17 -0
- metadata +13 -11
data/CHANGELOG.rdoc
CHANGED
data/lib/rails_autolink.rb
CHANGED
@@ -13,7 +13,8 @@ module RailsAutolink
|
|
13
13
|
# <tt>:email_addresses</tt>, and <tt>:urls</tt>. If a block is given, each URL and
|
14
14
|
# e-mail address is yielded and the result is used as the link text. By default the
|
15
15
|
# text given is sanitized, you can override this behaviour setting the
|
16
|
-
# <tt>:sanitize</tt> option to false
|
16
|
+
# <tt>:sanitize</tt> option to false, or you can add options to the sanitization of
|
17
|
+
# the text using the <tt>:sanitize_options</tt> option hash.
|
17
18
|
#
|
18
19
|
# ==== Examples
|
19
20
|
# auto_link("Go to http://www.rubyonrails.org and say hello to david@loudthinking.com")
|
@@ -55,8 +56,9 @@ module RailsAutolink
|
|
55
56
|
options[:html] = args[1] || {}
|
56
57
|
end
|
57
58
|
options.reverse_merge!(:link => :all, :html => {})
|
58
|
-
sanitize = (options[:sanitize] != false)
|
59
|
-
|
59
|
+
sanitize = (options[:sanitize] != false)
|
60
|
+
sanitize_options = options[:sanitize_options] || {}
|
61
|
+
text = conditional_sanitize(text, sanitize, sanitize_options).to_str
|
60
62
|
case options[:link].to_sym
|
61
63
|
when :all then conditional_html_safe(auto_link_email_addresses(auto_link_urls(text, options[:html], options, &block), options[:html], &block), sanitize)
|
62
64
|
when :email_addresses then conditional_html_safe(auto_link_email_addresses(text, options[:html], &block), sanitize)
|
@@ -137,8 +139,8 @@ module RailsAutolink
|
|
137
139
|
(left.rindex(AUTO_LINK_CRE[2]) and $' !~ AUTO_LINK_CRE[3])
|
138
140
|
end
|
139
141
|
|
140
|
-
def conditional_sanitize(target, condition)
|
141
|
-
condition ? sanitize(target) : target
|
142
|
+
def conditional_sanitize(target, condition, sanitize_options = {})
|
143
|
+
condition ? sanitize(target, sanitize_options) : target
|
142
144
|
end
|
143
145
|
|
144
146
|
def conditional_html_safe(target, condition)
|
data/test/test_loco.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "minitest/autorun"
|
4
|
+
require "rails"
|
5
|
+
require "rails_autolink/helpers"
|
6
|
+
require 'erb'
|
7
|
+
require 'cgi'
|
8
|
+
require 'active_support/core_ext/class/attribute_accessors'
|
9
|
+
require 'action_pack'
|
10
|
+
require 'action_view/helpers/capture_helper'
|
11
|
+
require 'action_view/helpers/sanitize_helper'
|
12
|
+
require 'action_view/helpers/url_helper'
|
13
|
+
require 'action_view/helpers/tag_helper'
|
14
|
+
require 'active_support/core_ext/module/attribute_accessors'
|
15
|
+
require 'active_support/core_ext/string/encoding'
|
16
|
+
require 'action_dispatch/testing/assertions'
|
17
|
+
require 'action_view/helpers/text_helper'
|
18
|
+
require 'action_view/helpers/output_safety_helper'
|
19
|
+
|
20
|
+
class TestRailsAutolink < MiniTest::Unit::TestCase
|
21
|
+
include ActionView::Helpers::CaptureHelper
|
22
|
+
include ActionView::Helpers::TextHelper
|
23
|
+
include ActionView::Helpers::SanitizeHelper
|
24
|
+
include ActionView::Helpers::TagHelper
|
25
|
+
include ActionView::Helpers::UrlHelper
|
26
|
+
include ActionView::Helpers::OutputSafetyHelper
|
27
|
+
include ActionDispatch::Assertions::DomAssertions
|
28
|
+
|
29
|
+
|
30
|
+
def test_loco
|
31
|
+
t = "OOOOOOOOOOOOOOOOOOOOOOO <h1>textile<a href=\"http://ruby-lang.org\" class='asdasd' target='_blank' >Ruby</a>\n</h1> otro link: www.hola.com"
|
32
|
+
assert_equal "loco", auto_link(t, :link=> 'urls', :sanitize_options => {:attributes => ["target", "class"], :tags=>[]}, :html=> {:target => '_blank', :mememe=> 'MEM'})
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def generate_result(link_text, href = nil, escape = false)
|
37
|
+
href ||= link_text
|
38
|
+
if escape
|
39
|
+
%{<a href="#{CGI::escapeHTML href}">#{CGI::escapeHTML link_text}</a>}
|
40
|
+
else
|
41
|
+
%{<a href="#{href}">#{link_text}</a>}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# from ruby core
|
46
|
+
def build_message(head, template=nil, *arguments)
|
47
|
+
template &&= template.chomp
|
48
|
+
template.gsub(/\?/) { mu_pp(arguments.shift) }
|
49
|
+
end
|
50
|
+
|
51
|
+
# Temporarily replaces KCODE for the block
|
52
|
+
def with_kcode(kcode)
|
53
|
+
if RUBY_VERSION < '1.9'
|
54
|
+
old_kcode, $KCODE = $KCODE, kcode
|
55
|
+
begin
|
56
|
+
yield
|
57
|
+
ensure
|
58
|
+
$KCODE = old_kcode
|
59
|
+
end
|
60
|
+
else
|
61
|
+
yield
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/test/test_rails_autolink.rb
CHANGED
@@ -88,6 +88,21 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
88
88
|
assert_equal %{<a href="http://www.rubyonrails.com?id=1&num=2">http://www.rubyonrails.com?id=1&num=2</a>}, auto_link("#{link_raw}#{malicious_script}")
|
89
89
|
assert auto_link("#{link_raw}#{malicious_script}").html_safe?
|
90
90
|
end
|
91
|
+
|
92
|
+
def test_auto_link_should_sanitize_input_with_sanitize_options
|
93
|
+
link_raw = %{http://www.rubyonrails.com?id=1&num=2}
|
94
|
+
malicious_script = '<script>alert("malicious!")</script>'
|
95
|
+
text_with_attributes = %{<a href="http://ruby-lang-org" target="_blank" data-malicious="inject">Ruby</a>}
|
96
|
+
|
97
|
+
text_result = %{<a class="big" href="http://www.rubyonrails.com?id=1&num=2">http://www.rubyonrails.com?id=1&num=2</a><a href="http://ruby-lang-org" target="_blank">Ruby</a>}
|
98
|
+
assert_equal text_result, auto_link("#{link_raw}#{malicious_script}#{text_with_attributes}",
|
99
|
+
:sanitize_options => {:attributes => ["target", "href"]},
|
100
|
+
:html => {:class => 'big'})
|
101
|
+
|
102
|
+
assert auto_link("#{link_raw}#{malicious_script}#{text_with_attributes}",
|
103
|
+
:sanitize_options => {:attributes => ["target", "href"]},
|
104
|
+
:html => {:class => 'big'}).html_safe?
|
105
|
+
end
|
91
106
|
|
92
107
|
def test_auto_link_should_not_sanitize_input_when_sanitize_option_is_false
|
93
108
|
link_raw = %{http://www.rubyonrails.com?id=1&num=2}
|
@@ -117,11 +132,13 @@ class TestRailsAutolink < MiniTest::Unit::TestCase
|
|
117
132
|
linked3 = %('<a href="http://www.example.com" rel="nofollow">www.example.com</a>')
|
118
133
|
linked4 = %('<a href="http://www.example.com"><b>www.example.com</b></a>')
|
119
134
|
linked5 = %('<a href="#close">close</a> <a href="http://www.example.com"><b>www.example.com</b></a>')
|
135
|
+
linked6 = %('<a href="#close">close</a> <a href="http://www.example.com" target="_blank" data-ruby="ror"><b>www.example.com</b></a>')
|
120
136
|
assert_equal linked1, auto_link(linked1)
|
121
137
|
assert_equal linked2, auto_link(linked2)
|
122
138
|
assert_equal linked3, auto_link(linked3, :sanitize => false)
|
123
139
|
assert_equal linked4, auto_link(linked4)
|
124
140
|
assert_equal linked5, auto_link(linked5)
|
141
|
+
assert_equal linked6, auto_link(linked6, :sanitize_options => {:attributes => ["href", "target", "data-ruby"]})
|
125
142
|
|
126
143
|
linked_email = %Q(<a href="mailto:david@loudthinking.com">Mail me</a>)
|
127
144
|
assert_equal linked_email, auto_link(linked_email)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_autolink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-03-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
18
|
-
requirement: &
|
18
|
+
requirement: &2152957660 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '3.1'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *2152957660
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: minitest
|
29
|
-
requirement: &
|
29
|
+
requirement: &2152956620 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '2.11'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *2152956620
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: rdoc
|
40
|
-
requirement: &
|
40
|
+
requirement: &2152955520 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '3.10'
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *2152955520
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: hoe
|
51
|
-
requirement: &
|
51
|
+
requirement: &2152954180 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
version: '2.13'
|
57
57
|
type: :development
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *2152954180
|
60
60
|
description: ! 'This is an extraction of the `auto_link` method from rails. The `auto_link`
|
61
61
|
|
62
62
|
method was removed from Rails in version Rails 3.1. This gem is meant to
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/rails_autolink.rb
|
83
83
|
- lib/rails_autolink/helpers.rb
|
84
84
|
- test/test_rails_autolink.rb
|
85
|
+
- test/test_loco.rb
|
85
86
|
- .gemtest
|
86
87
|
homepage: http://github.com/tenderlove/rails_autolink
|
87
88
|
licenses: []
|
@@ -105,9 +106,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
106
|
version: '0'
|
106
107
|
requirements: []
|
107
108
|
rubyforge_project: rails_autolink
|
108
|
-
rubygems_version: 1.8.
|
109
|
+
rubygems_version: 1.8.15
|
109
110
|
signing_key:
|
110
111
|
specification_version: 3
|
111
112
|
summary: This is an extraction of the `auto_link` method from rails
|
112
113
|
test_files:
|
114
|
+
- test/test_loco.rb
|
113
115
|
- test/test_rails_autolink.rb
|