feed-abstract 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,6 +3,7 @@
3
3
  $LOAD_PATH.unshift(File.dirname(__FILE__)) unless $LOAD_PATH.include?(File.dirname(__FILE__))
4
4
 
5
5
  require 'rss'
6
+ require 'iconv'
6
7
 
7
8
  require "feed-abstract/version"
8
9
  require 'feed-abstract/mixins'
@@ -15,6 +15,11 @@ module FeedAbstract
15
15
  @feed = @source = feed
16
16
  end
17
17
 
18
+ def language
19
+ return '' if @feed.lang.nil?
20
+ @feed.lang
21
+ end
22
+
18
23
  def description
19
24
  return '' if @feed.subtitle.nil?
20
25
  @feed.subtitle.content
@@ -4,6 +4,11 @@ module FeedAbstract
4
4
  class Channel
5
5
  class RDF < RSS
6
6
 
7
+ def language
8
+ return '' if @feed.channel.dc_language.nil?
9
+ @feed.channel.dc_language
10
+ end
11
+
7
12
  # The authors list as an array.
8
13
  def authors
9
14
  return [] if @feed.channel.dc_publishers.empty?
@@ -14,6 +14,11 @@ module FeedAbstract
14
14
  @feed.channel.title
15
15
  end
16
16
 
17
+ def language
18
+ return '' if @feed.channel.language.nil?
19
+ @feed.channel.language
20
+ end
21
+
17
22
  def description
18
23
  @feed.channel.description
19
24
  end
@@ -43,8 +48,8 @@ module FeedAbstract
43
48
 
44
49
  # A Time object.
45
50
  def updated
46
- return '' if @feed.channel.lastBuildDate.nil?
47
- @feed.channel.lastBuildDate
51
+ return '' if @feed.channel.lastBuildDate.nil? && @feed.channel.pubDate.nil?
52
+ (@feed.channel.lastBuildDate.nil?) ? @feed.channel.pubDate : @feed.channel.lastBuildDate
48
53
  end
49
54
 
50
55
  # A globally unique ID for this feed. A URL in this case.
@@ -10,8 +10,12 @@ module FeedAbstract
10
10
 
11
11
  # === Parameters
12
12
  # * xml - a string or object instance that responds to <b>read</b>
13
- # * :do_validate - whether or not the feed should be validated. Passed through to RSS::Parser
14
- # * :ignore_unknown_element - passed through to RSS::Parser
13
+ # * :do_validate - whether or not the feed should be validated. Passed through to RSS::Parser. Defaults to false.
14
+ # * :ignore_unknown_element - passed through to RSS::Parser. Defaults to true.
15
+ # * :input_encoding - Defaults to "UTF-8". This is the encoding of the feed as passed to FeedAbstract::Feed.new
16
+ # * :output_encoding - Defaults to "UTF-8". This is the encoding of the feed as it's passed to the underlying parser - generally you should keep this as "UTF-8".
17
+ # * :force_encoding - Force input text to be UTF-8 (or whatever you set :output_encoding to), removing invalid byte sequences before passing to RSS::Parser. Defaults to true because RSS::Parser will thrown an error if it sees invalid byte sequences.
18
+ # * :transliterate_characters - Ask Iconv to transliterate unknown characters when forcing encoding conversion. This only works reliably when you set the :input_encoding properly. Defaults to false and should probably be left there because it's quirky and doesn't appear to work reliably.
15
19
  #
16
20
  # === Returns
17
21
  # An object with three attributes:
@@ -42,8 +46,33 @@ module FeedAbstract
42
46
  # f = FeedAbstract::Feed.new(Net::HTTP.get(URI.parse('http://rss.slashdot.org/Slashdot/slashdot')))
43
47
  # puts f.items.collect{|i| i.link}
44
48
  #
45
- def initialize(xml = nil, options = {:do_validate => false, :ignore_unknown_element => true})
49
+ def initialize(xml = nil, opts = {})
50
+ options = {
51
+ :do_validate => false,
52
+ :ignore_unknown_element => true,
53
+ :input_encoding => 'UTF-8',
54
+ :output_encoding => 'UTF-8',
55
+ :force_encoding => true,
56
+ :transliterate_characters => false
57
+ }.merge(opts)
58
+
46
59
  input = (xml.respond_to?(:read)) ? xml.read : xml
60
+
61
+ if options[:force_encoding]
62
+ ic = Iconv.new(options[:output_encoding].upcase + ((options[:transliterate_characters]) ? '//TRANSLIT' : '') + '//IGNORE',options[:input_encoding].upcase)
63
+ if input.respond_to?(:encoding)
64
+ # ruby 1.9
65
+ # Only transcode if the encoding isn't valid.
66
+ # See: http://po-ru.com/diary/fixing-invalid-utf-8-in-ruby-revisited/ for why we're appending the extra space.
67
+ unless (input.encoding.to_s.upcase == options[:output_encoding].upcase && input.valid_encoding?)
68
+ input = ic.iconv(input << ' ')[0..-2]
69
+ end
70
+ else
71
+ # ruby 1.8
72
+ input = ic.iconv(input << ' ')[0..-2]
73
+ end
74
+ end
75
+
47
76
  @raw_feed = RSS::Parser.parse(input,options[:do_validate], options[:ignore_unknown_element])
48
77
  if @raw_feed == nil
49
78
  raise FeedAbstract::ParserError
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module FeedAbstract
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.4"
5
5
  end
@@ -5,37 +5,38 @@ module FeedAbstract
5
5
 
6
6
  describe 'Channels' do
7
7
  before(:all) do
8
- @docatom = Feed.new(File.read('spec/test_data/doc.atom'))
9
- @kpgatom = Feed.new(File.read('spec/test_data/katanapg.atom'))
10
- @djcprss2 = Feed.new(File.read('spec/test_data/djcp.rss'))
11
- @oa = Feed.new(File.read('spec/test_data/oa.africa.rss'))
12
- @delicious = Feed.new(File.read('spec/test_data/djcp_delicious.rss'))
13
- @zotero = Feed.new(File.read('spec/test_data/zotero.rss'))
8
+ instantiate_feeds
14
9
  end
15
10
 
16
- [:title, :subtitle, :description, :link, :generator, :authors, :author, :categories, :category, :icon, :logo, :rights, :updated, :guid].each do|att|
11
+ [:title, :language, :subtitle, :description, :link, :generator, :authors, :author, :categories, :category, :icon, :logo, :rights, :updated, :guid].each do|att|
17
12
  it { @docatom.channel.should respond_to att}
18
13
  it { @kpgatom.channel.should respond_to att}
19
14
  it { @djcprss2.channel.should respond_to att}
15
+ it { @djcprss92.channel.should respond_to att}
20
16
  it { @oa.channel.should respond_to att}
21
17
  it { @delicious.channel.should respond_to att}
22
18
  it { @zotero.channel.should respond_to att}
19
+ it { @feedburner.channel.should respond_to att}
23
20
 
