kete-feedzirra 0.0.8.1 → 0.0.16.1
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/README.textile +11 -2
- data/Rakefile +3 -0
- data/lib/feedzirra.rb +10 -10
- data/lib/feedzirra/feed.rb +45 -42
- data/lib/feedzirra/parser/atom.rb +47 -0
- data/lib/feedzirra/parser/atom_entry.rb +51 -0
- data/lib/feedzirra/parser/atom_feed_burner.rb +27 -0
- data/lib/feedzirra/parser/atom_feed_burner_entry.rb +35 -0
- data/lib/feedzirra/parser/itunes_rss.rb +50 -0
- data/lib/feedzirra/parser/itunes_rss_item.rb +31 -0
- data/lib/feedzirra/parser/itunes_rss_owner.rb +12 -0
- data/lib/feedzirra/parser/rss.rb +40 -0
- data/lib/feedzirra/parser/rss_entry.rb +55 -0
- data/spec/feedzirra/feed_spec.rb +30 -27
- data/spec/feedzirra/feed_utilities_spec.rb +9 -9
- data/spec/feedzirra/{atom_entry_spec.rb → parser/atom_entry_spec.rb} +7 -3
- data/spec/feedzirra/{atom_feed_burner_entry_spec.rb → parser/atom_feed_burner_entry_spec.rb} +4 -4
- data/spec/feedzirra/{atom_feed_burner_spec.rb → parser/atom_feed_burner_spec.rb} +6 -6
- data/spec/feedzirra/{atom_spec.rb → parser/atom_spec.rb} +16 -8
- data/spec/feedzirra/{itunes_rss_item_spec.rb → parser/itunes_rss_item_spec.rb} +3 -3
- data/spec/feedzirra/{itunes_rss_owner_spec.rb → parser/itunes_rss_owner_spec.rb} +3 -3
- data/spec/feedzirra/{itunes_rss_spec.rb → parser/itunes_rss_spec.rb} +5 -5
- data/spec/feedzirra/{rss_entry_spec.rb → parser/rss_entry_spec.rb} +14 -14
- data/spec/feedzirra/{rss_spec.rb → parser/rss_spec.rb} +17 -18
- metadata +22 -21
- data/lib/feedzirra/atom.rb +0 -35
- data/lib/feedzirra/atom_entry.rb +0 -41
- data/lib/feedzirra/atom_feed_burner.rb +0 -22
- data/lib/feedzirra/atom_feed_burner_entry.rb +0 -30
- data/lib/feedzirra/itunes_rss.rb +0 -46
- data/lib/feedzirra/itunes_rss_item.rb +0 -28
- data/lib/feedzirra/itunes_rss_owner.rb +0 -8
- data/lib/feedzirra/rss.rb +0 -36
- data/lib/feedzirra/rss_entry.rb +0 -48
@@ -0,0 +1,31 @@
|
|
1
|
+
module Feedzirra
|
2
|
+
|
3
|
+
module Parser
|
4
|
+
# iTunes extensions to the standard RSS2.0 item
|
5
|
+
# Source: http://www.apple.com/itunes/whatson/podcasts/specs.html
|
6
|
+
class ITunesRSSItem
|
7
|
+
include SAXMachine
|
8
|
+
include FeedUtilities
|
9
|
+
element :author
|
10
|
+
element :guid
|
11
|
+
element :title
|
12
|
+
element :link, :as => :url
|
13
|
+
element :description, :as => :summary
|
14
|
+
element :pubDate, :as => :published
|
15
|
+
|
16
|
+
# If author is not present use author tag on the item
|
17
|
+
element :"itunes:author", :as => :itunes_author
|
18
|
+
element :"itunes:block", :as => :itunes_block
|
19
|
+
element :"itunes:duration", :as => :itunes_duration
|
20
|
+
element :"itunes:explicit", :as => :itunes_explicit
|
21
|
+
element :"itunes:keywords", :as => :itunes_keywords
|
22
|
+
element :"itunes:subtitle", :as => :itunes_subtitle
|
23
|
+
# If summary is not present, use the description tag
|
24
|
+
element :"itunes:summary", :as => :itunes_summary
|
25
|
+
element :enclosure, :value => :length, :as => :enclosure_length
|
26
|
+
element :enclosure, :value => :type, :as => :enclosure_type
|
27
|
+
element :enclosure, :value => :url, :as => :enclosure_url
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Feedzirra
|
2
|
+
|
3
|
+
module Parser
|
4
|
+
# == Summary
|
5
|
+
# Parser for dealing with RSS feeds.
|
6
|
+
#
|
7
|
+
# == Attributes
|
8
|
+
# * prev_page
|
9
|
+
# * next_page
|
10
|
+
# * lat_page
|
11
|
+
# * title
|
12
|
+
# * feed_url
|
13
|
+
# * url
|
14
|
+
# * related
|
15
|
+
# * description
|
16
|
+
# * language
|
17
|
+
# * entries
|
18
|
+
class RSS
|
19
|
+
include SAXMachine
|
20
|
+
include FeedUtilities
|
21
|
+
element :"atom:link", :as => :prev_page, :value => :href, :with => {:rel => 'prev'}
|
22
|
+
element :"atom:link", :as => :next_page, :value => :href, :with => {:rel => 'next'}
|
23
|
+
element :"atom:link", :as => :last_page, :value => :href, :with => {:rel => 'last'}
|
24
|
+
element :title
|
25
|
+
element :link, :as => :url
|
26
|
+
elements :link, :as => :related, :value => :href, :with => {:rel => "related"}
|
27
|
+
element :description
|
28
|
+
element :language
|
29
|
+
elements :item, :as => :entries, :class => RSSEntry
|
30
|
+
|
31
|
+
attr_accessor :feed_url
|
32
|
+
|
33
|
+
def self.able_to_parse?(xml) #:nodoc:
|
34
|
+
xml =~ /\<rss|rdf/
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Feedzirra
|
2
|
+
|
3
|
+
module Parser
|
4
|
+
# == Summary
|
5
|
+
# Parser for dealing with RDF feed entries.
|
6
|
+
#
|
7
|
+
# == Attributes
|
8
|
+
# * title
|
9
|
+
# * url
|
10
|
+
# * related
|
11
|
+
# * author
|
12
|
+
# * content
|
13
|
+
# * summary
|
14
|
+
# * published
|
15
|
+
# * updated
|
16
|
+
# * categories
|
17
|
+
# * media_content
|
18
|
+
# * media_description
|
19
|
+
# * media_thumbnail
|
20
|
+
# * enclosure
|
21
|
+
class RSSEntry
|
22
|
+
include SAXMachine
|
23
|
+
include FeedEntryUtilities
|
24
|
+
element :title
|
25
|
+
element :link, :as => :url
|
26
|
+
elements :link, :as => :related, :value => :href, :with => {:rel => "related"}
|
27
|
+
|
28
|
+
element :author
|
29
|
+
element :"dc:creator", :as => :author
|
30
|
+
element :author, :as => :author
|
31
|
+
element :"content:encoded", :as => :content
|
32
|
+
element :description, :as => :summary
|
33
|
+
|
34
|
+
element :pubDate, :as => :published
|
35
|
+
element :pubdate, :as => :published
|
36
|
+
element :"dc:date", :as => :published
|
37
|
+
element :"dc:Date", :as => :published
|
38
|
+
element :"dcterms:created", :as => :published
|
39
|
+
|
40
|
+
|
41
|
+
element :"dcterms:modified", :as => :updated
|
42
|
+
element :issued, :as => :published
|
43
|
+
elements :category, :as => :categories
|
44
|
+
|
45
|
+
element :"media:content", :as => :media_content, :value => :url
|
46
|
+
element :"media:description", :as => :media_description
|
47
|
+
element :"media:thumbnail", :as => :media_thumbnail, :value => :url
|
48
|
+
element :enclosure, :value => :url
|
49
|
+
|
50
|
+
element :guid, :as => :id
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
data/spec/feedzirra/feed_spec.rb
CHANGED
@@ -11,11 +11,11 @@ describe Feedzirra::Feed do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should parse the added element out of Atom Feedburner feeds" do
|
14
|
-
Feedzirra::AtomEntry.new.should respond_to(:comment_rss)
|
14
|
+
Feedzirra::Parser::AtomEntry.new.should respond_to(:comment_rss)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should parse the added element out of RSS feeds" do
|
18
|
-
Feedzirra::RSSEntry.new.should respond_to(:comment_rss)
|
18
|
+
Feedzirra::Parser::RSSEntry.new.should respond_to(:comment_rss)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -49,11 +49,14 @@ describe Feedzirra::Feed do
|
|
49
49
|
feed.entries.size.should == 5
|
50
50
|
end
|
51
51
|
|
52
|
-
it "should parse an itunes feed" do
|
52
|
+
it "should parse an itunes feed as a standard RSS feed" do
|
53
53
|
feed = Feedzirra::Feed.parse(sample_itunes_feed)
|
54
54
|
feed.title.should == "All About Everything"
|
55
|
-
feed.entries.first.published.
|
56
|
-
|
55
|
+
feed.entries.first.published.should == Time.parse("Wed, 15 Jun 2005 19:00:00 GMT")
|
56
|
+
|
57
|
+
# Since the commit 621957879, iTunes feeds will be parsed as standard RSS, so this
|
58
|
+
# entry should now not have a method for itunes_author.
|
59
|
+
feed.entries.first.should_not respond_to(:itunes_author)
|
57
60
|
feed.entries.size.should == 3
|
58
61
|
end
|
59
62
|
end
|
@@ -75,28 +78,28 @@ describe Feedzirra::Feed do
|
|
75
78
|
end
|
76
79
|
|
77
80
|
describe "#determine_feed_parser_for_xml" do
|
78
|
-
it "should return the Feedzirra::Atom class for an atom feed" do
|
79
|
-
Feedzirra::Feed.determine_feed_parser_for_xml(sample_atom_feed).should == Feedzirra::Atom
|
81
|
+
it "should return the Feedzirra::Parser::Atom class for an atom feed" do
|
82
|
+
Feedzirra::Feed.determine_feed_parser_for_xml(sample_atom_feed).should == Feedzirra::Parser::Atom
|
80
83
|
end
|
81
84
|
|
82
|
-
it "should return the Feedzirra::AtomFeedBurner class for an atom feedburner feed" do
|
83
|
-
Feedzirra::Feed.determine_feed_parser_for_xml(sample_feedburner_atom_feed).should == Feedzirra::AtomFeedBurner
|
85
|
+
it "should return the Feedzirra::Parser::AtomFeedBurner class for an atom feedburner feed" do
|
86
|
+
Feedzirra::Feed.determine_feed_parser_for_xml(sample_feedburner_atom_feed).should == Feedzirra::Parser::AtomFeedBurner
|
84
87
|
end
|
85
88
|
|
86
|
-
it "should return the Feedzirra::RSS class for an rdf/rss 1.0 feed" do
|
87
|
-
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rdf_feed).should == Feedzirra::RSS
|
89
|
+
it "should return the Feedzirra::Parser::RSS class for an rdf/rss 1.0 feed" do
|
90
|
+
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rdf_feed).should == Feedzirra::Parser::RSS
|
88
91
|
end
|
89
92
|
|
90
|
-
it "should return the Feedzirra::RSS class for an rss feedburner feed" do
|
91
|
-
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rss_feed_burner_feed).should == Feedzirra::RSS
|
93
|
+
it "should return the Feedzirra::Parser::RSS class for an rss feedburner feed" do
|
94
|
+
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rss_feed_burner_feed).should == Feedzirra::Parser::RSS
|
92
95
|
end
|
93
96
|
|
94
|
-
it "should return the Feedzirra::RSS object for an rss 2.0 feed" do
|
95
|
-
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rss_feed).should == Feedzirra::RSS
|
97
|
+
it "should return the Feedzirra::Parser::RSS object for an rss 2.0 feed" do
|
98
|
+
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rss_feed).should == Feedzirra::Parser::RSS
|
96
99
|
end
|
97
100
|
|
98
|
-
it "should return
|
99
|
-
Feedzirra::Feed.determine_feed_parser_for_xml(sample_itunes_feed).should == Feedzirra::
|
101
|
+
it "should return a Feedzirra::Parser::RSS object for an itunes feed" do
|
102
|
+
Feedzirra::Feed.determine_feed_parser_for_xml(sample_itunes_feed).should == Feedzirra::Parser::RSS
|
100
103
|
end
|
101
104
|
|
102
105
|
end
|
@@ -104,7 +107,7 @@ describe Feedzirra::Feed do
|
|
104
107
|
describe "when adding feed types" do
|
105
108
|
it "should prioritize added types over the built in ones" do
|
106
109
|
feed_text = "Atom asdf"
|
107
|
-
Feedzirra::Atom.should be_able_to_parse(feed_text)
|
110
|
+
Feedzirra::Parser::Atom.should be_able_to_parse(feed_text)
|
108
111
|
new_feed_type = Class.new do
|
109
112
|
def self.able_to_parse?(val)
|
110
113
|
true
|
@@ -193,7 +196,7 @@ describe Feedzirra::Feed do
|
|
193
196
|
end
|
194
197
|
|
195
198
|
it 'should set accepted encodings' do
|
196
|
-
Feedzirra::Feed.fetch_raw(@paul_feed[:url])
|
199
|
+
Feedzirra::Feed.fetch_raw(@paul_feed[:url], :compress => true)
|
197
200
|
@curl.headers["Accept-encoding"].should == 'gzip, deflate'
|
198
201
|
end
|
199
202
|
|
@@ -265,7 +268,7 @@ describe Feedzirra::Feed do
|
|
265
268
|
end
|
266
269
|
|
267
270
|
it 'should set accepted encodings' do
|
268
|
-
Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
271
|
+
Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {:compress => true})
|
269
272
|
@easy_curl.headers["Accept-encoding"].should == 'gzip, deflate'
|
270
273
|
end
|
271
274
|
|
@@ -278,8 +281,8 @@ describe Feedzirra::Feed do
|
|
278
281
|
before(:each) do
|
279
282
|
@feed = mock('feed', :feed_url= => true, :etag= => true, :last_modified= => true)
|
280
283
|
Feedzirra::Feed.stub!(:decode_content).and_return(@paul_feed[:xml])
|
281
|
-
Feedzirra::Feed.stub!(:determine_feed_parser_for_xml).and_return(Feedzirra::AtomFeedBurner)
|
282
|
-
Feedzirra::AtomFeedBurner.stub!(:parse).and_return(@feed)
|
284
|
+
Feedzirra::Feed.stub!(:determine_feed_parser_for_xml).and_return(Feedzirra::Parser::AtomFeedBurner)
|
285
|
+
Feedzirra::Parser::AtomFeedBurner.stub!(:parse).and_return(@feed)
|
283
286
|
Feedzirra::Feed.stub!(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
|
284
287
|
Feedzirra::Feed.stub!(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
|
285
288
|
end
|
@@ -291,13 +294,13 @@ describe Feedzirra::Feed do
|
|
291
294
|
end
|
292
295
|
|
293
296
|
it 'should determine the xml parser class' do
|
294
|
-
Feedzirra::Feed.should_receive(:determine_feed_parser_for_xml).with(@paul_feed[:xml]).and_return(Feedzirra::AtomFeedBurner)
|
297
|
+
Feedzirra::Feed.should_receive(:determine_feed_parser_for_xml).with(@paul_feed[:xml]).and_return(Feedzirra::Parser::AtomFeedBurner)
|
295
298
|
Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
296
299
|
@easy_curl.on_success.call(@easy_curl)
|
297
300
|
end
|
298
301
|
|
299
302
|
it 'should parse the xml' do
|
300
|
-
Feedzirra::AtomFeedBurner.should_receive(:parse).with(@paul_feed[:xml]).and_return(@feed)
|
303
|
+
Feedzirra::Parser::AtomFeedBurner.should_receive(:parse).with(@paul_feed[:xml]).and_return(@feed)
|
301
304
|
Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
302
305
|
@easy_curl.on_success.call(@easy_curl)
|
303
306
|
end
|
@@ -415,8 +418,8 @@ describe Feedzirra::Feed do
|
|
415
418
|
@new_feed = @feed.clone
|
416
419
|
@feed.stub!(:update_from_feed)
|
417
420
|
Feedzirra::Feed.stub!(:decode_content).and_return(@paul_feed[:xml])
|
418
|
-
Feedzirra::Feed.stub!(:determine_feed_parser_for_xml).and_return(Feedzirra::AtomFeedBurner)
|
419
|
-
Feedzirra::AtomFeedBurner.stub!(:parse).and_return(@new_feed)
|
421
|
+
Feedzirra::Feed.stub!(:determine_feed_parser_for_xml).and_return(Feedzirra::Parser::AtomFeedBurner)
|
422
|
+
Feedzirra::Parser::AtomFeedBurner.stub!(:parse).and_return(@new_feed)
|
420
423
|
Feedzirra::Feed.stub!(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
|
421
424
|
Feedzirra::Feed.stub!(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
|
422
425
|
end
|
@@ -424,7 +427,7 @@ describe Feedzirra::Feed do
|
|
424
427
|
it 'should process the next feed in the queue'
|
425
428
|
|
426
429
|
it 'should parse the updated feed' do
|
427
|
-
Feedzirra::AtomFeedBurner.should_receive(:parse).and_return(@new_feed)
|
430
|
+
Feedzirra::Parser::AtomFeedBurner.should_receive(:parse).and_return(@new_feed)
|
428
431
|
Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
|
429
432
|
@easy_curl.on_success.call(@easy_curl)
|
430
433
|
end
|
@@ -42,19 +42,19 @@ describe Feedzirra::FeedUtilities do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should return a last_modified value from the entry with the most recent published date if the last_modified date hasn't been set" do
|
45
|
-
feed = Feedzirra::Atom.new
|
46
|
-
entry =Feedzirra::AtomEntry.new
|
45
|
+
feed = Feedzirra::Parser::Atom.new
|
46
|
+
entry =Feedzirra::Parser::AtomEntry.new
|
47
47
|
entry.published = Time.now.to_s
|
48
48
|
feed.entries << entry
|
49
49
|
feed.last_modified.should == entry.published
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should not throw an error if one of the entries has published date of nil" do
|
53
|
-
feed = Feedzirra::Atom.new
|
54
|
-
entry = Feedzirra::AtomEntry.new
|
53
|
+
feed = Feedzirra::Parser::Atom.new
|
54
|
+
entry = Feedzirra::Parser::AtomEntry.new
|
55
55
|
entry.published = Time.now.to_s
|
56
56
|
feed.entries << entry
|
57
|
-
feed.entries << Feedzirra::AtomEntry.new
|
57
|
+
feed.entries << Feedzirra::Parser::AtomEntry.new
|
58
58
|
feed.last_modified.should == entry.published
|
59
59
|
end
|
60
60
|
end
|
@@ -64,7 +64,7 @@ describe Feedzirra::FeedUtilities do
|
|
64
64
|
before(:each) do
|
65
65
|
# I'm using the Atom class when I know I should be using a different one. However, this update_from_feed
|
66
66
|
# method would only be called against a feed item.
|
67
|
-
@feed = Feedzirra::Atom.new
|
67
|
+
@feed = Feedzirra::Parser::Atom.new
|
68
68
|
@feed.title = "A title"
|
69
69
|
@feed.url = "http://pauldix.net"
|
70
70
|
@feed.feed_url = "http://feeds.feedburner.com/PaulDixExplainsNothing"
|
@@ -112,16 +112,16 @@ describe Feedzirra::FeedUtilities do
|
|
112
112
|
before(:each) do
|
113
113
|
# I'm using the Atom class when I know I should be using a different one. However, this update_from_feed
|
114
114
|
# method would only be called against a feed item.
|
115
|
-
@feed = Feedzirra::Atom.new
|
115
|
+
@feed = Feedzirra::Parser::Atom.new
|
116
116
|
@feed.title = "A title"
|
117
117
|
@feed.url = "http://pauldix.net"
|
118
118
|
@feed.feed_url = "http://feeds.feedburner.com/PaulDixExplainsNothing"
|
119
119
|
@feed.updated = false
|
120
120
|
@updated_feed = @feed.dup
|
121
|
-
@old_entry = Feedzirra::AtomEntry.new
|
121
|
+
@old_entry = Feedzirra::Parser::AtomEntry.new
|
122
122
|
@old_entry.url = "http://pauldix.net/old.html"
|
123
123
|
@old_entry.published = Time.now.to_s
|
124
|
-
@new_entry = Feedzirra::AtomEntry.new
|
124
|
+
@new_entry = Feedzirra::Parser::AtomEntry.new
|
125
125
|
@new_entry.url = "http://pauldix.net/new.html"
|
126
126
|
@new_entry.published = (Time.now + 10).to_s
|
127
127
|
@feed.entries << @old_entry
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require File.dirname(__FILE__)
|
1
|
+
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
2
2
|
|
3
|
-
describe Feedzirra::AtomEntry do
|
3
|
+
describe Feedzirra::Parser::AtomEntry do
|
4
4
|
before(:each) do
|
5
5
|
# I don't really like doing it this way because these unit test should only rely on AtomEntry,
|
6
6
|
# but this is actually how it should work. You would never just pass entry xml straight to the AtomEnry
|
7
|
-
@entry = Feedzirra::Atom.parse(sample_atom_feed).entries.first
|
7
|
+
@entry = Feedzirra::Parser::Atom.parse(sample_atom_feed).entries.first
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should parse the title" do
|
@@ -15,6 +15,10 @@ describe Feedzirra::AtomEntry do
|
|
15
15
|
@entry.url.should == "http://aws.typepad.com/aws/2009/01/aws-job-architect-designer-position-in-turkey.html"
|
16
16
|
end
|
17
17
|
|
18
|
+
it "should parse the url even when" do
|
19
|
+
Feedzirra::Parser::Atom.parse(load_sample("atom_with_link_tag_for_url_unmarked.xml")).entries.first.url.should == "http://www.innoq.com/blog/phaus/2009/07/ja.html"
|
20
|
+
end
|
21
|
+
|
18
22
|
it "should parse the author" do
|
19
23
|
@entry.author.should == "AWS Editor"
|
20
24
|
end
|
data/spec/feedzirra/{atom_feed_burner_entry_spec.rb → parser/atom_feed_burner_entry_spec.rb}
RENAMED
@@ -1,10 +1,10 @@
|
|
1
|
-
require File.dirname(__FILE__)
|
1
|
+
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
2
2
|
|
3
|
-
describe Feedzirra::AtomFeedBurnerEntry do
|
3
|
+
describe Feedzirra::Parser::AtomFeedBurnerEntry do
|
4
4
|
before(:each) do
|
5
5
|
# I don't really like doing it this way because these unit test should only rely on AtomEntry,
|
6
6
|
# but this is actually how it should work. You would never just pass entry xml straight to the AtomEnry
|
7
|
-
@entry = Feedzirra::AtomFeedBurner.parse(sample_feedburner_atom_feed).entries.first
|
7
|
+
@entry = Feedzirra::Parser::AtomFeedBurner.parse(sample_feedburner_atom_feed).entries.first
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should parse the title" do
|
@@ -12,7 +12,7 @@ describe Feedzirra::AtomFeedBurnerEntry do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should be able to fetch a url via the 'alternate' rel if no origLink exists" do
|
15
|
-
entry = Feedzirra::AtomFeedBurner.parse(File.read("#{File.dirname(__FILE__)}
|
15
|
+
entry = Feedzirra::Parser::AtomFeedBurner.parse(File.read("#{File.dirname(__FILE__)}/../../sample_feeds/PaulDixExplainsNothingAlternate.xml")).entries.first
|
16
16
|
entry.url.should == 'http://feeds.feedburner.com/~r/PaulDixExplainsNothing/~3/519925023/making-a-ruby-c-library-even-faster.html'
|
17
17
|
end
|
18
18
|
|
@@ -1,23 +1,23 @@
|
|
1
|
-
require File.dirname(__FILE__)
|
1
|
+
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
2
2
|
|
3
|
-
describe Feedzirra::AtomFeedBurner do
|
3
|
+
describe Feedzirra::Parser::AtomFeedBurner do
|
4
4
|
describe "#will_parse?" do
|
5
5
|
it "should return true for a feedburner atom feed" do
|
6
|
-
Feedzirra::AtomFeedBurner.should be_able_to_parse(sample_feedburner_atom_feed)
|
6
|
+
Feedzirra::Parser::AtomFeedBurner.should be_able_to_parse(sample_feedburner_atom_feed)
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should return false for an rdf feed" do
|
10
|
-
Feedzirra::AtomFeedBurner.should_not be_able_to_parse(sample_rdf_feed)
|
10
|
+
Feedzirra::Parser::AtomFeedBurner.should_not be_able_to_parse(sample_rdf_feed)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should return false for a regular atom feed" do
|
14
|
-
Feedzirra::AtomFeedBurner.should_not be_able_to_parse(sample_atom_feed)
|
14
|
+
Feedzirra::Parser::AtomFeedBurner.should_not be_able_to_parse(sample_atom_feed)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "parsing" do
|
19
19
|
before(:each) do
|
20
|
-
@feed = Feedzirra::AtomFeedBurner.parse(sample_feedburner_atom_feed)
|
20
|
+
@feed = Feedzirra::Parser::AtomFeedBurner.parse(sample_feedburner_atom_feed)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should parse the title" do
|
@@ -1,19 +1,19 @@
|
|
1
|
-
require File.dirname(__FILE__)
|
1
|
+
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
2
2
|
|
3
|
-
describe Feedzirra::Atom do
|
3
|
+
describe Feedzirra::Parser::Atom do
|
4
4
|
describe "#will_parse?" do
|
5
5
|
it "should return true for an atom feed" do
|
6
|
-
Feedzirra::Atom.should be_able_to_parse(sample_atom_feed)
|
6
|
+
Feedzirra::Parser::Atom.should be_able_to_parse(sample_atom_feed)
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should return false for an rdf feed" do
|
10
|
-
Feedzirra::Atom.should_not be_able_to_parse(sample_rdf_feed)
|
10
|
+
Feedzirra::Parser::Atom.should_not be_able_to_parse(sample_rdf_feed)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe "parsing" do
|
15
15
|
before(:each) do
|
16
|
-
@feed = Feedzirra::Atom.parse(sample_atom_feed)
|
16
|
+
@feed = Feedzirra::Parser::Atom.parse(sample_atom_feed)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should parse the title" do
|
@@ -23,7 +23,7 @@ describe Feedzirra::Atom do
|
|
23
23
|
it "should parse the url" do
|
24
24
|
@feed.url.should == "http://aws.typepad.com/aws/"
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
it "should parse updated" do
|
28
28
|
@feed.updated.should == "2009-01-16T18:21:00Z"
|
29
29
|
end
|
@@ -32,10 +32,18 @@ describe Feedzirra::Atom do
|
|
32
32
|
@feed.subtitle.should == "Amazon Web Services, Products, Tools, and Developer Information..."
|
33
33
|
end
|
34
34
|
|
35
|
+
it "should parse the url even when it doesn't have the type='text/html' attribute" do
|
36
|
+
Feedzirra::Parser::Atom.parse(load_sample("atom_with_link_tag_for_url_unmarked.xml")).url.should == "http://www.innoq.com/planet/"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should parse the feed_url even when it doesn't have the type='application/atom+xml' attribute" do
|
40
|
+
Feedzirra::Parser::Atom.parse(load_sample("atom_with_link_tag_for_url_unmarked.xml")).feed_url.should == "http://www.innoq.com/planet/atom.xml"
|
41
|
+
end
|
42
|
+
|
35
43
|
it "should parse the feed_url" do
|
36
44
|
@feed.feed_url.should == "http://aws.typepad.com/aws/atom.xml"
|
37
45
|
end
|
38
|
-
|
46
|
+
|
39
47
|
it "should parse the prev atom:link" do
|
40
48
|
@feed.prev_page.should == "http://aws.typepad.com/aws/atom.xml?page=1"
|
41
49
|
end
|
@@ -47,7 +55,7 @@ describe Feedzirra::Atom do
|
|
47
55
|
it "should parse the last atom:link" do
|
48
56
|
@feed.last_page.should == "http://aws.typepad.com/aws/atom.xml?page=5"
|
49
57
|
end
|
50
|
-
|
58
|
+
|
51
59
|
it "should parse entries" do
|
52
60
|
@feed.entries.size.should == 10
|
53
61
|
end
|