feed-abstract 0.0.5 → 0.0.6
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/feed-abstract.gemspec +18 -11
- data/lib/feed-abstract/channel/rdf.rb +2 -2
- data/lib/feed-abstract/channel/rss.rb +4 -4
- data/lib/feed-abstract/item/atom.rb +1 -1
- data/lib/feed-abstract/item/rdf.rb +2 -2
- data/lib/feed-abstract/item/rss.rb +3 -3
- data/lib/feed-abstract/mixins.rb +2 -2
- data/lib/feed-abstract/version.rb +1 -1
- data/spec/feed_abstract_channel_spec.rb +19 -1
- data/spec/feed_abstract_item_spec.rb +16 -0
- data/spec/feed_abstract_spec.rb +1 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/test_data/pyblosxom.atom +630 -0
- metadata +107 -85
data/feed-abstract.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.0.
|
7
|
+
s.name = "feed-abstract"
|
8
|
+
s.version = "0.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email = [
|
11
|
+
s.authors = ["Daniel Collis-Puro"]
|
12
|
+
s.date = "2011-09-15"
|
13
|
+
s.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. "
|
14
|
+
s.email = ["djcp@cyber.law.harvard.edu"]
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README.rdoc"
|
17
17
|
]
|
@@ -46,13 +46,14 @@ Gem::Specification.new do |s|
|
|
46
46
|
"spec/test_data/feedburner.rss",
|
47
47
|
"spec/test_data/katanapg.atom",
|
48
48
|
"spec/test_data/oa.africa.rss",
|
49
|
+
"spec/test_data/pyblosxom.atom",
|
49
50
|
"spec/test_data/zotero.rss"
|
50
51
|
]
|
51
|
-
s.homepage =
|
52
|
-
s.rdoc_options = [
|
53
|
-
s.require_paths = [
|
54
|
-
s.rubygems_version =
|
55
|
-
s.summary =
|
52
|
+
s.homepage = "https://github.com/berkmancenter/feed-abstract"
|
53
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
54
|
+
s.require_paths = ["lib"]
|
55
|
+
s.rubygems_version = "1.8.10"
|
56
|
+
s.summary = "Abstracts RSS/Atom/RDF parsing features from the ruby standard lib into a common object graph."
|
56
57
|
|
57
58
|
if s.respond_to? :specification_version then
|
58
59
|
s.specification_version = 3
|
@@ -65,6 +66,8 @@ Gem::Specification.new do |s|
|
|
65
66
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
66
67
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
67
68
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
69
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
70
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
68
71
|
else
|
69
72
|
s.add_dependency(%q<feed-abstract>, [">= 0"])
|
70
73
|
s.add_dependency(%q<rspec>, [">= 0"])
|
@@ -73,6 +76,8 @@ Gem::Specification.new do |s|
|
|
73
76
|
s.add_dependency(%q<rspec>, [">= 0"])
|
74
77
|
s.add_dependency(%q<rspec>, [">= 0"])
|
75
78
|
s.add_dependency(%q<rspec>, [">= 0"])
|
79
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
80
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
76
81
|
end
|
77
82
|
else
|
78
83
|
s.add_dependency(%q<feed-abstract>, [">= 0"])
|
@@ -82,6 +87,8 @@ Gem::Specification.new do |s|
|
|
82
87
|
s.add_dependency(%q<rspec>, [">= 0"])
|
83
88
|
s.add_dependency(%q<rspec>, [">= 0"])
|
84
89
|
s.add_dependency(%q<rspec>, [">= 0"])
|
90
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
91
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
85
92
|
end
|
86
93
|
end
|
87
94
|
|
@@ -12,7 +12,7 @@ module FeedAbstract
|
|
12
12
|
# The authors list as an array.
|
13
13
|
def authors
|
14
14
|
return [] if @feed.channel.dc_publishers.empty?
|
15
|
-
@feed.channel.dc_publishers
|
15
|
+
@feed.channel.dc_publishers.reject{|au| au == '' || au.match(/^\s+$/)}
|
16
16
|
end
|
17
17
|
|
18
18
|
# The authors list as a string, joined with a comma.
|
@@ -33,7 +33,7 @@ module FeedAbstract
|
|
33
33
|
# The category list as an array.
|
34
34
|
def categories
|
35
35
|
return [] if @feed.channel.dc_subjects.empty?
|
36
|
-
@feed.channel.dc_subjects.collect{|c| c.content}
|
36
|
+
@feed.channel.dc_subjects.collect{|c| c.content}.reject{|c| c == '' || c.match(/^\s+$/)}
|
37
37
|
end
|
38
38
|
|
39
39
|
# The category list as a string, joined with a comma.
|
@@ -61,7 +61,7 @@ module FeedAbstract
|
|
61
61
|
# The authors (a merge of the RSS managingEditor and dc:publisher elements) as an array.
|
62
62
|
def authors
|
63
63
|
return [] if @feed.channel.managingEditor.nil? && @feed.channel.dc_publishers.empty?
|
64
|
-
[@feed.channel.managingEditor, @feed.channel.dc_publishers].flatten.uniq
|
64
|
+
[@feed.channel.managingEditor, @feed.channel.dc_publishers].flatten.uniq.compact.reject{|au| au == '' || au.match(/^\s+$/)}
|
65
65
|
end
|
66
66
|
|
67
67
|
# The author list joined with a comma.
|
@@ -73,13 +73,13 @@ module FeedAbstract
|
|
73
73
|
# The category list (a merge of the RSS category and dc:subject elements) as an array.
|
74
74
|
def categories
|
75
75
|
return [] if @feed.channel.categories.empty? && @feed.channel.dc_subjects.empty?
|
76
|
-
[@feed.channel.categories, @feed.channel.dc_subjects].flatten.uniq.collect{|c| c.content}
|
76
|
+
[@feed.channel.categories, @feed.channel.dc_subjects].flatten.uniq.compact.collect{|c| c.content}.reject{|c| c == '' || c.match(/^\s+$/)}
|
77
77
|
end
|
78
78
|
|
79
79
|
# The category list as a string, joined with a comma.
|
80
80
|
def category
|
81
|
-
return '' if
|
82
|
-
|
81
|
+
return '' if self.categories.empty?
|
82
|
+
self.categories.join(', ')
|
83
83
|
end
|
84
84
|
|
85
85
|
# A URL to an icon representing this feed.
|
@@ -23,7 +23,7 @@ module FeedAbstract
|
|
23
23
|
# The contributor list as an array.
|
24
24
|
def contributors
|
25
25
|
return [] if @item.contributors.empty?
|
26
|
-
@item.contributors.collect{|c| c.name.content}
|
26
|
+
@item.contributors.reject{|con| con.name.content == '' || con.name.content.match(/^\s+$/)}.collect{|c| c.name.content}
|
27
27
|
end
|
28
28
|
|
29
29
|
#The contributor list as a string joined with a comma.
|
@@ -6,7 +6,7 @@ module FeedAbstract
|
|
6
6
|
|
7
7
|
# The author list (from the dc:creator element) as an array.
|
8
8
|
def authors
|
9
|
-
(@item.dc_creators.empty?) ? [] : @item.dc_creators.collect{|c| c.content}
|
9
|
+
(@item.dc_creators.empty?) ? [] : @item.dc_creators.collect{|c| c.content}.reject{|au| au == '' || au.match(/^\s+$/)}
|
10
10
|
end
|
11
11
|
|
12
12
|
# The author list as a string, joined with a comma.
|
@@ -18,7 +18,7 @@ module FeedAbstract
|
|
18
18
|
# The category list (parsed from the dc:subject element) as an array.
|
19
19
|
def categories
|
20
20
|
return [] if @item.dc_subjects.empty?
|
21
|
-
@item.dc_subjects.collect{|c| c.content}
|
21
|
+
@item.dc_subjects.collect{|c| c.content}.reject{|c| c == '' || c.match(/^\s+$/)}
|
22
22
|
end
|
23
23
|
|
24
24
|
# The category list as a string, joined with a comma.
|
@@ -33,7 +33,7 @@ module FeedAbstract
|
|
33
33
|
|
34
34
|
# The author list (a merge of the RSS author and dc:creator elements) as an array.
|
35
35
|
def authors
|
36
|
-
[@item.author, @item.dc_creators.collect{|c| c.content}].flatten.uniq.compact
|
36
|
+
[@item.author, @item.dc_creators.collect{|c| c.content}].flatten.uniq.compact.reject{|au| au == '' || au.match(/^\s+$/)}
|
37
37
|
end
|
38
38
|
|
39
39
|
# The author list as a string, joined with a comma.
|
@@ -43,7 +43,7 @@ module FeedAbstract
|
|
43
43
|
|
44
44
|
# The contributors (parsed from the dc:contributor element) as an array.
|
45
45
|
def contributors
|
46
|
-
(@item.dc_contributors.empty?) ? [] : @item.dc_contributors
|
46
|
+
(@item.dc_contributors.empty?) ? [] : @item.dc_contributors.reject{|au| au == '' || au.match(/^\s+$/)}
|
47
47
|
end
|
48
48
|
|
49
49
|
# The contributor list as a string joined with a comma.
|
@@ -54,7 +54,7 @@ module FeedAbstract
|
|
54
54
|
# The category list as an array.
|
55
55
|
def categories
|
56
56
|
return [] if @item.categories.empty?
|
57
|
-
@item.categories.collect{|c| c.content}
|
57
|
+
@item.categories.collect{|c| c.content}.reject{|c| c == '' || c.match(/^\s+$/)}
|
58
58
|
end
|
59
59
|
|
60
60
|
# The category list as a string, joined with a comma.
|
data/lib/feed-abstract/mixins.rb
CHANGED
@@ -38,7 +38,7 @@ module FeedAbstractMixins
|
|
38
38
|
# An array of author names
|
39
39
|
def authors
|
40
40
|
return [] if @source.authors.empty?
|
41
|
-
@source.authors.collect{|au| au.name.content}
|
41
|
+
@source.authors.collect{|au| au.name.content}.reject{|au| au == '' || au.match(/^\s+$/)}
|
42
42
|
end
|
43
43
|
|
44
44
|
# The authors list as a string, joined with a comma.
|
@@ -50,7 +50,7 @@ module FeedAbstractMixins
|
|
50
50
|
# The categories list as an array.
|
51
51
|
def categories
|
52
52
|
return [] if @source.categories.empty?
|
53
|
-
@source.categories.collect{|c| c.term}
|
53
|
+
@source.categories.collect{|c| c.term}.reject{|c| c == '' || c.match(/^\s+$/)}
|
54
54
|
end
|
55
55
|
|
56
56
|
# The categories list as a string joined with a comma.
|
@@ -17,6 +17,7 @@ module FeedAbstract
|
|
17
17
|
it { @delicious.channel.should respond_to att}
|
18
18
|
it { @zotero.channel.should respond_to att}
|
19
19
|
it { @feedburner.channel.should respond_to att}
|
20
|
+
it { @pyblosxom.channel.should respond_to att}
|
20
21
|
|
21
22
|
it { @docatom.channel.send(att).should_not == false}
|
22
23
|
it { @kpgatom.channel.send(att).should_not == false}
|
@@ -26,6 +27,7 @@ module FeedAbstract
|
|
26
27
|
it { @delicious.channel.send(att).should_not == false}
|
27
28
|
it { @zotero.channel.send(att).should_not == false}
|
28
29
|
it { @feedburner.channel.send(att).should_not == false}
|
30
|
+
it { @pyblosxom.channel.send(att).should_not == false}
|
29
31
|
end
|
30
32
|
|
31
33
|
it "should have the correct title" do
|
@@ -37,6 +39,7 @@ module FeedAbstract
|
|
37
39
|
@delicious.channel.title.should == 'Delicious/djcp'
|
38
40
|
@zotero.channel.title.should == 'Zotero / PROS Paper Group / Items'
|
39
41
|
@feedburner.channel.title.should == 'CNN.com'
|
42
|
+
@pyblosxom.channel.title.should == 'Copyrighteous'
|
40
43
|
end
|
41
44
|
|
42
45
|
it "should have the correct subtitle and description" do
|
@@ -63,6 +66,9 @@ module FeedAbstract
|
|
63
66
|
|
64
67
|
@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
68
|
@feedburner.channel.subtitle.should == 'CNN.com delivers up-to-the-minute news and information on the latest top stories, weather, entertainment, politics and more.'
|
69
|
+
|
70
|
+
@pyblosxom.channel.description.should == "\n\n"
|
71
|
+
@pyblosxom.channel.subtitle.should == "\n\n"
|
66
72
|
end
|
67
73
|
|
68
74
|
it "should have the correct link" do
|
@@ -74,6 +80,7 @@ module FeedAbstract
|
|
74
80
|
@delicious.channel.link.should == 'http://www.delicious.com/djcp'
|
75
81
|
@zotero.channel.link.should == 'https://api.zotero.org/groups/52650/items'
|
76
82
|
@feedburner.channel.link.should == 'http://www.cnn.com/?eref=rss_topstories'
|
83
|
+
@pyblosxom.channel.link.should == 'http://mako.cc/copyrighteous'
|
77
84
|
end
|
78
85
|
|
79
86
|
it "should have the correct generator" do
|
@@ -85,6 +92,7 @@ module FeedAbstract
|
|
85
92
|
@delicious.channel.generator.should == 'Delicious'
|
86
93
|
@zotero.channel.generator.should == 'Zotero'
|
87
94
|
@feedburner.channel.generator.should == ''
|
95
|
+
@pyblosxom.channel.generator.should == "\nPyBlosxom http://pyblosxom.sourceforge.net/ 1.5rc2 20100803\n"
|
88
96
|
end
|
89
97
|
|
90
98
|
it "should have the correct language" do
|
@@ -96,6 +104,7 @@ module FeedAbstract
|
|
96
104
|
@delicious.channel.language.should == ''
|
97
105
|
@zotero.channel.language.should == ''
|
98
106
|
@feedburner.channel.language.should == 'en-us'
|
107
|
+
@pyblosxom.channel.language.should == 'en'
|
99
108
|
end
|
100
109
|
|
101
110
|
it "should have the correct authors" do
|
@@ -107,6 +116,7 @@ module FeedAbstract
|
|
107
116
|
@delicious.channel.authors.should == []
|
108
117
|
@zotero.channel.authors.should == []
|
109
118
|
@feedburner.channel.authors.should == []
|
119
|
+
@pyblosxom.channel.authors.should == ['Benjamin Mako Hill']
|
110
120
|
|
111
121
|
@docatom.channel.author.should == 'Doc Searls'
|
112
122
|
@kpgatom.channel.author.should == 'Nick Pappas'
|
@@ -116,6 +126,7 @@ module FeedAbstract
|
|
116
126
|
@delicious.channel.author.should == ''
|
117
127
|
@zotero.channel.author.should == ''
|
118
128
|
@feedburner.channel.author.should == ''
|
129
|
+
@pyblosxom.channel.author.should == 'Benjamin Mako Hill'
|
119
130
|
|
120
131
|
end
|
121
132
|
|
@@ -128,15 +139,17 @@ module FeedAbstract
|
|
128
139
|
@delicious.channel.categories.should == []
|
129
140
|
@zotero.channel.categories.should == []
|
130
141
|
@feedburner.channel.categories.should == []
|
142
|
+
@pyblosxom.channel.categories.should == []
|
131
143
|
|
132
144
|
@docatom.channel.category.should == ''
|
133
145
|
@kpgatom.channel.category.should == 'photos'
|
134
|
-
@djcprss2.channel.category.should == 'Tech, Open Source'
|
146
|
+
@djcprss2.channel.category.should == 'Tech, Open Source, oa.africa, oa.test'
|
135
147
|
@djcprss92.channel.category.should == ''
|
136
148
|
@oa.channel.category.should == 'oa.africa, oa.test'
|
137
149
|
@delicious.channel.category.should == ''
|
138
150
|
@zotero.channel.category.should == ''
|
139
151
|
@feedburner.channel.category.should == ''
|
152
|
+
@pyblosxom.channel.category.should == ''
|
140
153
|
end
|
141
154
|
|
142
155
|
it "should have the correct icon" do
|
@@ -148,6 +161,7 @@ module FeedAbstract
|
|
148
161
|
@delicious.channel.icon.should == ''
|
149
162
|
@zotero.channel.icon.should == ''
|
150
163
|
@feedburner.channel.icon.should == 'http://i2.cdn.turner.com/cnn/.element/img/1.0/logo/cnn.logo.rss.gif'
|
164
|
+
@pyblosxom.channel.icon.should == ''
|
151
165
|
end
|
152
166
|
|
153
167
|
it "should have the correct logo" do
|
@@ -159,6 +173,7 @@ module FeedAbstract
|
|
159
173
|
@delicious.channel.logo.should == ''
|
160
174
|
@zotero.channel.logo.should == ''
|
161
175
|
@feedburner.channel.logo.should == 'http://i2.cdn.turner.com/cnn/.element/img/1.0/logo/cnn.logo.rss.gif'
|
176
|
+
@pyblosxom.channel.logo.should == ''
|
162
177
|
end
|
163
178
|
|
164
179
|
it "should have the correct rights" do
|
@@ -170,6 +185,7 @@ module FeedAbstract
|
|
170
185
|
@delicious.channel.rights.should == ''
|
171
186
|
@zotero.channel.rights.should == ''
|
172
187
|
@feedburner.channel.rights.should == ' 2011 Cable News Network LP, LLLP.'
|
188
|
+
@pyblosxom.channel.rights.should == 'Creative Commons Attribution-ShareAlike'
|
173
189
|
end
|
174
190
|
|
175
191
|
it "should have the correct updated value" do
|
@@ -181,6 +197,7 @@ module FeedAbstract
|
|
181
197
|
@delicious.channel.updated.should == ''
|
182
198
|
@zotero.channel.updated.should == Time.parse('2011-09-02T17:16:11Z')
|
183
199
|
@feedburner.channel.updated.should == Time.parse('Sat, 03 Sep 2011 16:14:16 EDT')
|
200
|
+
@pyblosxom.channel.updated.should == Time.parse('2011-09-15T05:21:00Z')
|
184
201
|
end
|
185
202
|
|
186
203
|
it "should have the correct guid" do
|
@@ -192,6 +209,7 @@ module FeedAbstract
|
|
192
209
|
@delicious.channel.guid.should == 'http://www.delicious.com/djcp'
|
193
210
|
@zotero.channel.guid.should == 'http://zotero.org/groups/52650/items'
|
194
211
|
@feedburner.channel.guid.should == 'http://www.cnn.com/?eref=rss_topstories'
|
212
|
+
@pyblosxom.channel.guid.should == 'http://mako.cc/copyrighteous/'
|
195
213
|
end
|
196
214
|
end
|
197
215
|
end
|
@@ -30,6 +30,8 @@ module FeedAbstract
|
|
30
30
|
@deliciousitem.title.should == 'aspic and other delights'
|
31
31
|
@zoteroitem.title.should == 'An experimental application of the Delphi method to the use of experts'
|
32
32
|
@feedburneritem.title.should == 'Did Libya help CIA with renditions of terror suspects?'
|
33
|
+
@pyblosxomitem.title.should == "Anxiety\n"
|
34
|
+
|
33
35
|
end
|
34
36
|
|
35
37
|
it "should have the correct summary" do
|
@@ -44,6 +46,8 @@ module FeedAbstract
|
|
44
46
|
@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
47
|
<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
48
|
</div><img src="http://feeds.feedburner.com/~r/rss/cnn_topstories/~4/sV5N-C76mOM" height="1" width="1"/>|
|
49
|
+
|
50
|
+
@pyblosxomitem.summary.should == ""
|
47
51
|
end
|
48
52
|
|
49
53
|
it "should have the correct content" do
|
@@ -93,6 +97,7 @@ module FeedAbstract
|
|
93
97
|
</table>
|
94
98
|
</div>|
|
95
99
|
@feedburneritem.content.should == ''
|
100
|
+
@pyblosxomitem.content.should == %Q|<div><a href='http://www.flickr.com/photos/nffcnnr/401047557/' target='_blank'><img src='http://farm1.static.flickr.com/137/401047557_1dda26e16f.jpg' width=350 alt='MailBoxes by nffcnnr, on Flickr' title='MailBoxes by nffcnnr, on Flickr' border='0'/></a><br/><a href='http://creativecommons.org/licenses/by/2.0/' target='_blank'><img src='http://i.creativecommons.org/l/by/2.0/80x15.png' alt='Creative Commons Attribution 2.0 Generic License' title='Creative Commons Attribution 2.0 Generic License' border='0' align='left'></a> by <a href='http://www.flickr.com/people/nffcnnr/' target='_blank'> nffcnnr</a><a href='http://www.imagecodr.org/' target='_blank'> </a></div><p>I am haunted by the nagging fear that I have mailboxes, tucked into a\ndark corner of an office somewhere, and perhaps even full of checks\nand important documents, that I don't know exist.</p>\n|
|
96
101
|
end
|
97
102
|
|
98
103
|
it "should have the correct link" do
|
@@ -103,6 +108,7 @@ module FeedAbstract
|
|
103
108
|
@deliciousitem.link.should == 'http://aspicandotherdelights.tumblr.com/'
|
104
109
|
@zoteroitem.link.should == 'https://api.zotero.org/groups/52650/items/FHDJ5PXZ'
|
105
110
|
@feedburneritem.link.should == 'http://rss.cnn.com/~r/rss/cnn_topstories/~3/sV5N-C76mOM/index.html'
|
111
|
+
@pyblosxomitem.link.should == 'http://mako.cc/copyrighteous/20110913-00'
|
106
112
|
end
|
107
113
|
|
108
114
|
it "should have the correct author" do
|
@@ -113,6 +119,7 @@ module FeedAbstract
|
|
113
119
|
@deliciousitem.author.should == 'djcp'
|
114
120
|
@zoteroitem.author.should == 'ingle.atul'
|
115
121
|
@feedburneritem.author.should == ''
|
122
|
+
@pyblosxomitem.author.should == ''
|
116
123
|
end
|
117
124
|
|
118
125
|
it "should have the correct authors" do
|
@@ -123,6 +130,7 @@ module FeedAbstract
|
|
123
130
|
@deliciousitem.authors.should == ['djcp']
|
124
131
|
@zoteroitem.authors.should == ['ingle.atul']
|
125
132
|
@feedburneritem.authors.should == []
|
133
|
+
@pyblosxomitem.authors.should == []
|
126
134
|
end
|
127
135
|
|
128
136
|
it "should have the correct contributor" do
|
@@ -133,6 +141,7 @@ module FeedAbstract
|
|
133
141
|
@deliciousitem.contributor.should == ''
|
134
142
|
@zoteroitem.contributor.should == ''
|
135
143
|
@feedburneritem.contributor.should == ''
|
144
|
+
@pyblosxomitem.contributor.should == ''
|
136
145
|
end
|
137
146
|
|
138
147
|
it "should have the correct contributors" do
|
@@ -143,6 +152,7 @@ module FeedAbstract
|
|
143
152
|
@deliciousitem.contributors.should == []
|
144
153
|
@zoteroitem.contributors.should == []
|
145
154
|
@feedburneritem.contributors.should == []
|
155
|
+
@pyblosxomitem.contributors.should == []
|
146
156
|
end
|
147
157
|
|
148
158
|
it "should have the correct category" do
|
@@ -153,6 +163,7 @@ module FeedAbstract
|
|
153
163
|
@deliciousitem.category.should == 'cooking, oddness'
|
154
164
|
@zoteroitem.category.should == ''
|
155
165
|
@feedburneritem.category.should == ''
|
166
|
+
@pyblosxomitem.category.should == ''
|
156
167
|
end
|
157
168
|
|
158
169
|
it "should have the correct categories" do
|
@@ -163,6 +174,7 @@ module FeedAbstract
|
|
163
174
|
@deliciousitem.categories.should == ['cooking', 'oddness']
|
164
175
|
@zoteroitem.categories.should == []
|
165
176
|
@feedburneritem.categories.should == []
|
177
|
+
@pyblosxomitem.categories.should == []
|
166
178
|
end
|
167
179
|
|
168
180
|
it "should have the correct rights" do
|
@@ -173,6 +185,7 @@ module FeedAbstract
|
|
173
185
|
@deliciousitem.rights.should == ''
|
174
186
|
@zoteroitem.rights.should == ''
|
175
187
|
@feedburneritem.rights.should == ''
|
188
|
+
@pyblosxomitem.rights.should == ''
|
176
189
|
end
|
177
190
|
|
178
191
|
it "should have been updated at the correct time" do
|
@@ -183,6 +196,7 @@ module FeedAbstract
|
|
183
196
|
@deliciousitem.updated.should == Time.parse('Fri, 19 Aug 2011 00:56:26 +0000')
|
184
197
|
@zoteroitem.updated.should == Time.parse('2011-09-02T17:16:11Z')
|
185
198
|
@feedburneritem.updated.should == Time.parse('Sat, 03 Sep 2011 16:11:39 EDT')
|
199
|
+
@pyblosxomitem.updated.should == Time.parse('2011-09-15T05:21:00Z')
|
186
200
|
end
|
187
201
|
|
188
202
|
it "should have been published at the proper time" do
|
@@ -193,6 +207,7 @@ module FeedAbstract
|
|
193
207
|
@deliciousitem.published.should == Time.parse('Fri, 19 Aug 2011 00:56:26 +0000')
|
194
208
|
@zoteroitem.published.should == Time.parse('2011-09-02T17:14:22Z')
|
195
209
|
@feedburneritem.published.should == Time.parse('Sat, 03 Sep 2011 16:11:39 EDT')
|
210
|
+
@pyblosxomitem.published.should == Time.parse('2011-09-15T05:21:00Z')
|
196
211
|
end
|
197
212
|
|
198
213
|
it "should have the proper guid" do
|
@@ -203,6 +218,7 @@ module FeedAbstract
|
|
203
218
|
@deliciousitem.guid.should == 'http://www.delicious.com/url/6e0504ca698232809a0b5065e8b83031#djcp'
|
204
219
|
@zoteroitem.guid.should == 'http://zotero.org/groups/pros_paper/items/FHDJ5PXZ'
|
205
220
|
@feedburneritem.guid.should == 'http://www.cnn.com/2011/WORLD/africa/09/03/libya.west.spies/index.html?eref=rss_topstories'
|
221
|
+
@pyblosxomitem.guid.should == 'http://mako.cc/copyrighteous/2011/09/15/20110913-00'
|
206
222
|
end
|
207
223
|
|
208
224
|
end
|
data/spec/feed_abstract_spec.rb
CHANGED
@@ -15,6 +15,7 @@ module FeedAbstract
|
|
15
15
|
it "should recognize atom feeds properly" do
|
16
16
|
@docatom.channel.class.should == Channel::Atom
|
17
17
|
@kpgatom.channel.class.should == Channel::Atom
|
18
|
+
@pyblosxom.channel.class.should == Channel::Atom
|
18
19
|
end
|
19
20
|
|
20
21
|
it "should recognize rss feeds properly" do
|
data/spec/spec_helper.rb
CHANGED
@@ -12,8 +12,9 @@ def instantiate_feeds
|
|
12
12
|
@delicious = FeedAbstract::Feed.new(File.open('spec/test_data/djcp_delicious.rss'))
|
13
13
|
@zotero = FeedAbstract::Feed.new(File.open('spec/test_data/zotero.rss'))
|
14
14
|
@feedburner = FeedAbstract::Feed.new(File.open('spec/test_data/feedburner.rss'))
|
15
|
+
@pyblosxom = FeedAbstract::Feed.new(File.open('spec/test_data/pyblosxom.atom'))
|
15
16
|
|
16
|
-
@all_feeds = [@docatom, @kpgatom, @djcprss2, @djcprss92, @oa, @delicious, @zotero, @feedburner]
|
17
|
+
@all_feeds = [@docatom, @kpgatom, @djcprss2, @djcprss92, @oa, @delicious, @zotero, @feedburner,@pyblosxom]
|
17
18
|
end
|
18
19
|
|
19
20
|
def instantiate_example_items
|
@@ -24,4 +25,5 @@ def instantiate_example_items
|
|
24
25
|
@deliciousitem = @delicious.items.first
|
25
26
|
@zoteroitem = @zotero.items.first
|
26
27
|
@feedburneritem = @feedburner.items.first
|
28
|
+
@pyblosxomitem = @pyblosxom.items.first
|
27
29
|
end
|