24
21
  it { @docatom.channel.send(att).should_not == false}
25
22
  it { @kpgatom.channel.send(att).should_not == false}
26
23
  it { @djcprss2.channel.send(att).should_not == false}
24
+ it { @djcprss92.channel.send(att).should_not == false}
27
25
  it { @oa.channel.send(att).should_not == false}
28
26
  it { @delicious.channel.send(att).should_not == false}
29
27
  it { @zotero.channel.send(att).should_not == false}
28
+ it { @feedburner.channel.send(att).should_not == false}
30
29
  end
31
30
 
32
31
  it "should have the correct title" do
33
32
  @docatom.channel.title.should == 'Doc Searls Weblog'
34
33
  @kpgatom.channel.title.should == 'Katana Photo Groups: (Latest Updates)'
35
34
  @djcprss2.channel.title.should == 'Dan Collis-Puro'
35
+ @djcprss92.channel.title.should == 'Dan Collis-Puro'
36
36
  @oa.channel.title.should == 'Connotea: petersuber\'s bookmarks matching tag oa.africa'
37
37
  @delicious.channel.title.should == 'Delicious/djcp'
38
38
  @zotero.channel.title.should == 'Zotero / PROS Paper Group / Items'
39
+ @feedburner.channel.title.should == 'CNN.com'
39
40
  end
40
41
 
41
42
  it "should have the correct subtitle and description" do
@@ -48,6 +49,9 @@ module FeedAbstract
48
49
  @djcprss2.channel.subtitle.should == 'Tech. Open Source. Stuff that doesn\'t suck.'
49
50
  @djcprss2.channel.description.should == 'Tech. Open Source. Stuff that doesn\'t suck.'
50
51
 
52
+ @djcprss92.channel.subtitle.should == 'Tech. Open Source. Stuff that doesn\'t suck.'
53
+ @djcprss92.channel.description.should == 'Tech. Open Source. Stuff that doesn\'t suck.'
54
+
51
55
  @oa.channel.description.should == 'Connotea: petersuber\'s bookmarks matching tag oa.africa'
52
56
  @oa.channel.subtitle.should == 'Connotea: petersuber\'s bookmarks matching tag oa.africa'
53
57
 
@@ -56,42 +60,62 @@ module FeedAbstract
56
60
 
57
61
  @zotero.channel.subtitle.should == ''
58
62
  @zotero.channel.description.should == ''
63
+
64
+ @feedburner.channel.description.should == 'CNN.com delivers up-to-the-minute news and information on the latest top stories, weather, entertainment, politics and more.'
65
+ @feedburner.channel.subtitle.should == 'CNN.com delivers up-to-the-minute news and information on the latest top stories, weather, entertainment, politics and more.'
59
66
  end
60
67
 
61
68
  it "should have the correct link" do
62
69
  @docatom.channel.link.should == 'http://blogs.law.harvard.edu/doc'
63
70
  @kpgatom.channel.link.should == 'http://www.katanapg.com/latest'
64
71
  @djcprss2.channel.link.should == 'http://blogs.law.harvard.edu/djcp'
65
-
72
+ @djcprss92.channel.link.should == 'http://blogs.law.harvard.edu/djcp'
66
73
  @oa.channel.link.should == 'http://www.connotea.org/user/petersuber/tag/oa.africa'
67
74
  @delicious.channel.link.should == 'http://www.delicious.com/djcp'
68
-
69
75
  @zotero.channel.link.should == 'https://api.zotero.org/groups/52650/items'
76
+ @feedburner.channel.link.should == 'http://www.cnn.com/?eref=rss_topstories'
70
77
  end
71
78
 
72
79
  it "should have the correct generator" do
73
80
  @docatom.channel.generator.should == 'WordPress'
74
81
  @kpgatom.channel.generator.should == ''
75
82
  @djcprss2.channel.generator.should == 'WordPress'
83
+ @djcprss92.channel.generator.should == ''
76
84
  @oa.channel.generator.should == 'Connotea'
77
85
  @delicious.channel.generator.should == 'Delicious'
78
86
  @zotero.channel.generator.should == 'Zotero'
87
+ @feedburner.channel.generator.should == ''
88
+ end
89
+
90
+ it "should have the correct language" do
91
+ @docatom.channel.language.should == 'en'
92
+ @kpgatom.channel.language.should == ''
93
+ @djcprss2.channel.language.should == 'en'
94
+ @djcprss92.channel.language.should == 'en'
95
+ @oa.channel.language.should == ''
96
+ @delicious.channel.language.should == ''
97
+ @zotero.channel.language.should == ''
98
+ @feedburner.channel.language.should == 'en-us'
79
99
  end
80
100
 
81
101
  it "should have the correct authors" do
82
102
  @docatom.channel.authors.should == ['Doc Searls']
83
103
  @kpgatom.channel.authors.should == ['Nick Pappas']
84
104
  @djcprss2.channel.authors.should == ['DJCP']
105
+ @djcprss92.channel.authors.should == []
85
106
  @oa.channel.authors.should == []
86
107
  @delicious.channel.authors.should == []
87
108
  @zotero.channel.authors.should == []
109
+ @feedburner.channel.authors.should == []
88
110
 
89
111
  @docatom.channel.author.should == 'Doc Searls'
90
112
  @kpgatom.channel.author.should == 'Nick Pappas'
91
113
  @djcprss2.channel.author.should == 'DJCP'
114
+ @djcprss92.channel.author.should == ''
92
115
  @oa.channel.author.should == ''
93
116
  @delicious.channel.author.should == ''
94
117
  @zotero.channel.author.should == ''
118
+ @feedburner.channel.author.should == ''
95
119
 
96
120
  end
97
121
 
@@ -99,62 +123,75 @@ module FeedAbstract
99
123
  @docatom.channel.categories.should == []
100
124
  @kpgatom.channel.categories.should == ['photos']
101
125
  @djcprss2.channel.categories.should == ['Tech','Open Source','oa.africa','oa.test']
126
+ @djcprss92.channel.categories.should == []
102
127
  @oa.channel.categories.should == ['oa.africa','oa.test']
103
128
  @delicious.channel.categories.should == []
104
129
  @zotero.channel.categories.should == []
130
+ @feedburner.channel.categories.should == []
105
131
 
106
132
  @docatom.channel.category.should == ''
107
133
  @kpgatom.channel.category.should == 'photos'
108
134
  @djcprss2.channel.category.should == 'Tech, Open Source'
135
+ @djcprss92.channel.category.should == ''
109
136
  @oa.channel.category.should == 'oa.africa, oa.test'
110
137
  @delicious.channel.category.should == ''
111
138
  @zotero.channel.category.should == ''
139
+ @feedburner.channel.category.should == ''
112
140
  end
113
141
 
114
142
  it "should have the correct icon" do
115
143
  @docatom.channel.icon.should == ''
116
144
  @kpgatom.channel.icon.should == '/favicon.ico'
117
145
  @djcprss2.channel.icon.should == '/foobar.gif'
