feedtools 0.2.23 → 0.2.24

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.
@@ -169,7 +169,10 @@ module FeedTools
169
169
  begin
170
170
  base_uri = URI.parse(
171
171
  FeedTools::XmlHelper.select_not_blank(base_uri_sources))
172
- resolved_uri = base_uri + relative_uri.to_s
172
+ resolved_uri = base_uri
173
+ if relative_uri.to_s != ''
174
+ resolved_uri = base_uri + relative_uri.to_s
175
+ end
173
176
  return FeedTools::UriHelper.normalize_url(resolved_uri.to_s)
174
177
  rescue
175
178
  return relative_uri
@@ -105,7 +105,9 @@ module HTree # :nodoc:
105
105
  end
106
106
  }
107
107
  if matched_elem
108
- until matched_elem.equal? stack.last
108
+ # This line breaks in Rails 1.1.
109
+ #until matched_elem.equal? stack.last
110
+ until matched_elem.object_id == stack.last.object_id
109
111
  stagname, stag_raw_string, children = stack.pop
110
112
  stack.last[2] << [:elem, stag_raw_string, children]
111
113
  end
@@ -0,0 +1,9 @@
1
+ module FeedTools
2
+ module FEED_TOOLS_VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 2
5
+ TINY = 24
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
data/rakefile CHANGED
@@ -6,14 +6,16 @@ require 'rake/packagetask'
6
6
  require 'rake/gempackagetask'
7
7
  require 'rake/contrib/rubyforgepublisher'
8
8
 
9
+ require File.join(File.dirname(__FILE__), 'lib/feed_tools', 'version')
10
+
9
11
  PKG_NAME = 'feedtools'
10
- PKG_VERSION = '0.2.23'
12
+ PKG_VERSION = FeedTools::FEED_TOOLS_VERSION::STRING
11
13
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
12
14
 
13
15
  RELEASE_NAME = "REL #{PKG_VERSION}"
14
16
 
15
17
  RUBY_FORGE_PROJECT = "feedtools"
16
- RUBY_FORGE_USER = "vacindak"
18
+ RUBY_FORGE_USER = "sporkmonger"
17
19
 
18
20
  PKG_FILES = FileList[
19
21
  "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "db/**/*",
@@ -117,7 +119,7 @@ spec = Gem::Specification.new do |s|
117
119
  end
118
120
 
119
121
  s.add_dependency('activerecord', '>= 1.10.1')
120
- s.add_dependency('uuidtools', '>= 0.1.2')
122
+ s.add_dependency('uuidtools', '>= 1.0.0')
121
123
  s.add_dependency('builder', '>= 1.2.4')
122
124
 
123
125
  s.require_path = 'lib'
@@ -142,7 +144,7 @@ end
142
144
  task :profile do
143
145
  $:.unshift(File.dirname(__FILE__) + '/lib')
144
146
  require 'feed_tools'
145
- puts "Profiling FeedTools #{FEED_TOOLS_VERSION}..."
147
+ puts "Profiling FeedTools #{FeedTools::FEED_TOOLS_VERSION::STRING}..."
146
148
  command = 'ruby -rprofile -e \'' +
147
149
  '$:.unshift(File.dirname(__FILE__) + "/lib");' +
148
150
  'require "feed_tools";' +
@@ -127,6 +127,255 @@ class AtomTest < Test::Unit::TestCase
127
127
  ) { |feed|
128
128
  assert_equal("http://example.com/3.html", feed.entries[0].link)
129
129
  }
