feedtools 0.2.26 → 0.2.27
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.
- data/CHANGELOG +232 -216
- data/db/migration.rb +2 -0
- data/db/schema.mysql.sql +2 -0
- data/db/schema.postgresql.sql +3 -1
- data/db/schema.sqlite.sql +3 -1
- data/lib/feed_tools.rb +37 -14
- data/lib/feed_tools/database_feed_cache.rb +13 -2
- data/lib/feed_tools/feed.rb +430 -104
- data/lib/feed_tools/feed_item.rb +533 -268
- data/lib/feed_tools/helpers/generic_helper.rb +1 -1
- data/lib/feed_tools/helpers/html_helper.rb +78 -116
- data/lib/feed_tools/helpers/retrieval_helper.rb +33 -3
- data/lib/feed_tools/helpers/uri_helper.rb +46 -54
- data/lib/feed_tools/monkey_patch.rb +27 -1
- data/lib/feed_tools/vendor/html5/History.txt +10 -0
- data/lib/feed_tools/vendor/html5/Manifest.txt +117 -0
- data/lib/feed_tools/vendor/html5/README +45 -0
- data/lib/feed_tools/vendor/html5/Rakefile.rb +33 -0
- data/lib/feed_tools/vendor/html5/bin/html5 +217 -0
- data/lib/feed_tools/vendor/html5/lib/core_ext/string.rb +17 -0
- data/lib/feed_tools/vendor/html5/lib/html5.rb +13 -0
- data/lib/feed_tools/vendor/html5/lib/html5/constants.rb +1046 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/base.rb +10 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/inject_meta_charset.rb +82 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/iso639codes.rb +752 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/optionaltags.rb +198 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/rfc2046.rb +30 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/rfc3987.rb +89 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/sanitizer.rb +15 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/validator.rb +830 -0
- data/lib/feed_tools/vendor/html5/lib/html5/filters/whitespace.rb +36 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser.rb +248 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/after_body_phase.rb +46 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/after_frameset_phase.rb +33 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/after_head_phase.rb +50 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/before_head_phase.rb +41 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_body_phase.rb +613 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_caption_phase.rb +69 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_cell_phase.rb +78 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_column_group_phase.rb +55 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_frameset_phase.rb +57 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_head_phase.rb +138 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_row_phase.rb +89 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_select_phase.rb +85 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_table_body_phase.rb +86 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/in_table_phase.rb +115 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/initial_phase.rb +133 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/phase.rb +154 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/root_element_phase.rb +41 -0
- data/lib/feed_tools/vendor/html5/lib/html5/html5parser/trailing_end_phase.rb +35 -0
- data/lib/feed_tools/vendor/html5/lib/html5/inputstream.rb +648 -0
- data/lib/feed_tools/vendor/html5/lib/html5/liberalxmlparser.rb +158 -0
- data/lib/feed_tools/vendor/html5/lib/html5/sanitizer.rb +188 -0
- data/lib/feed_tools/vendor/html5/lib/html5/serializer.rb +2 -0
- data/lib/feed_tools/vendor/html5/lib/html5/serializer/htmlserializer.rb +179 -0
- data/lib/feed_tools/vendor/html5/lib/html5/serializer/xhtmlserializer.rb +20 -0
- data/lib/feed_tools/vendor/html5/lib/html5/sniffer.rb +45 -0
- data/lib/feed_tools/vendor/html5/lib/html5/tokenizer.rb +966 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treebuilders.rb +24 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treebuilders/base.rb +334 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treebuilders/hpricot.rb +231 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treebuilders/rexml.rb +209 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treebuilders/simpletree.rb +185 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treewalkers.rb +26 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treewalkers/base.rb +162 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treewalkers/hpricot.rb +48 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treewalkers/rexml.rb +48 -0
- data/lib/feed_tools/vendor/html5/lib/html5/treewalkers/simpletree.rb +48 -0
- data/lib/feed_tools/vendor/html5/lib/html5/version.rb +3 -0
- data/lib/feed_tools/vendor/html5/testdata/encoding/chardet/test_big5.txt +51 -0
- data/lib/feed_tools/vendor/html5/testdata/encoding/test-yahoo-jp.dat +10 -0
- data/lib/feed_tools/vendor/html5/testdata/encoding/tests1.dat +394 -0
- data/lib/feed_tools/vendor/html5/testdata/encoding/tests2.dat +81 -0
- data/lib/feed_tools/vendor/html5/testdata/sanitizer/tests1.dat +416 -0
- data/lib/feed_tools/vendor/html5/testdata/serializer/core.test +104 -0
- data/lib/feed_tools/vendor/html5/testdata/serializer/injectmeta.test +65 -0
- data/lib/feed_tools/vendor/html5/testdata/serializer/optionaltags.test +900 -0
- data/lib/feed_tools/vendor/html5/testdata/serializer/options.test +60 -0
- data/lib/feed_tools/vendor/html5/testdata/serializer/whitespace.test +51 -0
- data/lib/feed_tools/vendor/html5/testdata/sites/google-results.htm +1 -0
- data/lib/feed_tools/vendor/html5/testdata/sites/python-ref-import.htm +1 -0
- data/lib/feed_tools/vendor/html5/testdata/sites/web-apps-old.htm +1 -0
- data/lib/feed_tools/vendor/html5/testdata/sites/web-apps.htm +34275 -0
- data/lib/feed_tools/vendor/html5/testdata/sniffer/htmlOrFeed.json +43 -0
- data/lib/feed_tools/vendor/html5/testdata/tokenizer/contentModelFlags.test +48 -0
- data/lib/feed_tools/vendor/html5/testdata/tokenizer/entities.test +2339 -0
- data/lib/feed_tools/vendor/html5/testdata/tokenizer/escapeFlag.test +21 -0
- data/lib/feed_tools/vendor/html5/testdata/tokenizer/test1.test +172 -0
- data/lib/feed_tools/vendor/html5/testdata/tokenizer/test2.test +129 -0
- data/lib/feed_tools/vendor/html5/testdata/tokenizer/test3.test +367 -0
- data/lib/feed_tools/vendor/html5/testdata/tokenizer/test4.test +198 -0
- data/lib/feed_tools/vendor/html5/testdata/tree-construction/tests1.dat +1950 -0
- data/lib/feed_tools/vendor/html5/testdata/tree-construction/tests2.dat +773 -0
- data/lib/feed_tools/vendor/html5/testdata/tree-construction/tests3.dat +270 -0
- data/lib/feed_tools/vendor/html5/testdata/tree-construction/tests4.dat +60 -0
- data/lib/feed_tools/vendor/html5/testdata/tree-construction/tests5.dat +175 -0
- data/lib/feed_tools/vendor/html5/testdata/tree-construction/tests6.dat +196 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/attributes.test +1035 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/base-href-attribute.test +787 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/base-target-attribute.test +35 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/blockquote-cite-attribute.test +7 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/classattribute.test +152 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/contenteditableattribute.test +59 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/contextmenuattribute.test +115 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/dirattribute.test +59 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/draggableattribute.test +63 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/html-xmlns-attribute.test +23 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/idattribute.test +115 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/inputattributes.test +2795 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/irrelevantattribute.test +63 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/langattribute.test +5579 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/li-value-attribute.test +7 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/link-href-attribute.test +7 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/link-hreflang-attribute.test +7 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/link-rel-attribute.test +271 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/ol-start-attribute.test +7 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/starttags.test +375 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/style-scoped-attribute.test +7 -0
- data/lib/feed_tools/vendor/html5/testdata/validator/tabindexattribute.test +79 -0
- data/lib/feed_tools/vendor/html5/tests/preamble.rb +72 -0
- data/lib/feed_tools/vendor/html5/tests/test_encoding.rb +35 -0
- data/lib/feed_tools/vendor/html5/tests/test_lxp.rb +279 -0
- data/lib/feed_tools/vendor/html5/tests/test_parser.rb +68 -0
- data/lib/feed_tools/vendor/html5/tests/test_sanitizer.rb +142 -0
- data/lib/feed_tools/vendor/html5/tests/test_serializer.rb +68 -0
- data/lib/feed_tools/vendor/html5/tests/test_sniffer.rb +27 -0
- data/lib/feed_tools/vendor/html5/tests/test_stream.rb +62 -0
- data/lib/feed_tools/vendor/html5/tests/test_tokenizer.rb +94 -0
- data/lib/feed_tools/vendor/html5/tests/test_treewalkers.rb +135 -0
- data/lib/feed_tools/vendor/html5/tests/test_validator.rb +31 -0
- data/lib/feed_tools/vendor/html5/tests/tokenizer_test_parser.rb +63 -0
- data/lib/feed_tools/vendor/uri.rb +781 -0
- data/lib/feed_tools/version.rb +1 -1
- data/rakefile +27 -6
- data/test/unit/atom_test.rb +298 -210
- data/test/unit/helper_test.rb +7 -12
- data/test/unit/rdf_test.rb +51 -1
- data/test/unit/rss_test.rb +13 -3
- metadata +239 -116
- data/lib/feed_tools/vendor/htree.rb +0 -97
- data/lib/feed_tools/vendor/htree/container.rb +0 -10
- data/lib/feed_tools/vendor/htree/context.rb +0 -67
- data/lib/feed_tools/vendor/htree/display.rb +0 -27
- data/lib/feed_tools/vendor/htree/doc.rb +0 -149
- data/lib/feed_tools/vendor/htree/elem.rb +0 -262
- data/lib/feed_tools/vendor/htree/encoder.rb +0 -163
- data/lib/feed_tools/vendor/htree/equality.rb +0 -218
- data/lib/feed_tools/vendor/htree/extract_text.rb +0 -37
- data/lib/feed_tools/vendor/htree/fstr.rb +0 -33
- data/lib/feed_tools/vendor/htree/gencode.rb +0 -97
- data/lib/feed_tools/vendor/htree/htmlinfo.rb +0 -672
- data/lib/feed_tools/vendor/htree/inspect.rb +0 -108
- data/lib/feed_tools/vendor/htree/leaf.rb +0 -94
- data/lib/feed_tools/vendor/htree/loc.rb +0 -367
- data/lib/feed_tools/vendor/htree/modules.rb +0 -48
- data/lib/feed_tools/vendor/htree/name.rb +0 -124
- data/lib/feed_tools/vendor/htree/output.rb +0 -207
- data/lib/feed_tools/vendor/htree/parse.rb +0 -409
- data/lib/feed_tools/vendor/htree/raw_string.rb +0 -124
- data/lib/feed_tools/vendor/htree/regexp-util.rb +0 -15
- data/lib/feed_tools/vendor/htree/rexml.rb +0 -130
- data/lib/feed_tools/vendor/htree/scan.rb +0 -166
- data/lib/feed_tools/vendor/htree/tag.rb +0 -111
- data/lib/feed_tools/vendor/htree/template.rb +0 -909
- data/lib/feed_tools/vendor/htree/text.rb +0 -115
- data/lib/feed_tools/vendor/htree/traverse.rb +0 -465
data/lib/feed_tools/version.rb
CHANGED
data/rakefile
CHANGED
|
@@ -14,8 +14,9 @@ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
|
|
14
14
|
|
|
15
15
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
|
16
16
|
|
|
17
|
-
RUBY_FORGE_PROJECT =
|
|
17
|
+
RUBY_FORGE_PROJECT = PKG_NAME
|
|
18
18
|
RUBY_FORGE_USER = "sporkmonger"
|
|
19
|
+
RUBY_FORGE_PATH = "/var/www/gforge-projects/#{RUBY_FORGE_PROJECT}"
|
|
19
20
|
|
|
20
21
|
PKG_FILES = FileList[
|
|
21
22
|
"lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "db/**/*",
|
|
@@ -123,7 +124,17 @@ spec = Gem::Specification.new do |s|
|
|
|
123
124
|
s.add_dependency('builder', '>= 1.2.4')
|
|
124
125
|
|
|
125
126
|
s.require_path = 'lib'
|
|
126
|
-
|
|
127
|
+
|
|
128
|
+
begin
|
|
129
|
+
s.post_install_message = <<-TEXT
|
|
130
|
+
|
|
131
|
+
FeedTool's caching schema has changed to allow Feed objects to be
|
|
132
|
+
serialized to the cache. This should offer some limited speed up
|
|
133
|
+
in some cases.
|
|
134
|
+
|
|
135
|
+
TEXT
|
|
136
|
+
rescue Exception
|
|
137
|
+
end
|
|
127
138
|
|
|
128
139
|
s.has_rdoc = true
|
|
129
140
|
s.extra_rdoc_files = %w( README )
|
|
@@ -180,7 +191,17 @@ end
|
|
|
180
191
|
|
|
181
192
|
# Publishing ------------------------------------------------------
|
|
182
193
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
194
|
+
namespace :publish do
|
|
195
|
+
desc "Publish the API documentation"
|
|
196
|
+
task :api => [ "rdoc" ] do
|
|
197
|
+
Rake::SshDirPublisher.new(
|
|
198
|
+
"#{RUBY_FORGE_USER}@rubyforge.org",
|
|
199
|
+
"#{RUBY_FORGE_PATH}/",
|
|
200
|
+
"doc"
|
|
201
|
+
).upload
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
desc "Runs all of the publishing tasks"
|
|
205
|
+
task :all => ["publish:api"] do
|
|
206
|
+
end
|
|
207
|
+
end
|
data/test/unit/atom_test.rb
CHANGED
|
@@ -126,6 +126,7 @@ class AtomTest < Test::Unit::TestCase
|
|
|
126
126
|
</feed>
|
|
127
127
|
FEED
|
|
128
128
|
) { |feed|
|
|
129
|
+
assert_equal(2, feed.links.size)
|
|
129
130
|
assert_equal("http://www.intertwingly.net/blog/index.atom", feed.href)
|
|
130
131
|
assert_equal("http://www.intertwingly.net/blog/", feed.link)
|
|
131
132
|
assert_equal("http://www.intertwingly.net/blog/", feed.author.href)
|
|
@@ -149,6 +150,7 @@ class AtomTest < Test::Unit::TestCase
|
|
|
149
150
|
</feed>
|
|
150
151
|
FEED
|
|
151
152
|
) { |feed|
|
|
153
|
+
assert_equal(2, feed.links.size)
|
|
152
154
|
assert_equal("http://www.intertwingly.net/blog/", feed.link)
|
|
153
155
|
assert_equal("http://www.intertwingly.net/blog/index.atom", feed.href)
|
|
154
156
|
assert_equal("http://www.intertwingly.net/blog/", feed.author.href)
|
|
@@ -177,218 +179,218 @@ class AtomTest < Test::Unit::TestCase
|
|
|
177
179
|
<?xml version="1.0" encoding="utf-8"?>
|
|
178
180
|
<feed xmlns="http://www.w3.org/2005/Atom"
|
|
179
181
|
xml:base="http://example.org/tests/">
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
182
|
+
<title>xml:base support tests</title>
|
|
183
|
+
<subtitle type="html">
|
|
184
|
+
All alternate links should point to
|
|
185
|
+
<code>http://example.org/tests/base/result.html</code>;
|
|
186
|
+
all links in content should point where their label says.
|
|
187
|
+
</subtitle>
|
|
188
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
189
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base</id>
|
|
190
|
+
<updated>2006-01-17T12:35:16+01:00</updated>
|
|
189
191
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
<entry>
|
|
193
|
+
<title>1: Alternate link: Absolute URL</title>
|
|
194
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
195
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test1</id>
|
|
196
|
+
<updated>2006-01-17T12:35:16+01:00</updated>
|
|
197
|
+
</entry>
|
|
196
198
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
199
|
+
<entry>
|
|
200
|
+
<title>2: Alternate link: Host-relative absolute URL</title>
|
|
201
|
+
<link href="/tests/base/result.html"/>
|
|
202
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test2</id>
|
|
203
|
+
<updated>2006-01-17T12:35:15+01:00</updated>
|
|
204
|
+
</entry>
|
|
203
205
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
<entry>
|
|
207
|
+
<title>3: Alternate link: Relative URL</title>
|
|
208
|
+
<link href="base/result.html"/>
|
|
209
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test3</id>
|
|
210
|
+
<updated>2006-01-17T12:35:14+01:00</updated>
|
|
211
|
+
</entry>
|
|
210
212
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
213
|
+
<entry>
|
|
214
|
+
<title>
|
|
215
|
+
4: Alternate link: Relative URL with parent directory component
|
|
216
|
+
</title>
|
|
217
|
+
<link href="../tests/base/result.html"/>
|
|
218
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test4</id>
|
|
219
|
+
<updated>2006-01-17T12:35:13+01:00</updated>
|
|
220
|
+
</entry>
|
|
219
221
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
222
|
+
<entry>
|
|
223
|
+
<title>5: Content: Absolute URL</title>
|
|
224
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
225
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test5</id>
|
|
226
|
+
<content type="html">
|
|
227
|
+
<a href="http://example.org/tests/base/result.html">
|
|
228
|
+
http://example.org/tests/base/result.html
|
|
229
|
+
</a>
|
|
230
|
+
</content>
|
|
231
|
+
<updated>2006-01-17T12:35:12+01:00</updated>
|
|
232
|
+
</entry>
|
|
231
233
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
234
|
+
<entry>
|
|
235
|
+
<title>6: Content: Host-relative URL</title>
|
|
236
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
237
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test6</id>
|
|
238
|
+
<content type="html">
|
|
239
|
+
<a href="/tests/base/result.html">
|
|
240
|
+
http://example.org/tests/base/result.html
|
|
241
|
+
</a>
|
|
242
|
+
</content>
|
|
243
|
+
<updated>2006-01-17T12:35:11+01:00</updated>
|
|
244
|
+
</entry>
|
|
243
245
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
246
|
+
<entry>
|
|
247
|
+
<title>7: Content: Relative URL</title>
|
|
248
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
249
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test7</id>
|
|
250
|
+
<content type="html">
|
|
251
|
+
<a href="base/result.html">
|
|
252
|
+
http://example.org/tests/base/result.html
|
|
253
|
+
</a>
|
|
254
|
+
</content>
|
|
255
|
+
<updated>2006-01-17T12:35:10+01:00</updated>
|
|
256
|
+
</entry>
|
|
255
257
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
258
|
+
<entry>
|
|
259
|
+
<title>
|
|
260
|
+
8: Content: Relative URL with parent directory component
|
|
261
|
+
</title>
|
|
262
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
263
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test8</id>
|
|
264
|
+
<content type="html">
|
|
265
|
+
<a href="../tests/base/result.html">
|
|
266
|
+
http://example.org/tests/base/result.html
|
|
267
|
+
</a>
|
|
268
|
+
</content>
|
|
269
|
+
<updated>2006-01-17T12:35:9+01:00</updated>
|
|
270
|
+
</entry>
|
|
269
271
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
272
|
+
<entry xml:base="http://example.org/tests/entrybase/">
|
|
273
|
+
<title type="html">
|
|
274
|
+
9: Content, <code>&lt;entry></code> has base:
|
|
275
|
+
Absolute URL
|
|
276
|
+
</title>
|
|
277
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
278
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test9</id>
|
|
279
|
+
<content type="html">
|
|
280
|
+
<a href="http://example.org/tests/entrybase/result.html">
|
|
281
|
+
http://example.org/tests/entrybase/result.html
|
|
282
|
+
</a>
|
|
283
|
+
</content>
|
|
284
|
+
<updated>2006-01-17T12:35:8+01:00</updated>
|
|
285
|
+
</entry>
|
|
284
286
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
287
|
+
<entry xml:base="http://example.org/tests/entrybase/">
|
|
288
|
+
<title type="html">
|
|
289
|
+
10: Content, <code>&lt;entry></code> has base:
|
|
290
|
+
Host-relative URL
|
|
291
|
+
</title>
|
|
292
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
293
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test10</id>
|
|
294
|
+
<content type="html">
|
|
295
|
+
<a href="/tests/entrybase/result.html">
|
|
296
|
+
http://example.org/tests/entrybase/result.html
|
|
297
|
+
</a>
|
|
298
|
+
</content>
|
|
299
|
+
<updated>2006-01-17T12:35:7+01:00</updated>
|
|
300
|
+
</entry>
|
|
299
301
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
302
|
+
<entry xml:base="http://example.org/tests/entrybase/">
|
|
303
|
+
<title type="html">
|
|
304
|
+
11: Content, <code>&lt;entry></code> has base:
|
|
305
|
+
Relative URL
|
|
306
|
+
</title>
|
|
307
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
308
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test11</id>
|
|
309
|
+
<content type="html">
|
|
310
|
+
<a href="result.html">
|
|
311
|
+
http://example.org/tests/entrybase/result.html
|
|
312
|
+
</a>
|
|
313
|
+
</content>
|
|
314
|
+
<updated>2006-01-17T12:35:6+01:00</updated>
|
|
315
|
+
</entry>
|
|
314
316
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
317
|
+
<entry xml:base="http://example.org/tests/entrybase/">
|
|
318
|
+
<title type="html">
|
|
319
|
+
12: Content, <code>&lt;entry></code> has base:
|
|
320
|
+
Relative URL with parent directory component</title>
|
|
321
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
322
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test12</id>
|
|
323
|
+
<content type="html">
|
|
324
|
+
<a href="../entrybase/result.html">
|
|
325
|
+
http://example.org/tests/entrybase/result.html
|
|
326
|
+
</a>
|
|
327
|
+
</content>
|
|
328
|
+
<updated>2006-01-17T12:35:5+01:00</updated>
|
|
329
|
+
</entry>
|
|
328
330
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
331
|
+
<entry>
|
|
332
|
+
<title type="html">
|
|
333
|
+
13: Content, <code>&lt;content></code> has base:
|
|
334
|
+
Absolute URL
|
|
335
|
+
</title>
|
|
336
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
337
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test13</id>
|
|
338
|
+
<content type="html"
|
|
339
|
+
xml:base="http://example.org/tests/contentbase/">
|
|
340
|
+
<a href="http://example.org/tests/contentbase/result.html">
|
|
341
|
+
http://example.org/tests/contentbase/result.html
|
|
342
|
+
</a>
|
|
343
|
+
</content>
|
|
344
|
+
<updated>2006-01-17T12:35:4+01:00</updated>
|
|
345
|
+
</entry>
|
|
344
346
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
347
|
+
<entry>
|
|
348
|
+
<title type="html">
|
|
349
|
+
14: Content, <code>&lt;content></code> has base:
|
|
350
|
+
Host-relative URL
|
|
351
|
+
</title>
|
|
352
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
353
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test14</id>
|
|
354
|
+
<content type="html"
|
|
355
|
+
xml:base="http://example.org/tests/contentbase/">
|
|
356
|
+
<a href="/tests/contentbase/result.html">
|
|
357
|
+
http://example.org/tests/contentbase/result.html
|
|
358
|
+
</a>
|
|
359
|
+
</content>
|
|
360
|
+
<updated>2006-01-17T12:35:3+01:00</updated>
|
|
361
|
+
</entry>
|
|
360
362
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
363
|
+
<entry>
|
|
364
|
+
<title type="html">
|
|
365
|
+
15: Content, <code>&lt;content></code> has base:
|
|
366
|
+
Relative URL
|
|
367
|
+
</title>
|
|
368
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
369
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test15</id>
|
|
370
|
+
<content type="html"
|
|
371
|
+
xml:base="http://example.org/tests/contentbase/">
|
|
372
|
+
<a href="result.html">
|
|
373
|
+
http://example.org/tests/contentbase/result.html
|
|
374
|
+
</a>
|
|
375
|
+
</content>
|
|
376
|
+
<updated>2006-01-17T12:35:2+01:00</updated>
|
|
377
|
+
</entry>
|
|
376
378
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
379
|
+
<entry>
|
|
380
|
+
<title type="html">
|
|
381
|
+
16: Content, <code>&lt;content></code> has base:
|
|
382
|
+
Relative URL with parent directory component
|
|
383
|
+
</title>
|
|
384
|
+
<link href="http://example.org/tests/base/result.html"/>
|
|
385
|
+
<id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test16</id>
|
|
386
|
+
<content type="html"
|
|
387
|
+
xml:base="http://example.org/tests/contentbase/">
|
|
388
|
+
<a href="../contentbase/result.html">
|
|
389
|
+
http://example.org/tests/contentbase/result.html
|
|
390
|
+
</a>
|
|
391
|
+
</content>
|
|
392
|
+
<updated>2006-01-17T12:35:1+01:00</updated>
|
|
393
|
+
</entry>
|
|
392
394
|
|
|
393
395
|
</feed>
|
|
394
396
|
FEED
|
|
@@ -398,29 +400,41 @@ class AtomTest < Test::Unit::TestCase
|
|
|
398
400
|
"Broken link for: " + entry.title)
|
|
399
401
|
end
|
|
400
402
|
assert_equal(2, feed.entries[4].content.scan(
|
|
401
|
-
'http://example.org/tests/base/result.html').size
|
|
403
|
+
'http://example.org/tests/base/result.html').size,
|
|
404
|
+
"Invalid URI resolution:\n#{feed.entries[4].content}")
|
|
402
405
|
assert_equal(2, feed.entries[5].content.scan(
|
|
403
|
-
'http://example.org/tests/base/result.html').size
|
|
406
|
+
'http://example.org/tests/base/result.html').size,
|
|
407
|
+
"Invalid URI resolution:\n#{feed.entries[5].content}")
|
|
404
408
|
assert_equal(2, feed.entries[6].content.scan(
|
|
405
|
-
'http://example.org/tests/base/result.html').size
|
|
409
|
+
'http://example.org/tests/base/result.html').size,
|
|
410
|
+
"Invalid URI resolution:\n#{feed.entries[6].content}")
|
|
406
411
|
assert_equal(2, feed.entries[7].content.scan(
|
|
407
|
-
'http://example.org/tests/base/result.html').size
|
|
412
|
+
'http://example.org/tests/base/result.html').size,
|
|
413
|
+
"Invalid URI resolution:\n#{feed.entries[7].content}")
|
|
408
414
|
assert_equal(2, feed.entries[8].content.scan(
|
|
409
|
-
'http://example.org/tests/entrybase/result.html').size
|
|
415
|
+
'http://example.org/tests/entrybase/result.html').size,
|
|
416
|
+
"Invalid URI resolution:\n#{feed.entries[8].content}")
|
|
410
417
|
assert_equal(2, feed.entries[9].content.scan(
|
|
411
|
-
'http://example.org/tests/entrybase/result.html').size
|
|
418
|
+
'http://example.org/tests/entrybase/result.html').size,
|
|
419
|
+
"Invalid URI resolution:\n#{feed.entries[9].content}")
|
|
412
420
|
assert_equal(2, feed.entries[10].content.scan(
|
|
413
|
-
'http://example.org/tests/entrybase/result.html').size
|
|
421
|
+
'http://example.org/tests/entrybase/result.html').size,
|
|
422
|
+
"Invalid URI resolution:\n#{feed.entries[10].content}")
|
|
414
423
|
assert_equal(2, feed.entries[11].content.scan(
|
|
415
|
-
'http://example.org/tests/entrybase/result.html').size
|
|
424
|
+
'http://example.org/tests/entrybase/result.html').size,
|
|
425
|
+
"Invalid URI resolution:\n#{feed.entries[11].content}")
|
|
416
426
|
assert_equal(2, feed.entries[12].content.scan(
|
|
417
|
-
'http://example.org/tests/contentbase/result.html').size
|
|
427
|
+
'http://example.org/tests/contentbase/result.html').size,
|
|
428
|
+
"Invalid URI resolution:\n#{feed.entries[12].content}")
|
|
418
429
|
assert_equal(2, feed.entries[13].content.scan(
|
|
419
|
-
'http://example.org/tests/contentbase/result.html').size
|
|
430
|
+
'http://example.org/tests/contentbase/result.html').size,
|
|
431
|
+
"Invalid URI resolution:\n#{feed.entries[13].content}")
|
|
420
432
|
assert_equal(2, feed.entries[14].content.scan(
|
|
421
|
-
'http://example.org/tests/contentbase/result.html').size
|
|
433
|
+
'http://example.org/tests/contentbase/result.html').size,
|
|
434
|
+
"Invalid URI resolution:\n#{feed.entries[14].content}")
|
|
422
435
|
assert_equal(2, feed.entries[15].content.scan(
|
|
423
|
-
'http://example.org/tests/contentbase/result.html').size
|
|
436
|
+
'http://example.org/tests/contentbase/result.html').size,
|
|
437
|
+
"Invalid URI resolution:\n#{feed.entries[15].content}")
|
|
424
438
|
}
|
|
425
439
|
end
|
|
426
440
|
|
|
@@ -436,6 +450,56 @@ class AtomTest < Test::Unit::TestCase
|
|
|
436
450
|
feed.copyright)
|
|
437
451
|
}
|
|
438
452
|
end
|
|
453
|
+
|
|
454
|
+
def test_feed_license
|
|
455
|
+
with_feed(:from_data => <<-FEED
|
|
456
|
+
<feed xmlns="http://www.w3.org/2005/Atom">
|
|
457
|
+
<id>http://www.example.com/myfeed</id>
|
|
458
|
+
<title>My Example Feed</title>
|
|
459
|
+
<updated>2005-07-28T12:00:00Z</updated>
|
|
460
|
+
<link href="http://www.example.com/myfeed" />
|
|
461
|
+
<link rel="license" type="application/rdf+xml"
|
|
462
|
+
href="http://creativecommons.org/licenses/by-nc/2.5/rdf" />
|
|
463
|
+
<rights>
|
|
464
|
+
Copyright (c) 2005. Some rights reserved. This feed
|
|
465
|
+
is licensed under a Creative Commons Attribute-NonCommercial
|
|
466
|
+
Use License. It contains material originally published by
|
|
467
|
+
Jane Smith at http://www.example.com/entries/1 under the
|
|
468
|
+
Creative Commons Attribute License.
|
|
469
|
+
</rights>
|
|
470
|
+
<author><name>James</name></author>
|
|
471
|
+
<entry>
|
|
472
|
+
<id>tag:entries.org,2005:1</id>
|
|
473
|
+
<title>Atom Powered Robots Run Amok</title>
|
|
474
|
+
<updated>2005-06-28T12:00:00Z</updated>
|
|
475
|
+
<link href="http://www.example.org/entries/1" />
|
|
476
|
+
<summary>Atom Powered Robots Run Amok</summary>
|
|
477
|
+
<author><name>Jane Smith</name></author>
|
|
478
|
+
<link rel="license" type="text/html"
|
|
479
|
+
href="http://creativecommons.org/licenses/by/2.5/" />
|
|
480
|
+
</entry>
|
|
481
|
+
</feed>
|
|
482
|
+
FEED
|
|
483
|
+
) { |feed|
|
|
484
|
+
assert_equal(1, feed.entries.size)
|
|
485
|
+
assert_equal(
|
|
486
|
+
"http://creativecommons.org/licenses/by-nc/2.5/rdf",
|
|
487
|
+
feed.license.href
|
|
488
|
+
)
|
|
489
|
+
assert_equal(
|
|
490
|
+
"application/rdf+xml",
|
|
491
|
+
feed.license.type
|
|
492
|
+
)
|
|
493
|
+
assert_equal(
|
|
494
|
+
"http://creativecommons.org/licenses/by/2.5/",
|
|
495
|
+
feed.entries[0].license.href
|
|
496
|
+
)
|
|
497
|
+
assert_equal(
|
|
498
|
+
"text/html",
|
|
499
|
+
feed.entries[0].license.type
|
|
500
|
+
)
|
|
501
|
+
}
|
|
502
|
+
end
|
|
439
503
|
|
|
440
504
|
def test_feed_item_author
|
|
441
505
|
with_feed(:from_data => <<-FEED
|
|
@@ -635,11 +699,11 @@ class AtomTest < Test::Unit::TestCase
|
|
|
635
699
|
FEED
|
|
636
700
|
) { |feed|
|
|
637
701
|
assert_equal(
|
|
638
|
-
'
|
|
702
|
+
'<title>',
|
|
639
703
|
feed.title, "XHTML NCR failed")
|
|
640
704
|
assert_equal(1, feed.items.size)
|
|
641
705
|
assert_equal(
|
|
642
|
-
'
|
|
706
|
+
'<title>',
|
|
643
707
|
feed.items[0].title, "XHTML NCR failed")
|
|
644
708
|
}
|
|
645
709
|
with_feed(:from_data => <<-FEED
|
|
@@ -665,4 +729,28 @@ class AtomTest < Test::Unit::TestCase
|
|
|
665
729
|
feed.items[0].title, "XHTML NCR failed")
|
|
666
730
|
}
|
|
667
731
|
end
|
|
732
|
+
|
|
733
|
+
def test_feed_item_content_sanitization
|
|
734
|
+
with_feed(:from_data => <<-FEED
|
|
735
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
736
|
+
<feed version="1.0" xmlns="http://www.w3.org/2005/Atom">
|
|
737
|
+
<entry>
|
|
738
|
+
<content type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
|
739
|
+
<xhtml:div>
|
|
740
|
+
<xhtml:script>alert('Content Attack Succeeded');</xhtml:script>
|
|
741
|
+
</xhtml:div>
|
|
742
|
+
</content>
|
|
743
|
+
</entry>
|
|
744
|
+
</feed>
|
|
745
|
+
FEED
|
|
746
|
+
) { |feed|
|
|
747
|
+
assert_equal(1, feed.items.size)
|
|
748
|
+
assert_equal(0,
|
|
749
|
+
feed.items[0].content.scan("<xhtml:script>").size,
|
|
750
|
+
"Sanitization of content element failed")
|
|
751
|
+
assert_equal(0,
|
|
752
|
+
feed.items[0].content.scan("<script>").size,
|
|
753
|
+
"Sanitization of content element failed")
|
|
754
|
+
}
|
|
755
|
+
end
|
|
668
756
|
end
|