146
+ @djcprss92.channel.icon.should == ''
118
147
  @oa.channel.icon.should == 'http://example.com/image.gif'
119
148
  @delicious.channel.icon.should == ''
120
149
  @zotero.channel.icon.should == ''
150
+ @feedburner.channel.icon.should == 'http://i2.cdn.turner.com/cnn/.element/img/1.0/logo/cnn.logo.rss.gif'
121
151
  end
122
152
 
123
153
  it "should have the correct logo" do
124
154
  @docatom.channel.logo.should == ''
125
155
  @kpgatom.channel.logo.should == '/images/rss.gif'
126
156
  @djcprss2.channel.logo.should == '/foobar.gif'
157
+ @djcprss92.channel.logo.should == ''
127
158
  @oa.channel.logo.should == 'http://example.com/image.gif'
128
159
  @delicious.channel.logo.should == ''
129
160
  @zotero.channel.logo.should == ''
161
+ @feedburner.channel.logo.should == 'http://i2.cdn.turner.com/cnn/.element/img/1.0/logo/cnn.logo.rss.gif'
130
162
  end
131
163
 
132
164
  it "should have the correct rights" do
133
165
  @docatom.channel.rights.should == ''
134
166
  @kpgatom.channel.rights.should == ''
135
167
  @djcprss2.channel.rights.should == '2011 DJCP'
168
+ @djcprss92.channel.rights.should == ''
136
169
  @oa.channel.rights.should == 'Connotea 2011'
137
170
  @delicious.channel.rights.should == ''
138
171
  @zotero.channel.rights.should == ''
172
+ @feedburner.channel.rights.should == ' 2011 Cable News Network LP, LLLP.'
139
173
  end
140
174
 
141
175
  it "should have the correct updated value" do
142
176
  @docatom.channel.updated.should == Time.parse('2011-07-29 12:33:29 UTC')
143
177
  @kpgatom.channel.updated.should == Time.parse('2011-08-24 23:59:40 -0400')
144
178
  @djcprss2.channel.updated.should == Time.parse('Tue, 02 Aug 2011 01:05:26 +0000')
179
+ @djcprss92.channel.updated.should == Time.parse('Sat, 03 Sep 2011 01:16:50 +0000')
145
180
  @oa.channel.updated.should == Time.parse('2011-09-01T08:07:21Z')
146
181
  @delicious.channel.updated.should == ''
147
182
  @zotero.channel.updated.should == Time.parse('2011-09-02T17:16:11Z')
183
+ @feedburner.channel.updated.should == Time.parse('Sat, 03 Sep 2011 16:14:16 EDT')
148
184
  end
149
185
 
150
186
  it "should have the correct guid" do
151
187
  @docatom.channel.guid.should == 'http://blogs.law.harvard.edu/doc/feed/atom/'
152
188
  @kpgatom.channel.guid.should == 'urn:uuid:www.katanapg.com-latest-xml'
153
-
154
189
  @djcprss2.channel.guid.should == 'http://blogs.law.harvard.edu/djcp'
190
+ @djcprss92.channel.guid.should == 'http://blogs.law.harvard.edu/djcp'
155
191
  @oa.channel.guid.should == 'http://www.connotea.org/user/petersuber/tag/oa.africa'
156
192
  @delicious.channel.guid.should == 'http://www.delicious.com/djcp'
157
193
  @zotero.channel.guid.should == 'http://zotero.org/groups/52650/items'
194
+ @feedburner.channel.guid.should == 'http://www.cnn.com/?eref=rss_topstories'
158
195
  end
159
196
  end
160
197
  end
@@ -5,39 +5,21 @@ module FeedAbstract
5
5
 
6
6
  describe Item do
7
7
  before(:all) do
8
- @docatom = Feed.new(File.read('spec/test_data/doc.atom'))
9
- @docatomitem = @docatom.items.first
10
-
11
- @kpgatom = Feed.new(File.read('spec/test_data/katanapg.atom'))
12
- @kpgatomitem = @kpgatom.items.first
13
-
14
- @djcprss2 = Feed.new(File.read('spec/test_data/djcp.rss'))
15
- @djcprss2item = @djcprss2.items.first
16
-
17
- @oa = Feed.new(File.read('spec/test_data/oa.africa.rss'))
18
- @oaitem = @oa.items.first
19
-
20
- @delicious = Feed.new(File.read('spec/test_data/djcp_delicious.rss'))
21
- @deliciousitem = @delicious.items.first
22
-
23
- @zotero = Feed.new(File.read('spec/test_data/zotero.rss'))
24
- @zoteroitem = @zotero.items.first
8
+ instantiate_feeds
9
+ instantiate_example_items
25
10
  end
26
11
 
27
- [:title, :summary, :content, :link, :authors, :author, :contributor, :contributors, :categories, :category, :rights, :updated, :guid, :published].each do|att|
28
- it { @docatomitem.should respond_to att}
29
- it { @kpgatomitem.should respond_to att}
30
- it { @djcprss2item.should respond_to att}
31
- it { @oaitem.should respond_to att}
32
- it { @deliciousitem.should respond_to att}
33
- it { @zoteroitem.should respond_to att}
12
+ it{@docatom.should respond_to :items}
34
13
 
35
- it { @docatomitem.send(att).should_not == false}
36
- it { @kpgatomitem.send(att).should_not == false}
37
- it { @djcprss2item.send(att).should_not == false}
38
- it { @oaitem.send(att).should_not == false}
39
- it { @deliciousitem.send(att).should_not == false}
40
- it { @zoteroitem.send(att).should_not == false}
14
+ it "responds to all attributes without causing an error" do
15
+ @all_feeds.each do |feed|
16
+ [:title, :summary, :content, :link, :authors, :author, :contributor, :contributors, :categories, :category, :rights, :updated, :guid, :published].each do|att|
17
+ feed.items.each do|item|
18
+ item.should respond_to att
19
+ item.send(att).should_not == false
20
+ end
21
+ end
22
+ end
41
23
  end
42
24
 
43
25
  it "should have the correct title" do
@@ -47,6 +29,7 @@ module FeedAbstract
47
29
  @oaitem.title.should == 'Mali doctoral students learn about access to e-resources | EIFL'
48
30
  @deliciousitem.title.should == 'aspic and other delights'
49
31
  @zoteroitem.title.should == 'An experimental application of the Delphi method to the use of experts'
32
+ @feedburneritem.title.should == 'Did Libya help CIA with renditions of terror suspects?'
50
33
  end
51
34
 
52
35
  it "should have the correct summary" do
@@ -58,6 +41,9 @@ module FeedAbstract
58
41
  @oaitem.summary.should == %q|""On August 13, 2011, Consortium Malien des Bibliothèques (COMBI) organized a workshop on access and use of e-resources (both commercial and open access)....There was a special focus on resources made freely available through EIFL for Malian institutions and also on the various international initiatives working to improve access to scientific information in Mali. Digital libraries and portals for open access journals were also demonstrated...."" Posted by petersuber to oa.notes ru.no oa.event oa.africa oa.new on Thu Aug 18 2011|