130
+ with_feed(:from_data => <<-FEED
131
+ <?xml version="1.0" encoding="utf-8"?>
132
+ <feed xmlns="http://www.w3.org/2005/Atom"
133
+ xml:base="http://example.org/tests/">
134
+ <title>xml:base support tests</title>
135
+ <subtitle type="html">
136
+ All alternate links should point to
137
+ &lt;code>http://example.org/tests/base/result.html&lt;/code>;
138
+ all links in content should point where their label says.
139
+ </subtitle>
140
+ <link href="http://example.org/tests/base/result.html"/>
141
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base</id>
142
+ <updated>2006-01-17T12:35:16+01:00</updated>
143
+
144
+ <entry>
145
+ <title>1: Alternate link: Absolute URL</title>
146
+ <link href="http://example.org/tests/base/result.html"/>
147
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test1</id>
148
+ <updated>2006-01-17T12:35:16+01:00</updated>
149
+ </entry>
150
+
151
+ <entry>
152
+ <title>2: Alternate link: Host-relative absolute URL</title>
153
+ <link href="/tests/base/result.html"/>
154
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test2</id>
155
+ <updated>2006-01-17T12:35:15+01:00</updated>
156
+ </entry>
157
+
158
+ <entry>
159
+ <title>3: Alternate link: Relative URL</title>
160
+ <link href="base/result.html"/>
161
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test3</id>
162
+ <updated>2006-01-17T12:35:14+01:00</updated>
163
+ </entry>
164
+
165
+ <entry>
166
+ <title>
167
+ 4: Alternate link: Relative URL with parent directory component
168
+ </title>
169
+ <link href="../tests/base/result.html"/>
170
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test4</id>
171
+ <updated>2006-01-17T12:35:13+01:00</updated>
172
+ </entry>
173
+
174
+ <entry>
175
+ <title>5: Content: Absolute URL</title>
176
+ <link href="http://example.org/tests/base/result.html"/>
177
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test5</id>
178
+ <content type="html">
179
+ &lt;a href="http://example.org/tests/base/result.html"&gt;
180
+ http://example.org/tests/base/result.html
181
+ &lt;/a&gt;
182
+ </content>
183
+ <updated>2006-01-17T12:35:12+01:00</updated>
184
+ </entry>
185
+
186
+ <entry>
187
+ <title>6: Content: Host-relative URL</title>
188
+ <link href="http://example.org/tests/base/result.html"/>
189
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test6</id>
190
+ <content type="html">
191
+ &lt;a href="/tests/base/result.html"&gt;
192
+ http://example.org/tests/base/result.html
193
+ &lt;/a&gt;
194
+ </content>
195
+ <updated>2006-01-17T12:35:11+01:00</updated>
196
+ </entry>
197
+
198
+ <entry>
199
+ <title>7: Content: Relative URL</title>
200
+ <link href="http://example.org/tests/base/result.html"/>
201
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test7</id>
202
+ <content type="html">
203
+ &lt;a href="base/result.html"&gt;
204
+ http://example.org/tests/base/result.html
205
+ &lt;/a&gt;
206
+ </content>
207
+ <updated>2006-01-17T12:35:10+01:00</updated>
208
+ </entry>
209
+
210
+ <entry>
211
+ <title>
212
+ 8: Content: Relative URL with parent directory component
213
+ </title>
214
+ <link href="http://example.org/tests/base/result.html"/>
215
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test8</id>
216
+ <content type="html">
217
+ &lt;a href="../tests/base/result.html"&gt;
218
+ http://example.org/tests/base/result.html
219
+ &lt;/a&gt;
220
+ </content>
221
+ <updated>2006-01-17T12:35:9+01:00</updated>
222
+ </entry>
223
+
224
+ <entry xml:base="http://example.org/tests/entrybase/">
225
+ <title type="html">
226
+ 9: Content, &lt;code>&amp;lt;entry>&lt;/code> has base:
227
+ Absolute URL
228
+ </title>
229
+ <link href="http://example.org/tests/base/result.html"/>
230
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test9</id>
231
+ <content type="html">
232
+ &lt;a href="http://example.org/tests/entrybase/result.html"&gt;
233
+ http://example.org/tests/entrybase/result.html
234
+ &lt;/a&gt;
235
+ </content>
236
+ <updated>2006-01-17T12:35:8+01:00</updated>
237
+ </entry>
238
+
239
+ <entry xml:base="http://example.org/tests/entrybase/">
240
+ <title type="html">
241
+ 10: Content, &lt;code>&amp;lt;entry>&lt;/code> has base:
242
+ Host-relative URL
243
+ </title>
244
+ <link href="http://example.org/tests/base/result.html"/>
245
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test10</id>
246
+ <content type="html">
247
+ &lt;a href="/tests/entrybase/result.html"&gt;
248
+ http://example.org/tests/entrybase/result.html
249
+ &lt;/a&gt;
250
+ </content>
251
+ <updated>2006-01-17T12:35:7+01:00</updated>
252
+ </entry>
253
+
254
+ <entry xml:base="http://example.org/tests/entrybase/">
255
+ <title type="html">
256
+ 11: Content, &lt;code>&amp;lt;entry>&lt;/code> has base:
257
+ Relative URL
258
+ </title>
259
+ <link href="http://example.org/tests/base/result.html"/>
260
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test11</id>
261
+ <content type="html">
262
+ &lt;a href="result.html"&gt;
263
+ http://example.org/tests/entrybase/result.html
264
+ &lt;/a&gt;
265
+ </content>
266
+ <updated>2006-01-17T12:35:6+01:00</updated>
267
+ </entry>
268
+
269
+ <entry xml:base="http://example.org/tests/entrybase/">
270
+ <title type="html">
271
+ 12: Content, &lt;code>&amp;lt;entry>&lt;/code> has base:
272
+ Relative URL with parent directory component</title>
273
+ <link href="http://example.org/tests/base/result.html"/>
274
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test12</id>
275
+ <content type="html">
276
+ &lt;a href="../entrybase/result.html"&gt;
277
+ http://example.org/tests/entrybase/result.html
278
+ &lt;/a&gt;
279
+ </content>
280
+ <updated>2006-01-17T12:35:5+01:00</updated>
281
+ </entry>
282
+
283
+ <entry>
284
+ <title type="html">
285
+ 13: Content, &lt;code>&amp;lt;content>&lt;/code> has base:
286
+ Absolute URL
287
+ </title>
288
+ <link href="http://example.org/tests/base/result.html"/>
289
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test13</id>
290
+ <content type="html"
291
+ xml:base="http://example.org/tests/contentbase/">
292
+ &lt;a href="http://example.org/tests/contentbase/result.html"&gt;
293
+ http://example.org/tests/contentbase/result.html
294
+ &lt;/a&gt;
295
+ </content>
296
+ <updated>2006-01-17T12:35:4+01:00</updated>
297
+ </entry>
298
+
299
+ <entry>
300
+ <title type="html">
301
+ 14: Content, &lt;code>&amp;lt;content>&lt;/code> has base:
302
+ Host-relative URL
303
+ </title>
304
+ <link href="http://example.org/tests/base/result.html"/>
305
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test14</id>
306
+ <content type="html"
307
+ xml:base="http://example.org/tests/contentbase/">
308
+ &lt;a href="/tests/contentbase/result.html"&gt;
309
+ http://example.org/tests/contentbase/result.html
310
+ &lt;/a&gt;
311
+ </content>
312
+ <updated>2006-01-17T12:35:3+01:00</updated>
313
+ </entry>
314
+
315
+ <entry>
316
+ <title type="html">
317
+ 15: Content, &lt;code>&amp;lt;content>&lt;/code> has base:
318
+ Relative URL
319
+ </title>
320
+ <link href="http://example.org/tests/base/result.html"/>
321
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test15</id>
322
+ <content type="html"
323
+ xml:base="http://example.org/tests/contentbase/">
324
+ &lt;a href="result.html"&gt;
325
+ http://example.org/tests/contentbase/result.html
326
+ &lt;/a&gt;
327
+ </content>
328
+ <updated>2006-01-17T12:35:2+01:00</updated>
329
+ </entry>
330
+
331
+ <entry>
332
+ <title type="html">
333
+ 16: Content, &lt;code>&amp;lt;content>&lt;/code> has base:
334
+ Relative URL with parent directory component
335
+ </title>
336
+ <link href="http://example.org/tests/base/result.html"/>
337
+ <id>tag:plasmasturm.org,2005:Atom-Tests:xml-base:Test16</id>
338
+ <content type="html"
339
+ xml:base="http://example.org/tests/contentbase/">
340
+ &lt;a href="../contentbase/result.html"&gt;
341
+ http://example.org/tests/contentbase/result.html
342
+ &lt;/a&gt;
343
+ </content>
344
+ <updated>2006-01-17T12:35:1+01:00</updated>
345
+ </entry>
346
+
347
+ </feed>
348
+ FEED
349
+ ) { |feed|
350
+ for entry in feed.entries
351
+ assert_equal("http://example.org/tests/base/result.html", entry.link,
352
+ "Broken link for: " + entry.title)
353
+ end
354
+ assert_equal(2, feed.entries[4].content.scan(
355
+ 'http://example.org/tests/base/result.html').size)
356
+ assert_equal(2, feed.entries[5].content.scan(
357
+ 'http://example.org/tests/base/result.html').size)
358
+ assert_equal(2, feed.entries[6].content.scan(
359
+ 'http://example.org/tests/base/result.html').size)
360
+ assert_equal(2, feed.entries[7].content.scan(
361
+ 'http://example.org/tests/base/result.html').size)
362
+ assert_equal(2, feed.entries[8].content.scan(
363
+ 'http://example.org/tests/entrybase/result.html').size)
364
+ assert_equal(2, feed.entries[9].content.scan(
365
+ 'http://example.org/tests/entrybase/result.html').size)
366
+ assert_equal(2, feed.entries[10].content.scan(
367
+ 'http://example.org/tests/entrybase/result.html').size)
368
+ assert_equal(2, feed.entries[11].content.scan(
369
+ 'http://example.org/tests/entrybase/result.html').size)
370
+ assert_equal(2, feed.entries[12].content.scan(
371
+ 'http://example.org/tests/contentbase/result.html').size)
372
+ assert_equal(2, feed.entries[13].content.scan(
373
+ 'http://example.org/tests/contentbase/result.html').size)
374
+ assert_equal(2, feed.entries[14].content.scan(
375
+ 'http://example.org/tests/contentbase/result.html').size)
376
+ assert_equal(2, feed.entries[15].content.scan(
377
+ 'http://example.org/tests/contentbase/result.html').size)
378
+ }
130
379
  end
