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.
- data/CHANGELOG +13 -0
- data/db/schema.mysql.sql +1 -1
- data/db/schema.postgresql.sql +1 -1
- data/db/schema.sqlite.sql +1 -1
- data/lib/feed_tools.rb +24 -12
- data/lib/feed_tools/database_feed_cache.rb +8 -5
- data/lib/feed_tools/feed.rb +122 -240
- data/lib/feed_tools/feed_item.rb +31 -13
- data/lib/feed_tools/feed_structures.rb +5 -2
- data/lib/feed_tools/helpers/debug_helper.rb +1 -2
- data/lib/feed_tools/helpers/html_helper.rb +75 -43
- data/lib/feed_tools/helpers/retrieval_helper.rb +204 -6
- data/lib/feed_tools/helpers/uri_helper.rb +4 -1
- data/lib/feed_tools/vendor/htree/parse.rb +3 -1
- data/lib/feed_tools/version.rb +9 -0
- data/rakefile +6 -4
- data/test/unit/atom_test.rb +253 -4
- data/test/unit/cache_test.rb +22 -17
- data/test/unit/helper_test.rb +2 -2
- metadata +4 -3
@@ -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
|
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
|
-
|
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
|
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 =
|
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 = "
|
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.
|
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";' +
|
data/test/unit/atom_test.rb
CHANGED
@@ -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
|
+
<code>http://example.org/tests/base/result.html</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
|
+
<a href="http://example.org/tests/base/result.html">
|
180
|
+
http://example.org/tests/base/result.html
|
181
|
+
</a>
|
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
|
+
<a href="/tests/base/result.html">
|
192
|
+
http://example.org/tests/base/result.html
|
193
|
+
</a>
|
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
|
+
<a href="base/result.html">
|
204
|
+
http://example.org/tests/base/result.html
|
205
|
+
</a>
|
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
|
+
<a href="../tests/base/result.html">
|
218
|
+
http://example.org/tests/base/result.html
|
219
|
+
</a>
|
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, <code>&lt;entry></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
|
+
<a href="http://example.org/tests/entrybase/result.html">
|
233
|
+
http://example.org/tests/entrybase/result.html
|
234
|
+
</a>
|
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, <code>&lt;entry></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
|
+
<a href="/tests/entrybase/result.html">
|
248
|
+
http://example.org/tests/entrybase/result.html
|
249
|
+
</a>
|
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, <code>&lt;entry></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
|
+
<a href="result.html">
|
263
|
+
http://example.org/tests/entrybase/result.html
|
264
|
+
</a>
|
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, <code>&lt;entry></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
|
+
<a href="../entrybase/result.html">
|
277
|
+
http://example.org/tests/entrybase/result.html
|
278
|
+
</a>
|
279
|
+
</content>
|
280
|
+
<updated>2006-01-17T12:35:5+01:00</updated>
|
281
|
+
</entry>
|
282
|
+
|
283
|
+
<entry>
|
284
|
+
<title type="html">
|
285
|
+
13: Content, <code>&lt;content></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
|
+
<a href="http://example.org/tests/contentbase/result.html">
|
293
|
+
http://example.org/tests/contentbase/result.html
|
294
|
+
</a>
|
295
|
+
</content>
|
296
|
+
<updated>2006-01-17T12:35:4+01:00</updated>
|
297
|
+
</entry>
|
298
|
+
|
299
|
+
<entry>
|
300
|
+
<title type="html">
|
301
|
+
14: Content, <code>&lt;content></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
|
+
<a href="/tests/contentbase/result.html">
|
309
|
+
http://example.org/tests/contentbase/result.html
|
310
|
+
</a>
|
311
|
+
</content>
|
312
|
+
<updated>2006-01-17T12:35:3+01:00</updated>
|
313
|
+
</entry>
|
314
|
+
|
315
|
+
<entry>
|
316
|
+
<title type="html">
|
317
|
+
15: Content, <code>&lt;content></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
|
+
<a href="result.html">
|
325
|
+
http://example.org/tests/contentbase/result.html
|
326
|
+
</a>
|
327
|
+
</content>
|
328
|
+
<updated>2006-01-17T12:35:2+01:00</updated>
|
329
|
+
</entry>
|
330
|
+
|
331
|
+
<entry>
|
332
|
+
<title type="html">
|
333
|
+
16: Content, <code>&lt;content></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
|
+
<a href="../contentbase/result.html">
|
341
|
+
http://example.org/tests/contentbase/result.html
|
342
|
+
</a>
|
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("<title
|
485
|
+
assert_equal("<title>",
|
237
486
|
feed.title, "HTML entity failed")
|
238
487
|
assert_equal(1, feed.items.size)
|
239
|
-
assert_equal("<title
|
488
|
+
assert_equal("<title>",
|
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("<title
|
501
|
+
assert_equal("<title>",
|
253
502
|
feed.title, "HTML NCR failed")
|
254
503
|
assert_equal(1, feed.items.size)
|
255
|
-
assert_equal("<title
|
504
|
+
assert_equal("<title>",
|
256
505
|
feed.items[0].title, "HTML NCR failed")
|
257
506
|
}
|
258
507
|
with_feed(:from_data => <<-FEED
|
data/test/unit/cache_test.rb
CHANGED
@@ -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(
|
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.
|
50
|
-
slashdot_feed = FeedTools::Feed.open(
|
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.
|
54
|
-
slashdot_feed = FeedTools::Feed.open(
|
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
|
-
|
57
|
-
assert_equal(false, slashdot_feed.
|
58
|
-
slashdot_feed.
|
59
|
-
|
60
|
-
|
61
|
-
slashdot_feed
|
62
|
-
|
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 =
|
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
|
data/test/unit/helper_test.rb
CHANGED
@@ -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.
|
7
|
-
date: 2006-
|
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.
|
2895
|
+
version: 1.0.0
|
2895
2896
|
version:
|
2896
2897
|
- !ruby/object:Gem::Dependency
|
2897
2898
|
name: builder
|