59
42
  @deliciousitem.summary.should == ''
60
43
  @zoteroitem.summary.should == ''
44
+ @feedburneritem.summary.should == %q|Documents seized at Libyan intelligence headquarters have unearthed insights into the CIA's surprisingly close relationship with counterparts in the Gadhafi regime.<div class="feedflare">
45
+ <a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=sV5N-C76mOM:9JZ1FBt9fS4:V_sGLiPBpWU" border="0"></img></a> <a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"></img></a> <a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=sV5N-C76mOM:9JZ1FBt9fS4:gIN9vFwOqvQ" border="0"></img></a>
46
+ </div><img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/sV5N-C76mOM" height="1" width="1"/>|
61
47
  end
62
48
 
63
49
  it "should have the correct content" do
@@ -68,7 +54,6 @@ module FeedAbstract
68
54
  <p>A couple months back I <a href="http://www.youtube.com/watch?v=4dn1jkWgFvM&amp;feature=youtu.be">gave a talk</a> at the <a href="http://personaldemocracy.com/">Personal Democracy Forum</a> where I was warmly introduced as one of those elders we should all listen to. That was nice, but here&#8217;s the strange part: when it comes to what I do in the world, I&#8217;m still young. Most of the people I hang and work with are half my age or less, yet I rarely notice or think about that, because it&#8217;s irrelevant. My job is changing the world, and that&#8217;s an calling that tends to involve smart, young, energetic people. The difference with a few of us is that we&#8217;ve been young a lot longer.</p>
69
55
  <p>But I don&#8217;t have illusions about the facts of life. It&#8217;s in one&#8217;s sixties that the croak rate starts to angle north on the Y axis as age ticks east on the X. Still, I&#8217;m in no less hurry to make things happen than I ever was. I&#8217;m just more patient. That&#8217;s because one of the things I&#8217;ve learned is that now is always earlier than it seems. None of the future has happened yet, and it&#8217;s always bigger than the past.</p>
70
56
  |
71
-
72
57
  @kpgatomitem.content.should == %q|<div xmlns="http://www.w3.org/1999/xhtml">
73
58
  <img src="http://misuzu.katanapg.com/62/1134022551906b98/thumb.jpg"/>
74
59
  </div>|
@@ -107,6 +92,7 @@ module FeedAbstract
107
92
  </tr>
108
93
  </table>
109
94
  </div>|
95
+ @feedburneritem.content.should == ''
110
96
  end
111
97
 
112
98
  it "should have the correct link" do
@@ -116,6 +102,7 @@ module FeedAbstract
116
102
  @oaitem.link.should == 'http://www.eifl.net/news/mali-doctoral-students-learn-about-access-e-r'
117
103
  @deliciousitem.link.should == 'http://aspicandotherdelights.tumblr.com/'
118
104
  @zoteroitem.link.should == 'https://api.zotero.org/groups/52650/items/FHDJ5PXZ'
105
+ @feedburneritem.link.should == 'http://rss.cnn.com/~r/rss/cnn_topstories/~3/sV5N-C76mOM/index.html'
119
106
  end
120
107
 
121
108
  it "should have the correct author" do
@@ -125,6 +112,7 @@ module FeedAbstract
125
112
  @oaitem.author.should == 'petersuber'
126
113
  @deliciousitem.author.should == 'djcp'
127
114
  @zoteroitem.author.should == 'ingle.atul'
115
+ @feedburneritem.author.should == ''
128
116
  end
129
117
 
130
118
  it "should have the correct authors" do
@@ -134,6 +122,7 @@ module FeedAbstract
134
122
  @oaitem.authors.should == ['petersuber']
135
123
  @deliciousitem.authors.should == ['djcp']
136
124
  @zoteroitem.authors.should == ['ingle.atul']
125
+ @feedburneritem.authors.should == []
137
126
  end
138
127
 
139
128
  it "should have the correct contributor" do
@@ -143,6 +132,7 @@ module FeedAbstract
143
132
  @oaitem.contributor.should == ''
144
133
  @deliciousitem.contributor.should == ''
145
134
  @zoteroitem.contributor.should == ''
135
+ @feedburneritem.contributor.should == ''
146
136
  end
147
137
 
148
138
  it "should have the correct contributors" do
@@ -152,6 +142,7 @@ module FeedAbstract
152
142
  @oaitem.contributors.should == []
153
143
  @deliciousitem.contributors.should == []
154
144
  @zoteroitem.contributors.should == []
145
+ @feedburneritem.contributors.should == []
155
146
  end
156
147
 
157
148
  it "should have the correct category" do
@@ -161,6 +152,7 @@ module FeedAbstract
161
152
  @oaitem.category.should == 'oa.notes, ru.no, oa.event, oa.africa, oa.new'
162
153
  @deliciousitem.category.should == 'cooking, oddness'
163
154
  @zoteroitem.category.should == ''
155
+ @feedburneritem.category.should == ''
164
156
  end
165
157
 
166
158
  it "should have the correct categories" do
@@ -170,6 +162,7 @@ module FeedAbstract
170
162
  @oaitem.categories.should == ["oa.notes", "ru.no", "oa.event", "oa.africa", "oa.new"]
171
163
  @deliciousitem.categories.should == ['cooking', 'oddness']
172
164
  @zoteroitem.categories.should == []
165
+ @feedburneritem.categories.should == []
173
166
  end
174
167
 
175
168
  it "should have the correct rights" do
@@ -179,6 +172,7 @@ module FeedAbstract
179
172
  @oaitem.rights.should == ''
180
173
  @deliciousitem.rights.should == ''
181
174
  @zoteroitem.rights.should == ''
175
+ @feedburneritem.rights.should == ''
182
176
  end
183
177
 
184
178
  it "should have been updated at the correct time" do
@@ -188,6 +182,7 @@ module FeedAbstract
188
182
  @oaitem.updated.should == Time.parse('2011-08-18T21:14:38Z')
189
183
  @deliciousitem.updated.should == Time.parse('Fri, 19 Aug 2011 00:56:26 +0000')
190
184
  @zoteroitem.updated.should == Time.parse('2011-09-02T17:16:11Z')
185
+ @feedburneritem.updated.should == Time.parse('Sat, 03 Sep 2011 16:11:39 EDT')
191
186
  end
192
187
 
193
188
  it "should have been published at the proper time" do
@@ -197,6 +192,7 @@ module FeedAbstract
197
192
  @oaitem.published.should == Time.parse('2011-08-18T21:14:38Z')
198
193
  @deliciousitem.published.should == Time.parse('Fri, 19 Aug 2011 00:56:26 +0000')
199
194
  @zoteroitem.published.should == Time.parse('2011-09-02T17:14:22Z')
195
+ @feedburneritem.published.should == Time.parse('Sat, 03 Sep 2011 16:11:39 EDT')
200
196
  end
201
197
 
202
198
  it "should have the proper guid" do