131
380
 
132
381
  def test_feed_copyright
@@ -233,10 +482,10 @@ class AtomTest < Test::Unit::TestCase
233
482
  </feed>
234
483
  FEED
235
484
  ) { |feed|
236
- assert_equal("&lt;title>",
485
+ assert_equal("&lt;title&gt;",
237
486
  feed.title, "HTML entity failed")
238
487
  assert_equal(1, feed.items.size)
239
- assert_equal("&lt;title>",
488
+ assert_equal("&lt;title&gt;",
240
489
  feed.items[0].title, "HTML entity failed")
241
490
  }
242
491
  with_feed(:from_data => <<-FEED
@@ -249,10 +498,10 @@ class AtomTest < Test::Unit::TestCase
249
498
  </feed>
250
499
  FEED
251
500
  ) { |feed|
252
- assert_equal("&lt;title>",
501
+ assert_equal("&lt;title&gt;",
253
502
  feed.title, "HTML NCR failed")
254
503
  assert_equal(1, feed.items.size)
255
- assert_equal("&lt;title>",
504
+ assert_equal("&lt;title&gt;",
256
505
  feed.items[0].title, "HTML NCR failed")
257
506
  }
258
507
  with_feed(:from_data => <<-FEED
@@ -40,31 +40,36 @@ class CacheTest < Test::Unit::TestCase
40
40
 
41
41
  def test_redirects_when_cache_enabled
42
42
  # Ensure the cache is on for this test
43
- FeedTools.configurations[:feed_cache] = "FeedTools::DatabaseFeedCache"
43
+ FeedTools.configurations[:feed_cache] = "FeedTools::DatabaseFeedCache"
44
44
  begin
45
- slashdot_feed = FeedTools::Feed.open('http://www.slashdot.org/index.rss')
45
+ slashdot_feed = FeedTools::Feed.open(
46
+ 'http://www.slashdot.org/index.rss')
46
47
  assert(slashdot_feed.feed_data != nil, "No content retrieved.")
48
+ assert(slashdot_feed.configurations[:feed_cache] != nil)
49
+ assert_equal(false, slashdot_feed.href.blank?)
50
+ slashdot_feed.expire!
47
51
  slashdot_feed.expire!
48
52
  assert_equal(true, slashdot_feed.expired?)
49
- assert_equal(false, slashdot_feed.url.blank?)
50
- slashdot_feed = FeedTools::Feed.open('http://www.slashdot.org/index.rss')
53
+ assert_equal(false, slashdot_feed.href.blank?)
54
+ slashdot_feed = FeedTools::Feed.open(
55
+ 'http://www.slashdot.org/index.rss')
51
56
  assert(slashdot_feed.feed_data != nil, "No content retrieved.")
57
+ assert(slashdot_feed.configurations[:feed_cache] != nil)
52
58
  assert_equal(true, slashdot_feed.live?)
53
- assert_equal(false, slashdot_feed.url.blank?)
54
- slashdot_feed = FeedTools::Feed.open('http://www.slashdot.org/index.rss')
59
+ assert_equal(false, slashdot_feed.href.blank?)
60
+ slashdot_feed = FeedTools::Feed.open(
61
+ 'http://www.slashdot.org/index.rss')
55
62
  assert(slashdot_feed.feed_data != nil, "No content retrieved.")
56
- assert_equal(false, slashdot_feed.live?)
57
- assert_equal(false, slashdot_feed.url.blank?)
58
- slashdot_feed.expire!
59
- slashdot_feed.expire!
60
- assert_equal(false, slashdot_feed.url.blank?)
61
- slashdot_feed = FeedTools::Feed.open('http://www.slashdot.org/index.rss')
62
- assert(slashdot_feed.feed_data != nil, "No content retrieved.")
63
- assert_equal(true, slashdot_feed.live?)
64
- assert_equal(false, slashdot_feed.url.blank?)
65
- FeedTools::Feed.open(slashdot_feed.url)
63
+ assert(slashdot_feed.configurations[:feed_cache] != nil)
64
+ assert_equal(false, slashdot_feed.live?)
65
+ assert_equal(false, slashdot_feed.href.blank?)
66
+
67
+ # Make sure autodiscovery doesn't break the cache.
68
+ assert_equal(slashdot_feed.href,
69
+ FeedTools::Feed.open('http://www.slashdot.org').href)
66
70
 
67
- entries = FeedTools::DatabaseFeedCache.find_all_by_href(slashdot_feed.url)
71
+ entries =
72
+ FeedTools::DatabaseFeedCache.find_all_by_href(slashdot_feed.url)
68
73
  assert_equal(1, entries.size)
69
74
  rescue FeedTools::FeedAccessError
70
75
  end
@@ -213,7 +213,7 @@ class HelperTest < Test::Unit::TestCase
213
213
  "XHTML divs were not normalized properly.")
214
214
  assert((xhtml =~ /hsivonen\.iki\.fi/),
215
215
  "FooML namespace was not preserved.")
216
- assert((xhtml =~ /<ul xmlns=/),
216
+ assert((xhtml =~ /<foo:ul xmlns:foo=/),
217
217
  "Namespace was not placed correctly.")
218
218
 
219
219
  FeedTools.configurations[:tidy_enabled] = true
@@ -236,7 +236,7 @@ class HelperTest < Test::Unit::TestCase
236
236
  "XHTML divs were not normalized properly.")
237
237
  assert((xhtml =~ /hsivonen\.iki\.fi/),
238
238
  "FooML namespace was not preserved.")
239
- assert((xhtml =~ /<ul xmlns=/),
239
+ assert((xhtml =~ /<foo:ul xmlns:foo=/),
240
240
  "Namespace was not placed correctly.")
241
241
  end
242
242
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: feedtools
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.23
7
- date: 2006-03-03 00:00:00 -05:00
6
+ version: 0.2.24
7
+ date: 2006-04-13 00:00:00 -07:00
8
8
  summary: "Parsing, generation, and caching system for xml news feeds."
9
9
  require_paths:
10
10
  - lib
@@ -41,6 +41,7 @@ files:
41
41
  - lib/feed_tools/feed_structures.rb
42
42
  - lib/feed_tools/helpers
43
43
  - lib/feed_tools/vendor
44
+ - lib/feed_tools/version.rb
44
45
  - lib/feed_tools/helpers/debug_helper.rb
45
46
  - lib/feed_tools/helpers/feed_helper.rb
46
47
  - lib/feed_tools/helpers/feed_item_helper.rb
@@ -2891,7 +2892,7 @@ dependencies:
2891
2892
  -
2892
2893
  - ">="
2893
2894
  - !ruby/object:Gem::Version
2894
- version: 0.1.2
2895
+ version: 1.0.0
2895
2896
  version:
2896
2897
  - !ruby/object:Gem::Dependency
2897
2898
  name: builder