loofah 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of loofah might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +9 -0
- data/Manifest.txt +1 -0
- data/lib/loofah.rb +5 -1
- data/lib/loofah/helpers.rb +2 -1
- data/lib/loofah/html5/scrub.rb +2 -2
- data/lib/loofah/instance_methods.rb +1 -1
- data/test/html5/test_sanitizer.rb +13 -0
- data/test/integration/test_ad_hoc.rb +1 -1
- data/test/integration/test_html.rb +5 -3
- data/test/unit/test_api.rb +105 -101
- data/test/unit/test_encoding.rb +10 -10
- metadata +77 -89
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe26253679940dacafe8041f66b983b3bcbf52a0
|
4
|
+
data.tar.gz: 1e871815f543b062b2b128a195c6e6068b18241d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40893992f92d5a29c7bd40de6b6b7190d823237803d4245f8b66b1dea0b884dabf11578e061ba73fef6b89df6828e8eb8fd47618385583880b2f6953cc98b022
|
7
|
+
data.tar.gz: 55ca03dd4ea01c46ff6e7a932a8eb6c2a6bb106223c46f1ea74f06a99847f9780a23ae1752950249407567f9e42fee7fecc42d6c2cbe4e06baeb3f1f2d5751fd
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
= Changelog
|
2
2
|
|
3
|
+
== 2.0.2 / 2015-05-05
|
4
|
+
|
5
|
+
Bug fixes:
|
6
|
+
|
7
|
+
* Fix error with `#to_text` when Loofah::Helpers hadn't been required. #75
|
8
|
+
* Allow multi-word data attributes. #84 (Thanks, @jstorimer!)
|
9
|
+
* Allow negative values in CSS properties. #85 (Thanks, @siddhartham!)
|
10
|
+
|
11
|
+
|
3
12
|
== 2.0.1 / 2014-08-21
|
4
13
|
|
5
14
|
Bug fixes:
|
data/Manifest.txt
CHANGED
data/lib/loofah.rb
CHANGED
@@ -27,7 +27,7 @@ require 'loofah/html/document_fragment'
|
|
27
27
|
#
|
28
28
|
module Loofah
|
29
29
|
# The version of Loofah you are using
|
30
|
-
VERSION = '2.0.
|
30
|
+
VERSION = '2.0.2'
|
31
31
|
|
32
32
|
class << self
|
33
33
|
# Shortcut for Loofah::HTML::Document.parse
|
@@ -74,5 +74,9 @@ module Loofah
|
|
74
74
|
Loofah.xml_document(string_or_io).scrub!(method)
|
75
75
|
end
|
76
76
|
|
77
|
+
# A helper to remove extraneous whitespace from text-ified HTML
|
78
|
+
def remove_extraneous_whitespace(string)
|
79
|
+
string.gsub(/\n\s*\n\s*\n/,"\n\n")
|
80
|
+
end
|
77
81
|
end
|
78
82
|
end
|
data/lib/loofah/helpers.rb
CHANGED
@@ -33,9 +33,10 @@ module Loofah
|
|
33
33
|
|
34
34
|
#
|
35
35
|
# A helper to remove extraneous whitespace from text-ified HTML
|
36
|
+
# TODO: remove this in a future major-point-release.
|
36
37
|
#
|
37
38
|
def remove_extraneous_whitespace(string)
|
38
|
-
string
|
39
|
+
Loofah.remove_extraneous_whitespace string
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
data/lib/loofah/html5/scrub.rb
CHANGED
@@ -23,7 +23,7 @@ module Loofah
|
|
23
23
|
attr_node.node_name
|
24
24
|
end
|
25
25
|
|
26
|
-
if attr_name =~ /\Adata
|
26
|
+
if attr_name =~ /\Adata-[\w-]+\z/
|
27
27
|
next
|
28
28
|
end
|
29
29
|
|
@@ -79,7 +79,7 @@ module Loofah
|
|
79
79
|
elsif WhiteList::SHORTHAND_CSS_PROPERTIES.include?(prop.split('-')[0])
|
80
80
|
clean << "#{prop}: #{val};" unless val.split().any? do |keyword|
|
81
81
|
!WhiteList::ALLOWED_CSS_KEYWORDS.include?(keyword) &&
|
82
|
-
keyword !~ /\A(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)
|
82
|
+
keyword !~ /\A(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|-?\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)\z/
|
83
83
|
end
|
84
84
|
elsif WhiteList::ALLOWED_SVG_PROPERTIES.include?(prop)
|
85
85
|
clean << "#{prop}: #{val};"
|
@@ -113,7 +113,7 @@ module Loofah
|
|
113
113
|
# # => "\nTitle\n\nContent\n"
|
114
114
|
#
|
115
115
|
def to_text(options={})
|
116
|
-
Loofah
|
116
|
+
Loofah.remove_extraneous_whitespace self.dup.scrub!(:newline_block_elements).text(options)
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
@@ -97,6 +97,13 @@ class Html5TestSanitizer < Loofah::TestCase
|
|
97
97
|
check_sanitization(input, htmloutput, output, output)
|
98
98
|
end
|
99
99
|
|
100
|
+
def test_should_allow_multi_word_data_attributes
|
101
|
+
input = "<p data-foo-bar-id='11'>foo <bad>bar</bad> baz</p>"
|
102
|
+
output = htmloutput = "<p data-foo-bar-id='11'>foo <bad>bar</bad> baz</p>"
|
103
|
+
|
104
|
+
check_sanitization(input, htmloutput, output, output)
|
105
|
+
end
|
106
|
+
|
100
107
|
##
|
101
108
|
## libxml2 downcases attributes, so this is moot.
|
102
109
|
##
|
@@ -220,6 +227,12 @@ class Html5TestSanitizer < Loofah::TestCase
|
|
220
227
|
sane = Nokogiri::HTML(Loofah.scrub_fragment(html, :escape).to_xml)
|
221
228
|
assert_match %r/-0.03em/, sane.inner_html
|
222
229
|
end
|
230
|
+
|
231
|
+
def test_css_negative_value_sanitization_shorthand_css_properties
|
232
|
+
html = "<span style=\"margin-left:-0.05em;\">"
|
233
|
+
sane = Nokogiri::HTML(Loofah.scrub_fragment(html, :escape).to_xml)
|
234
|
+
assert_match %r/-0.05em/, sane.inner_html
|
235
|
+
end
|
223
236
|
end
|
224
237
|
|
225
238
|
# <html5_license>
|
@@ -143,7 +143,7 @@ mso-bidi-language:#0400;}
|
|
143
143
|
|
144
144
|
def test_fragment_whitewash_on_microsofty_markup
|
145
145
|
whitewashed = Loofah.fragment(MSWORD_HTML).scrub!(:whitewash)
|
146
|
-
assert_equal "<p>Foo <b>BOLD</b></p>", whitewashed.to_s
|
146
|
+
assert_equal "<p>Foo <b>BOLD</b></p>", whitewashed.to_s.strip
|
147
147
|
end
|
148
148
|
|
149
149
|
def test_document_whitewash_on_microsofty_markup
|
@@ -39,9 +39,11 @@ class IntegrationTestHtml < Loofah::TestCase
|
|
39
39
|
end
|
40
40
|
|
41
41
|
context "html document" do
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
context "#text" do
|
43
|
+
it "not include head tags (like style)" do
|
44
|
+
html = Loofah.document "<style>foo</style><div>bar</div>"
|
45
|
+
assert_equal "bar", html.text
|
46
|
+
end
|
45
47
|
end
|
46
48
|
|
47
49
|
context "#to_text" do
|
data/test/unit/test_api.rb
CHANGED
@@ -6,107 +6,111 @@ class UnitTestApi < Loofah::TestCase
|
|
6
6
|
XML_FRAGMENT = "<div>a</div>\n<div>b</div>"
|
7
7
|
XML = "<root>#{XML_FRAGMENT}</root>"
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
9
|
+
describe "HTML" do
|
10
|
+
it "creates documents" do
|
11
|
+
doc = Loofah.document(HTML)
|
12
|
+
assert_html_documentish doc
|
13
|
+
end
|
14
|
+
|
15
|
+
it "creates fragments" do
|
16
|
+
doc = Loofah.fragment(HTML)
|
17
|
+
assert_html_fragmentish doc
|
18
|
+
end
|
19
|
+
|
20
|
+
it "parses documents" do
|
21
|
+
doc = Loofah::HTML::Document.parse(HTML)
|
22
|
+
assert_html_documentish doc
|
23
|
+
end
|
24
|
+
|
25
|
+
it "parses document fragment" do
|
26
|
+
doc = Loofah::HTML::DocumentFragment.parse(HTML)
|
27
|
+
assert_html_fragmentish doc
|
28
|
+
end
|
29
|
+
|
30
|
+
it "scrubs documents" do
|
31
|
+
doc = Loofah.document(HTML).scrub!(:strip)
|
32
|
+
assert_html_documentish doc
|
33
|
+
end
|
34
|
+
|
35
|
+
it "scrubs fragments" do
|
36
|
+
doc = Loofah.fragment(HTML).scrub!(:strip)
|
37
|
+
assert_html_fragmentish doc
|
38
|
+
end
|
39
|
+
|
40
|
+
it "scrubs document nodes" do
|
41
|
+
doc = Loofah.document(HTML)
|
42
|
+
assert(node = doc.at_css("div"))
|
43
|
+
node.scrub!(:strip)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "scrubs fragment nodes" do
|
47
|
+
doc = Loofah.fragment(HTML)
|
48
|
+
assert(node = doc.at_css("div"))
|
49
|
+
node.scrub!(:strip)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "scrubs document nodesets" do
|
53
|
+
doc = Loofah.document(HTML)
|
54
|
+
assert(node_set = doc.css("div"))
|
55
|
+
assert_instance_of Nokogiri::XML::NodeSet, node_set
|
56
|
+
node_set.scrub!(:strip)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "exposes serialize_root on HTML::DocumentFragment" do
|
60
|
+
doc = Loofah.fragment(HTML)
|
61
|
+
assert_equal HTML, doc.serialize_root.to_html
|
62
|
+
end
|
63
|
+
|
64
|
+
it "exposes serialize_root on HTML::Document" do
|
65
|
+
doc = Loofah.document(HTML)
|
66
|
+
assert_equal HTML, doc.serialize_root.children.to_html
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "XML" do
|
71
|
+
it "creates documents" do
|
72
|
+
doc = Loofah.xml_document(XML)
|
73
|
+
assert_xml_documentish doc
|
74
|
+
end
|
75
|
+
|
76
|
+
it "creates fragments" do
|
77
|
+
doc = Loofah.xml_fragment(XML_FRAGMENT)
|
78
|
+
assert_xml_fragmentish doc
|
79
|
+
end
|
80
|
+
|
81
|
+
it "parses documents" do
|
82
|
+
doc = Loofah::XML::Document.parse(XML)
|
83
|
+
assert_xml_documentish doc
|
84
|
+
end
|
85
|
+
|
86
|
+
it "parses document fragments" do
|
87
|
+
doc = Loofah::XML::DocumentFragment.parse(XML_FRAGMENT)
|
88
|
+
assert_xml_fragmentish doc
|
89
|
+
end
|
90
|
+
|
91
|
+
it "scrubs documents" do
|
92
|
+
scrubber = Loofah::Scrubber.new { |node| }
|
93
|
+
doc = Loofah.xml_document(XML).scrub!(scrubber)
|
94
|
+
assert_xml_documentish doc
|
95
|
+
end
|
96
|
+
|
97
|
+
it "scrubs fragments" do
|
98
|
+
scrubber = Loofah::Scrubber.new { |node| }
|
99
|
+
doc = Loofah.xml_fragment(XML_FRAGMENT).scrub!(scrubber)
|
100
|
+
assert_xml_fragmentish doc
|
101
|
+
end
|
102
|
+
|
103
|
+
it "scrubs document nodes" do
|
104
|
+
doc = Loofah.xml_document(XML)
|
105
|
+
assert(node = doc.at_css("div"))
|
106
|
+
node.scrub!(:strip)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "scrubs fragment nodes" do
|
110
|
+
doc = Loofah.xml_fragment(XML)
|
111
|
+
assert(node = doc.at_css("div"))
|
112
|
+
node.scrub!(:strip)
|
113
|
+
end
|
110
114
|
end
|
111
115
|
|
112
116
|
private
|
data/test/unit/test_encoding.rb
CHANGED
@@ -2,19 +2,19 @@
|
|
2
2
|
require "helper"
|
3
3
|
|
4
4
|
class UnitTestEncoding < Loofah::TestCase
|
5
|
-
|
6
|
-
@utf8_string = "日本語"
|
7
|
-
end
|
5
|
+
UTF8_STRING = "日本語"
|
8
6
|
|
9
7
|
if String.new.respond_to?(:encoding)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
describe "scrub_fragment" do
|
9
|
+
it "sets the encoding for html" do
|
10
|
+
escaped = Loofah.scrub_fragment(UTF8_STRING, :escape).to_s
|
11
|
+
assert_equal UTF8_STRING.encoding, escaped.encoding
|
12
|
+
end
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
it "sets the encoding for xml" do
|
15
|
+
escaped = Loofah.scrub_xml_fragment(UTF8_STRING, :escape).to_s
|
16
|
+
assert_equal UTF8_STRING.encoding, escaped.encoding
|
17
|
+
end
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
metadata
CHANGED
@@ -1,170 +1,170 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loofah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Dalessio
|
8
8
|
- Bryan Helmkamp
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-05-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: 1.5.9
|
21
|
-
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirement: !ruby/object:Gem::Requirement
|
24
22
|
requirements:
|
25
|
-
- -
|
23
|
+
- - '>='
|
26
24
|
- !ruby/object:Gem::Version
|
27
25
|
version: 1.5.9
|
26
|
+
prerelease: false
|
27
|
+
type: :runtime
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rdoc
|
30
|
-
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ~>
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '4.0'
|
35
|
-
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
38
36
|
requirements:
|
39
|
-
- -
|
37
|
+
- - ~>
|
40
38
|
- !ruby/object:Gem::Version
|
41
39
|
version: '4.0'
|
40
|
+
prerelease: false
|
41
|
+
type: :development
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rake
|
44
|
-
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - '>='
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0.8'
|
49
|
-
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
52
50
|
requirements:
|
53
|
-
- -
|
51
|
+
- - '>='
|
54
52
|
- !ruby/object:Gem::Version
|
55
53
|
version: '0.8'
|
54
|
+
prerelease: false
|
55
|
+
type: :development
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: minitest
|
58
|
-
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ~>
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '2.2'
|
63
|
-
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
66
64
|
requirements:
|
67
|
-
- -
|
65
|
+
- - ~>
|
68
66
|
- !ruby/object:Gem::Version
|
69
67
|
version: '2.2'
|
68
|
+
prerelease: false
|
69
|
+
type: :development
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rr
|
72
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ~>
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: 1.1.0
|
77
|
-
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
80
78
|
requirements:
|
81
|
-
- -
|
79
|
+
- - ~>
|
82
80
|
- !ruby/object:Gem::Version
|
83
81
|
version: 1.1.0
|
82
|
+
prerelease: false
|
83
|
+
type: :development
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: json
|
86
|
+
version_requirements: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
86
91
|
requirement: !ruby/object:Gem::Requirement
|
87
92
|
requirements:
|
88
|
-
- -
|
93
|
+
- - '>='
|
89
94
|
- !ruby/object:Gem::Version
|
90
95
|
version: '0'
|
91
|
-
type: :development
|
92
96
|
prerelease: false
|
97
|
+
type: :development
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: hoe-gemspec
|
93
100
|
version_requirements: !ruby/object:Gem::Requirement
|
94
101
|
requirements:
|
95
|
-
- -
|
102
|
+
- - '>='
|
96
103
|
- !ruby/object:Gem::Version
|
97
104
|
version: '0'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: hoe-gemspec
|
100
105
|
requirement: !ruby/object:Gem::Requirement
|
101
106
|
requirements:
|
102
|
-
- -
|
107
|
+
- - '>='
|
103
108
|
- !ruby/object:Gem::Version
|
104
109
|
version: '0'
|
105
|
-
type: :development
|
106
110
|
prerelease: false
|
111
|
+
type: :development
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: hoe-debugging
|
107
114
|
version_requirements: !ruby/object:Gem::Requirement
|
108
115
|
requirements:
|
109
|
-
- -
|
116
|
+
- - '>='
|
110
117
|
- !ruby/object:Gem::Version
|
111
118
|
version: '0'
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: hoe-debugging
|
114
119
|
requirement: !ruby/object:Gem::Requirement
|
115
120
|
requirements:
|
116
|
-
- -
|
121
|
+
- - '>='
|
117
122
|
- !ruby/object:Gem::Version
|
118
123
|
version: '0'
|
119
|
-
type: :development
|
120
124
|
prerelease: false
|
125
|
+
type: :development
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: hoe-bundler
|
121
128
|
version_requirements: !ruby/object:Gem::Requirement
|
122
129
|
requirements:
|
123
|
-
- -
|
130
|
+
- - '>='
|
124
131
|
- !ruby/object:Gem::Version
|
125
132
|
version: '0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: hoe-bundler
|
128
133
|
requirement: !ruby/object:Gem::Requirement
|
129
134
|
requirements:
|
130
|
-
- -
|
135
|
+
- - '>='
|
131
136
|
- !ruby/object:Gem::Version
|
132
137
|
version: '0'
|
133
|
-
type: :development
|
134
138
|
prerelease: false
|
139
|
+
type: :development
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: hoe-git
|
135
142
|
version_requirements: !ruby/object:Gem::Requirement
|
136
143
|
requirements:
|
137
|
-
- -
|
144
|
+
- - '>='
|
138
145
|
- !ruby/object:Gem::Version
|
139
146
|
version: '0'
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: hoe-git
|
142
147
|
requirement: !ruby/object:Gem::Requirement
|
143
148
|
requirements:
|
144
|
-
- -
|
149
|
+
- - '>='
|
145
150
|
- !ruby/object:Gem::Version
|
146
151
|
version: '0'
|
147
|
-
type: :development
|
148
152
|
prerelease: false
|
153
|
+
type: :development
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: hoe
|
149
156
|
version_requirements: !ruby/object:Gem::Requirement
|
150
157
|
requirements:
|
151
|
-
- -
|
158
|
+
- - ~>
|
152
159
|
- !ruby/object:Gem::Version
|
153
|
-
version: '
|
154
|
-
- !ruby/object:Gem::Dependency
|
155
|
-
name: hoe
|
160
|
+
version: '3.13'
|
156
161
|
requirement: !ruby/object:Gem::Requirement
|
157
162
|
requirements:
|
158
|
-
- -
|
163
|
+
- - ~>
|
159
164
|
- !ruby/object:Gem::Version
|
160
|
-
version: '3.
|
161
|
-
type: :development
|
165
|
+
version: '3.13'
|
162
166
|
prerelease: false
|
163
|
-
|
164
|
-
requirements:
|
165
|
-
- - "~>"
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
version: '3.11'
|
167
|
+
type: :development
|
168
168
|
description: |-
|
169
169
|
Loofah is a general library for manipulating and transforming HTML/XML
|
170
170
|
documents and fragments. It's built on top of Nokogiri and libxml2, so
|
@@ -189,7 +189,7 @@ extra_rdoc_files:
|
|
189
189
|
- Manifest.txt
|
190
190
|
- README.rdoc
|
191
191
|
files:
|
192
|
-
-
|
192
|
+
- .gemtest
|
193
193
|
- CHANGELOG.rdoc
|
194
194
|
- Gemfile
|
195
195
|
- MIT-LICENSE.txt
|
@@ -230,38 +230,26 @@ homepage: https://github.com/flavorjones/loofah
|
|
230
230
|
licenses:
|
231
231
|
- MIT
|
232
232
|
metadata: {}
|
233
|
-
post_install_message:
|
233
|
+
post_install_message:
|
234
234
|
rdoc_options:
|
235
|
-
-
|
235
|
+
- --main
|
236
236
|
- README.rdoc
|
237
237
|
require_paths:
|
238
238
|
- lib
|
239
239
|
required_ruby_version: !ruby/object:Gem::Requirement
|
240
240
|
requirements:
|
241
|
-
- -
|
241
|
+
- - '>='
|
242
242
|
- !ruby/object:Gem::Version
|
243
243
|
version: '0'
|
244
244
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
245
245
|
requirements:
|
246
|
-
- -
|
246
|
+
- - '>='
|
247
247
|
- !ruby/object:Gem::Version
|
248
248
|
version: '0'
|
249
249
|
requirements: []
|
250
|
-
rubyforge_project:
|
251
|
-
rubygems_version: 2.
|
252
|
-
signing_key:
|
250
|
+
rubyforge_project:
|
251
|
+
rubygems_version: 2.4.5
|
252
|
+
signing_key:
|
253
253
|
specification_version: 4
|
254
|
-
summary: Loofah is a general library for manipulating and transforming HTML/XML documents
|
255
|
-
|
256
|
-
test_files:
|
257
|
-
- test/html5/test_sanitizer.rb
|
258
|
-
- test/unit/test_helpers.rb
|
259
|
-
- test/unit/test_scrubbers.rb
|
260
|
-
- test/unit/test_scrubber.rb
|
261
|
-
- test/unit/test_encoding.rb
|
262
|
-
- test/unit/test_api.rb
|
263
|
-
- test/integration/test_helpers.rb
|
264
|
-
- test/integration/test_xml.rb
|
265
|
-
- test/integration/test_ad_hoc.rb
|
266
|
-
- test/integration/test_scrubbers.rb
|
267
|
-
- test/integration/test_html.rb
|
254
|
+
summary: Loofah is a general library for manipulating and transforming HTML/XML documents and fragments
|
255
|
+
test_files: []
|