@@ -206,6 +202,7 @@ module FeedAbstract
206
202
  @oaitem.guid.should == 'http://www.connotea.org/user/petersuber/uri/924b97cee02e01888a93473ca6752213'
207
203
  @deliciousitem.guid.should == 'http://www.delicious.com/url/6e0504ca698232809a0b5065e8b83031#djcp'
208
204
  @zoteroitem.guid.should == 'http://zotero.org/groups/pros_paper/items/FHDJ5PXZ'
205
+ @feedburneritem.guid.should == 'http://www.cnn.com/2011/WORLD/africa/09/03/libya.west.spies/index.html?eref=rss_topstories'
209
206
  end
210
207
 
211
208
  end
@@ -4,25 +4,33 @@ require 'spec_helper'
4
4
  module FeedAbstract
5
5
 
6
6
  describe Feed do
7
+ before(:all) do
8
+ instantiate_feeds
9
+ end
7
10
 
8
11
  it "should be able to instantiate" do
9
12
  Feed.respond_to?(:new).should == true
10
13
  end
11
14
 
12
15
  it "should recognize atom feeds properly" do
13
- feed = Feed.new(File.open('spec/test_data/doc.atom'))
14
- feed.channel.class.should == Channel::Atom
16
+ @docatom.channel.class.should == Channel::Atom
17
+ @kpgatom.channel.class.should == Channel::Atom
15
18
  end
16
19
 
17
20
  it "should recognize rss feeds properly" do
18
- feed = Feed.new(File.open('spec/test_data/djcp.rss'))
19
- feed.channel.class.should == Channel::RSS
20
- feed = Feed.new(File.open('spec/test_data/djcp_delicious.rss'))
21
+ @djcprss2.channel.class.should == Channel::RSS
22
+ @djcprss92.channel.class.should == Channel::RSS
23
+ @delicious.channel.class.should == Channel::RSS
21
24
  end
22
25
 
23
26
  it "should recognize rdf feeds properly" do
24
- feed = Feed.new(File.open('spec/test_data/oa.africa.rss'))
25
- feed.channel.class.should == Channel::RDF
27
+ @oa.channel.class.should == Channel::RDF
28
+ end
29
+
30
+ it "should have items" do
31
+ @all_feeds.each do|feed|
32
+ feed.should respond_to :items
33
+ end
26
34
  end
27
35
 
28
36
  end
@@ -1,2 +1,27 @@
1
+ # encoding: UTF-8
2
+
1
3
  $:.unshift File.dirname(__FILE__) + '/../lib'
2
4
  require 'feed-abstract'
5
+
6
+ def instantiate_feeds
7
+ @docatom = FeedAbstract::Feed.new(File.open('spec/test_data/doc.atom'))
8
+ @kpgatom = FeedAbstract::Feed.new(File.open('spec/test_data/katanapg.atom'))
9
+ @djcprss2 = FeedAbstract::Feed.new(File.open('spec/test_data/djcp.rss'))
10
+ @djcprss92 = FeedAbstract::Feed.new(File.open('spec/test_data/djcp.rss92'))
11
+ @oa = FeedAbstract::Feed.new(File.open('spec/test_data/oa.africa.rss'))
12
+ @delicious = FeedAbstract::Feed.new(File.open('spec/test_data/djcp_delicious.rss'))
13
+ @zotero = FeedAbstract::Feed.new(File.open('spec/test_data/zotero.rss'))
14
+ @feedburner = FeedAbstract::Feed.new(File.open('spec/test_data/feedburner.rss'))
15
+
16
+ @all_feeds = [@docatom, @kpgatom, @djcprss2, @djcprss92, @oa, @delicious, @zotero, @feedburner]
17
+ end
18
+
19
+ def instantiate_example_items
20
+ @docatomitem = @docatom.items.first
21
+ @kpgatomitem = @kpgatom.items.first
22
+ @djcprss2item = @djcprss2.items.first
23
+ @oaitem = @oa.items.first
24
+ @deliciousitem = @delicious.items.first
25
+ @zoteroitem = @zotero.items.first
26
+ @feedburneritem = @feedburner.items.first
27
+ end
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
2
+ <channel>
3
+ <title>Dan Collis-Puro</title>
4
+ <link>http://blogs.law.harvard.edu/djcp</link>
5
+ <description>Tech. Open Source. Stuff that doesn&#039;t suck.</description>
6
+ <lastBuildDate>Sat, 03 Sep 2011 01:16:50 +0000</lastBuildDate>
7
+ <docs>http://backend.userland.com/rss092</docs>
8
+ <language>en</language>
9
+ <!-- generator="WordPress/3.2.1" -->
10
+
11
+ <item>
12
+ <title>S1:E10 &#8211; Hide and &#8220;Q&#8221;</title>
13
+ <description><![CDATA[&#8220;Q is annoying. I thought Riker was going crazy after getting the powers at the beginning, but Picard make him feel like an idiot. Troi&#8217;s not in this.&#8221; TNG watches TNG – an ongoing series where my 11 year old &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/09/s1e10-hide-and-q/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
14
+ <link>http://blogs.law.harvard.edu/djcp/2011/09/s1e10-hide-and-q/</link>
15
+ </item>
16
+ <item>
17
+ <title>S1:E8 &#8211; The Battle</title>
18
+ <description><![CDATA[&#8220;I thought he was going to hurt himself. The Ferengi are mean, but the Ferengi first officer was good because he didn&#8217;t leave the bad guy that wanted revenge in command.  Wesley was funny when he said &#8220;Adults!&#8221;" TNG watches &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/08/s1e8-the-battle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
19
+ <link>http://blogs.law.harvard.edu/djcp/2011/08/s1e8-the-battle/</link>
20
+ </item>
21
+ <item>
22
+ <title>S1:E7 &#8211; Justice</title>
23
+ <description><![CDATA[&#8220;Everybody&#8217;s blonde &#8211; they&#8217;re all way too happy. I bet it will all be an animation. I bet that ship is making the whole planet. It&#8217;s sucking all the data out &#8211; of Data. They wear weird clothes. Eww. So &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/08/s1e7-justice/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
24
+ <link>http://blogs.law.harvard.edu/djcp/2011/08/s1e7-justice/</link>
25
+ </item>
26
+ <item>
27
+ <title>S1:E6 &#8211; Lonely Among Us</title>
28
+ <description><![CDATA[&#8220;It&#8217;s an evil power that&#8217;s making her want to control the bridge! The ones that had beards ate raw animals &#8211; that was gross.&#8221; TNG watches TNG – an ongoing series where my almost 11 year old daughter discovers Star &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/08/s1e6-lonely-among-us/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
29
+ <link>http://blogs.law.harvard.edu/djcp/2011/08/s1e6-lonely-among-us/</link>
30
+ </item>
31
+ <item>
32
+ <title>S1:E5 &#8211; Where No One Has Gone Before</title>
33
+ <description><![CDATA[&#8220;Riker and Troi are friends! The intro to the show takes too long. I like Wesley, even though he&#8217;s a nerd. He&#8217;s a know-it-all but I like him.  Referring to Kosinki, the warp-drive &#8220;consultant&#8221;: Self-confident, self-satisifed pig! I like the part &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/07/s1e5-where-no-one-has-gone-before/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
34
+ <link>http://blogs.law.harvard.edu/djcp/2011/07/s1e5-where-no-one-has-gone-before/</link>
35
+ </item>
36
+ <item>
37
+ <title>S1:E4 &#8211; The Last Outpost</title>
38
+ <description><![CDATA[&#8220;It&#8217;s good because it says you shouldn&#8217;t battle each other. Commander Riker is pretty cool in this one. The Ferengi are sort of dumb and mean.  Data is really funny when he gets his fingers caught in the Chinese finger &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/07/s1e4-the-last-outpost/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
39
+ <link>http://blogs.law.harvard.edu/djcp/2011/07/s1e4-the-last-outpost/</link>
40
+ </item>
41
+ <item>
42
+ <title>S1:E3 &#8211; Code of Honor</title>
43
+ <description><![CDATA[&#8220;Good story, I don&#8217;t remember too much. Lieutenant Yar shows how awesome she is.&#8221; TNG watches TNG – an ongoing series where my almost 11 year old daughter discovers Star Trek.]]></description>
44
+ <link>http://blogs.law.harvard.edu/djcp/2011/07/s1e3-code-of-honor/</link>
45
+ </item>
46
+ <item>
47
+ <title>S1:E2 &#8211; The Naked Now</title>
48
+ <description><![CDATA[&#8220;This one sorta creeped me out. It was really weird. Most of them got cuckoo, the Doctor fell in love with the Captain. They get drunk, and even Wes! He takes over the ship, and Riker doesn&#8217;t get drunk, he &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/07/s1e2-the-naked-now/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
49
+ <link>http://blogs.law.harvard.edu/djcp/2011/07/s1e2-the-naked-now/</link>
50
+ </item>
51
+ <item>
52
+ <title>S1:E1 &#8211; Encounter at Farpoint</title>
53
+ <description><![CDATA[&#8220;It has a nice ending. It sorta said SOME true stuff about people, but we&#8217;re a little more advanced than Q thinks we are. This show is weird &#8211; at the end, they figure out that the people in Farpoint &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/07/s1e1-encounter-at-farpoint/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
54
+ <link>http://blogs.law.harvard.edu/djcp/2011/07/s1e1-encounter-at-farpoint/</link>
55
+ </item>
56
+ <item>
57
+ <title>TNG watches TNG</title>
58
+ <description><![CDATA[My daughter knows NOTHING about Star Trek &#8211; she&#8217;s never seen an episode, doesn&#8217;t know what a Klingon or a Vulcan is. She does have the ability to enjoy large, complicated storylines as evidenced by her love of LoTR, Harry &#8230; <a href="http://blogs.law.harvard.edu/djcp/2011/07/tng-watches-tng/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
59
+ <link>http://blogs.law.harvard.edu/djcp/2011/07/tng-watches-tng/</link>
60
+ </item>
61
+ </channel>
62
+ </rss>
@@ -0,0 +1,108 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://rss.cnn.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel>
3
+ <title>CNN.com</title>
4
+ <link>http://www.cnn.com/?eref=rss_topstories</link>
5
+ <description>CNN.com delivers up-to-the-minute news and information on the latest top stories, weather, entertainment, politics and more.</description>
6
+ <language>en-us</language>
7
+ <copyright>� 2011 Cable News Network LP, LLLP.</copyright>
8
+ <pubDate>Sat, 03 Sep 2011 16:14:16 EDT</pubDate>
9
+ <ttl>5</ttl>
10
+ <image>
11
+ <title>CNN.com</title>
12
+ <link>http://www.cnn.com/?eref=rss_topstories</link>
13
+ <url>http://i2.cdn.turner.com/cnn/.element/img/1.0/logo/cnn.logo.rss.gif</url>
14
+ <width>144</width>
15
+ <height>33</height>
16
+ <description>CNN.com delivers up-to-the-minute news and information on the latest top stories, weather, entertainment, politics and more.</description>
17
+ </image>
18
+ <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://rss.cnn.com/rss/cnn_topstories" /><feedburner:info uri="rss/cnn_topstories" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><thespringbox:skin xmlns:thespringbox="http://www.thespringbox.com/dtds/thespringbox-1.0.dtd">http://rss.cnn.com/rss/cnn_topstories?format=skin</thespringbox:skin><item>
19
+ <title>Did Libya help CIA with renditions of terror suspects?</title>
20
+ <guid isPermaLink="false">http://www.cnn.com/2011/WORLD/africa/09/03/libya.west.spies/index.html?eref=rss_topstories</guid>
21
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/sV5N-C76mOM/index.html</link>
22
+ <description>Documents seized at Libyan intelligence headquarters have unearthed insights into the CIA's surprisingly close relationship with counterparts in the Gadhafi regime.&lt;div class="feedflare"&gt;
23
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=sV5N-C76mOM:9JZ1FBt9fS4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sV5N-C76mOM:9JZ1FBt9fS4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=sV5N-C76mOM:9JZ1FBt9fS4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
24
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/sV5N-C76mOM" height="1" width="1"/&gt;</description>
25
+ <pubDate>Sat, 03 Sep 2011 16:11:39 EDT</pubDate>
26
+ <feedburner:origLink>http://www.cnn.com/2011/WORLD/africa/09/03/libya.west.spies/index.html?eref=rss_topstories</feedburner:origLink></item>
27
+ <item>
28
+ <title>Tropical storm hovers off Gulf Coast</title>
29
+ <guid isPermaLink="false">http://www.cnn.com/2011/US/09/03/tropical.weather.gulf/index.html?eref=rss_topstories</guid>
30
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/YHu7oeSim2g/index.html</link>
31
+ <description>The slow-moving rainmaker is expected to dump 8 to 10 inches on New Orleans. Forecasters warn that "a few tornadoes will be possible" along the Gulf Coast.&lt;div class="feedflare"&gt;
32
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=YHu7oeSim2g:x-PiCXe0iz0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=YHu7oeSim2g:x-PiCXe0iz0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=YHu7oeSim2g:x-PiCXe0iz0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=YHu7oeSim2g:x-PiCXe0iz0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=YHu7oeSim2g:x-PiCXe0iz0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=YHu7oeSim2g:x-PiCXe0iz0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=YHu7oeSim2g:x-PiCXe0iz0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
33
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/YHu7oeSim2g" height="1" width="1"/&gt;</description>
34
+ <pubDate>Sat, 03 Sep 2011 12:41:40 EDT</pubDate>
35
+ <feedburner:origLink>http://www.cnn.com/2011/US/09/03/tropical.weather.gulf/index.html?eref=rss_topstories</feedburner:origLink></item>
36
+ <item>
37
+ <title>Katia a hurricane, again</title>
38
+ <guid isPermaLink="false">http://www.cnn.com/2011/WORLD/americas/09/02/atlantic.katia.alert/index.html?eref=rss_topstories</guid>
39
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/S0QQre3az4o/index.html</link>
40
+ <description>The storm named Katia has become a hurricane again in the Atlantic, the National Hurricane Center said Friday. It had briefly weakened into a tropical storm but has since regained strength, the center said.&lt;div class="feedflare"&gt;
41
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=S0QQre3az4o:zqdMwUmJU00:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=S0QQre3az4o:zqdMwUmJU00:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=S0QQre3az4o:zqdMwUmJU00:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=S0QQre3az4o:zqdMwUmJU00:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=S0QQre3az4o:zqdMwUmJU00:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=S0QQre3az4o:zqdMwUmJU00:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=S0QQre3az4o:zqdMwUmJU00:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
42
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/S0QQre3az4o" height="1" width="1"/&gt;</description>
43
+ <pubDate>Sat, 03 Sep 2011 10:15:32 EDT</pubDate>
44
+ <feedburner:origLink>http://www.cnn.com/2011/WORLD/americas/09/02/atlantic.katia.alert/index.html?eref=rss_topstories</feedburner:origLink></item>
45
+ <item>
46
+ <title>Vatican rejects criticism by Ireland</title>
47
+ <guid isPermaLink="false">http://www.cnn.com/2011/WORLD/europe/09/03/vatican.ireland.abuse/index.html?eref=rss_topstories</guid>
48
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/sPJoliU4n1Y/index.html</link>
49
+ <description>The Vatican has rejected criticism that church leaders sought to cover up extensive abuse of young people by priests in Ireland, in a lengthy statement sent to the Irish government Saturday.&lt;div class="feedflare"&gt;
50
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sPJoliU4n1Y:Fg0IxcgfVXc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sPJoliU4n1Y:Fg0IxcgfVXc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sPJoliU4n1Y:Fg0IxcgfVXc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=sPJoliU4n1Y:Fg0IxcgfVXc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sPJoliU4n1Y:Fg0IxcgfVXc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=sPJoliU4n1Y:Fg0IxcgfVXc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=sPJoliU4n1Y:Fg0IxcgfVXc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
51
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/sPJoliU4n1Y" height="1" width="1"/&gt;</description>
52
+ <pubDate>Sat, 03 Sep 2011 10:41:12 EDT</pubDate>
53
+ <feedburner:origLink>http://www.cnn.com/2011/WORLD/europe/09/03/vatican.ireland.abuse/index.html?eref=rss_topstories</feedburner:origLink></item>
54
+ <item>
55
+ <title>Military plane goes missing in Chile</title>
56
+ <guid isPermaLink="false">http://www.cnn.com/2011/WORLD/americas/09/02/chile.plane/index.html?eref=rss_topstories</guid>
57
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/v_9sR8IcXxY/index.html</link>
58
+ <description>A military plane with 21 people aboard went missing off Chile's Pacific coast near the Juan Fernandez islands, Chile's defense minister said on Friday.&lt;div class="feedflare"&gt;
59
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=v_9sR8IcXxY:lnWtazcZt0I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=v_9sR8IcXxY:lnWtazcZt0I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=v_9sR8IcXxY:lnWtazcZt0I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=v_9sR8IcXxY:lnWtazcZt0I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=v_9sR8IcXxY:lnWtazcZt0I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=v_9sR8IcXxY:lnWtazcZt0I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=v_9sR8IcXxY:lnWtazcZt0I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
60
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/v_9sR8IcXxY" height="1" width="1"/&gt;</description>
61
+ <pubDate>Sat, 03 Sep 2011 10:44:27 EDT</pubDate>
62
+ <feedburner:origLink>http://www.cnn.com/2011/WORLD/americas/09/02/chile.plane/index.html?eref=rss_topstories</feedburner:origLink></item>
63
+ <item>
64
+ <title>WikiLeaks puts out U.S. embassy cables</title>
65
+ <guid isPermaLink="false">http://www.cnn.com/2011/WORLD/europe/09/02/us.wikileaks/index.html?eref=rss_topstories</guid>
66
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/fsqFTZM5poc/index.html</link>
67
+ <description>WikiLeaks threw open the doors Friday to its archive of more than a quarter million secret U.S. diplomatic cables, unfiltered and unedited, exposing and possibly endangering confidential diplomatic sources.&lt;div class="feedflare"&gt;
68
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=fsqFTZM5poc:4NoqUQxI2fM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=fsqFTZM5poc:4NoqUQxI2fM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=fsqFTZM5poc:4NoqUQxI2fM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=fsqFTZM5poc:4NoqUQxI2fM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=fsqFTZM5poc:4NoqUQxI2fM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=fsqFTZM5poc:4NoqUQxI2fM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=fsqFTZM5poc:4NoqUQxI2fM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
69
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/fsqFTZM5poc" height="1" width="1"/&gt;</description>
70
+ <pubDate>Fri, 02 Sep 2011 11:13:08 EDT</pubDate>
71
+ <feedburner:origLink>http://www.cnn.com/2011/WORLD/europe/09/02/us.wikileaks/index.html?eref=rss_topstories</feedburner:origLink></item>
72
+ <item>
73
+ <title>Police help Apple in search for iPhone</title>
74
+ <guid isPermaLink="false">http://www.cnn.com/2011/TECH/mobile/09/02/iphone.5.prototype/index.html?eref=rss_topstories</guid>
75
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/DwBJNaLCZF0/index.html</link>
76
+ <description>Police said they helped Apple investigators search a man's home here recently.&lt;div class="feedflare"&gt;
77
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=DwBJNaLCZF0:U6LymrChQ34:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=DwBJNaLCZF0:U6LymrChQ34:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=DwBJNaLCZF0:U6LymrChQ34:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=DwBJNaLCZF0:U6LymrChQ34:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=DwBJNaLCZF0:U6LymrChQ34:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=DwBJNaLCZF0:U6LymrChQ34:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=DwBJNaLCZF0:U6LymrChQ34:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
78
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/DwBJNaLCZF0" height="1" width="1"/&gt;</description>
79
+ <pubDate>Sat, 03 Sep 2011 10:37:39 EDT</pubDate>
80
+ <feedburner:origLink>http://www.cnn.com/2011/TECH/mobile/09/02/iphone.5.prototype/index.html?eref=rss_topstories</feedburner:origLink></item>
81
+ <item>
82
+ <title>Goodwill rolls at 'Bama-Kent State game</title>
83
+ <guid isPermaLink="false">http://www.cnn.com/2011/US/09/02/alabama.football.tornado/index.html?eref=rss_topstories</guid>
84
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/m2-BJEkCrZg/index.html</link>
85
+ <description>There are college football fans. And then there are University of Alabama football fans.&lt;div class="feedflare"&gt;
86
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=m2-BJEkCrZg:qFGEeDMnNKw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=m2-BJEkCrZg:qFGEeDMnNKw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=m2-BJEkCrZg:qFGEeDMnNKw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=m2-BJEkCrZg:qFGEeDMnNKw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=m2-BJEkCrZg:qFGEeDMnNKw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=m2-BJEkCrZg:qFGEeDMnNKw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=m2-BJEkCrZg:qFGEeDMnNKw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
87
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/m2-BJEkCrZg" height="1" width="1"/&gt;</description>
88
+ <pubDate>Sat, 03 Sep 2011 13:30:46 EDT</pubDate>
89
+ <feedburner:origLink>http://www.cnn.com/2011/US/09/02/alabama.football.tornado/index.html?eref=rss_topstories</feedburner:origLink></item>
90
+ <item>
91
+ <title>Apple's philanthropy needs a reboot</title>
92
+ <guid isPermaLink="false">http://www.cnn.com/2011/OPINION/09/03/martin.cary.apple.charity/index.html?eref=rss_topstories</guid>
93
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/a024YgJrn7M/index.html</link>
94
+ <description>As newly crowned CEO Tim Cook gets used to his new role and the extraordinary power and pressure that it brings, many Apple fans will likely urge him to continue leading the company much as his famous, turtle-necked predecessor Steve Jobs did.&lt;div class="feedflare"&gt;
95
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=a024YgJrn7M:RfWjapU4TZo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=a024YgJrn7M:RfWjapU4TZo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=a024YgJrn7M:RfWjapU4TZo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=a024YgJrn7M:RfWjapU4TZo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=a024YgJrn7M:RfWjapU4TZo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=a024YgJrn7M:RfWjapU4TZo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=a024YgJrn7M:RfWjapU4TZo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
96
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/a024YgJrn7M" height="1" width="1"/&gt;</description>
97
+ <pubDate>Sat, 03 Sep 2011 13:50:56 EDT</pubDate>
98
+ <feedburner:origLink>http://www.cnn.com/2011/OPINION/09/03/martin.cary.apple.charity/index.html?eref=rss_topstories</feedburner:origLink></item>
99
+ <item>
100
+ <title>Angelou criticizes King inscription</title>
101
+ <guid isPermaLink="false">http://www.cnn.com/2011/US/09/03/maya.angelou.king.memorial/index.html?eref=rss_topstories</guid>
102
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/tmBtePJ7dbY/index.html</link>
103
+ <description>Celebrated poet and author Maya Angelou continued her criticism of the inscription etched on the Martin Luther King Jr. National Memorial, saying an edit of the civil rights leader's statement makes him appear arrogant.&lt;div class="feedflare"&gt;
104
+ &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=tmBtePJ7dbY:m5hFV2bU73Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=tmBtePJ7dbY:m5hFV2bU73Q:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=tmBtePJ7dbY:m5hFV2bU73Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=tmBtePJ7dbY:m5hFV2bU73Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=tmBtePJ7dbY:m5hFV2bU73Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~ff/rss/cnn_topstories?a=tmBtePJ7dbY:m5hFV2bU73Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/rss/cnn_topstories?i=tmBtePJ7dbY:m5hFV2bU73Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
105
+ &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/tmBtePJ7dbY" height="1" width="1"/&gt;</description>
106
+ <pubDate>Sat, 03 Sep 2011 15:34:36 EDT</pubDate>
107
+ <feedburner:origLink>http://www.cnn.com/2011/US/09/03/maya.angelou.king.memorial/index.html?eref=rss_topstories</feedburner:origLink></item>
108
+ </channel></rss>
metadata CHANGED
@@ -1,46 +1,41 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: feed-abstract
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 3
9
- version: 0.0.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Daniel Collis-Puro
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-09-02 00:00:00 -04:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-09-06 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rspec
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &72099580 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - "="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 2
30
- - 6
31
- version: "2.6"
18
+ requirements:
19
+ - - =
20
+ - !ruby/object:Gem::Version
21
+ version: '2.6'
32
22
  type: :development
33
- version_requirements: *id001
34
- description: "This library creates a common object graph for the RSS/Atom/RDF parsing classes in the ruby standard library. This allows you parse different feed formats and get back the same (or at least a very similar) set of results - item authors are accessible under an \"author(s)\" attribute, categories/tags/subjects are accessible under \"category(ies)\" attributes, etc. We do our best to make sure the data makes sense, too - RSS items lack an \"updated\" attribute, so we use \"pubDate\" to populate it. "
35
- email:
23
+ prerelease: false
24
+ version_requirements: *72099580
25
+ description: ! 'This library creates a common object graph for the RSS/Atom/RDF parsing
26
+ classes in the ruby standard library. This allows you parse different feed formats
27
+ and get back the same (or at least a very similar) set of results - item authors
28
+ are accessible under an "author(s)" attribute, categories/tags/subjects are accessible
29
+ under "category(ies)" attributes, etc. We do our best to make sure the data makes
30
+ sense, too - RSS items lack an "updated" attribute, so we use "pubDate" to populate
31
+ it. '
32
+ email:
36
33
  - djcp@cyber.law.harvard.edu
37
34
  executables: []
38
-
39
35
  extensions: []
40
-
41
- extra_rdoc_files:
36
+ extra_rdoc_files:
42
37
  - README.rdoc
43
- files:
38
+ files:
44
39
  - .gitignore
45
40
  - Gemfile
46
41
  - README.rdoc
@@ -64,43 +59,38 @@ files:
64
59
  - spec/feed_abstract_spec.rb
65
60
  - spec/spec_helper.rb
66
61
  - spec/test_data/djcp.rss
62
+ - spec/test_data/djcp.rss92
67
63
  - spec/test_data/djcp_code.rss
68
64
  - spec/test_data/djcp_delicious.rss
69
65
  - spec/test_data/doc.atom
66
+ - spec/test_data/feedburner.rss
70
67
  - spec/test_data/katanapg.atom
71
68
  - spec/test_data/oa.africa.rss
72
69
  - spec/test_data/zotero.rss
73
- has_rdoc: true
74
70
  homepage: https://github.com/berkmancenter/feed-abstract
75
71
  licenses: []
76
-
77
72
  post_install_message:
78
- rdoc_options:
73
+ rdoc_options:
79
74
  - --charset=UTF-8
80
- require_paths:
75
+ require_paths:
81
76
  - lib
82
- required_ruby_version: !ruby/object:Gem::Requirement
77
+ required_ruby_version: !ruby/object:Gem::Requirement
83
78
  none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 0
89
- version: "0"
90
- required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
84
  none: false
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- segments:
96
- - 0
97
- version: "0"
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
98
89
  requirements: []
99
-
100
90
  rubyforge_project:
101
- rubygems_version: 1.3.7
91
+ rubygems_version: 1.8.6
102
92
  signing_key:
103
93
  specification_version: 3
104
- summary: Abstracts RSS/Atom/RDF parsing features from the ruby standard lib into a common object graph.
94
+ summary: Abstracts RSS/Atom/RDF parsing features from the ruby standard lib into a
95
+ common object graph.
105
96
  test_files: []
106
-