astro-feedzirra 0.0.8.20090419 → 0.0.12

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.
Files changed (38) hide show
  1. data/README.rdoc +169 -0
  2. data/README.textile +9 -2
  3. data/Rakefile +3 -0
  4. data/lib/feedzirra.rb +11 -10
  5. data/lib/feedzirra/feed.rb +37 -41
  6. data/lib/feedzirra/feed_entry_utilities.rb +6 -0
  7. data/lib/feedzirra/parser/atom.rb +26 -0
  8. data/lib/feedzirra/parser/atom_entry.rb +34 -0
  9. data/lib/feedzirra/parser/atom_feed_burner.rb +27 -0
  10. data/lib/feedzirra/parser/atom_feed_burner_entry.rb +35 -0
  11. data/lib/feedzirra/parser/itunes_rss.rb +50 -0
  12. data/lib/feedzirra/parser/itunes_rss_item.rb +32 -0
  13. data/lib/feedzirra/parser/itunes_rss_owner.rb +12 -0
  14. data/lib/feedzirra/parser/rss.rb +28 -0
  15. data/lib/feedzirra/parser/rss_entry.rb +40 -0
  16. data/lib/feedzirra/push_parser.rb +56 -0
  17. data/spec/feedzirra/feed_spec.rb +40 -32
  18. data/spec/feedzirra/feed_utilities_spec.rb +9 -9
  19. data/spec/feedzirra/{atom_entry_spec.rb → parser/atom_entry_spec.rb} +3 -3
  20. data/spec/feedzirra/{atom_feed_burner_entry_spec.rb → parser/atom_feed_burner_entry_spec.rb} +4 -4
  21. data/spec/feedzirra/{atom_feed_burner_spec.rb → parser/atom_feed_burner_spec.rb} +6 -6
  22. data/spec/feedzirra/{atom_spec.rb → parser/atom_spec.rb} +5 -5
  23. data/spec/feedzirra/{itunes_rss_item_spec.rb → parser/itunes_rss_item_spec.rb} +8 -4
  24. data/spec/feedzirra/{itunes_rss_owner_spec.rb → parser/itunes_rss_owner_spec.rb} +3 -3
  25. data/spec/feedzirra/{itunes_rss_spec.rb → parser/itunes_rss_spec.rb} +5 -5
  26. data/spec/feedzirra/{rss_entry_spec.rb → parser/rss_entry_spec.rb} +3 -3
  27. data/spec/feedzirra/{rss_spec.rb → parser/rss_spec.rb} +5 -5
  28. data/spec/feedzirra/push_parser_spec.rb +16 -0
  29. metadata +28 -25
  30. data/lib/feedzirra/atom.rb +0 -22
  31. data/lib/feedzirra/atom_entry.rb +0 -29
  32. data/lib/feedzirra/atom_feed_burner.rb +0 -22
  33. data/lib/feedzirra/atom_feed_burner_entry.rb +0 -30
  34. data/lib/feedzirra/itunes_rss.rb +0 -46
  35. data/lib/feedzirra/itunes_rss_item.rb +0 -28
  36. data/lib/feedzirra/itunes_rss_owner.rb +0 -8
  37. data/lib/feedzirra/rss.rb +0 -23
  38. data/lib/feedzirra/rss_entry.rb +0 -35
@@ -0,0 +1,27 @@
1
+ module Feedzirra
2
+
3
+ module Parser
4
+ # == Summary
5
+ # Parser for dealing with Feedburner Atom feeds.
6
+ #
7
+ # == Attributes
8
+ # * title
9
+ # * feed_url
10
+ # * url
11
+ # * entries
12
+ class AtomFeedBurner
13
+ include SAXMachine
14
+ include FeedUtilities
15
+ element :title
16
+ element :link, :as => :url, :value => :href, :with => {:type => "text/html"}
17
+ element :link, :as => :feed_url, :value => :href, :with => {:type => "application/atom+xml"}
18
+ elements :entry, :as => :entries, :class => AtomFeedBurnerEntry
19
+
20
+ def self.able_to_parse?(xml) #:nodoc:
21
+ (xml =~ /Atom/ && xml =~ /feedburner/) || false
22
+ end
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,35 @@
1
+ module Feedzirra
2
+
3
+ module Parser
4
+ # == Summary
5
+ # Parser for dealing with Feedburner Atom feed entries.
6
+ #
7
+ # == Attributes
8
+ # * title
9
+ # * url
10
+ # * author
11
+ # * content
12
+ # * summary
13
+ # * published
14
+ # * categories
15
+ class AtomFeedBurnerEntry
16
+ include SAXMachine
17
+ include FeedEntryUtilities
18
+ element :title
19
+ element :name, :as => :author
20
+ element :link, :as => :url, :value => :href, :with => {:type => "text/html", :rel => "alternate"}
21
+ element :"feedburner:origLink", :as => :url
22
+ element :summary
23
+ element :content
24
+ element :published
25
+ element :id
26
+ element :issued, :as => :published
27
+ element :created, :as => :published
28
+ element :updated
29
+ element :modified, :as => :updated
30
+ elements :category, :as => :categories, :value => :term
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,50 @@
1
+ module Feedzirra
2
+
3
+ module Parser
4
+ # iTunes is RSS 2.0 + some apple extensions
5
+ # Source: http://www.apple.com/itunes/whatson/podcasts/specs.html
6
+ class ITunesRSS
7
+ include SAXMachine
8
+ include FeedUtilities
9
+
10
+ attr_accessor :feed_url
11
+
12
+ # RSS 2.0 elements that need including
13
+ element :copyright
14
+ element :description
15
+ element :language
16
+ element :managingEditor
17
+ element :title
18
+ element :link, :as => :url
19
+
20
+ # If author is not present use managingEditor on the channel
21
+ element :"itunes:author", :as => :itunes_author
22
+ element :"itunes:block", :as => :itunes_block
23
+ element :"itunes:image", :value => :href, :as => :itunes_image
24
+ element :"itunes:explicit", :as => :itunes_explicit
25
+ element :"itunes:keywords", :as => :itunes_keywords
26
+ # New URL for the podcast feed
27
+ element :"itunes:new-feed-url", :as => :itunes_new_feed_url
28
+ element :"itunes:subtitle", :as => :itunes_subtitle
29
+ # If summary is not present, use the description tag
30
+ element :"itunes:summary", :as => :itunes_summary
31
+
32
+ # iTunes RSS feeds can have multiple main categories...
33
+ # ...and multiple sub-categories per category
34
+ # TODO subcategories not supported correctly - they are at the same level
35
+ # as the main categories
36
+ elements :"itunes:category", :as => :itunes_categories, :value => :text
37
+
38
+ elements :"itunes:owner", :as => :itunes_owners, :class => ITunesRSSOwner
39
+
40
+ elements :item, :as => :entries, :class => ITunesRSSItem
41
+
42
+ def self.able_to_parse?(xml)
43
+ xml =~ /xmlns:itunes=\"http:\/\/www.itunes.com\/dtds\/podcast-1.0.dtd\"/
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -0,0 +1,32 @@
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 FeedEntryUtilities
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
+ element :"content:encoded", :as => :content
16
+
17
+ # If author is not present use author tag on the item
18
+ element :"itunes:author", :as => :itunes_author
19
+ element :"itunes:block", :as => :itunes_block
20
+ element :"itunes:duration", :as => :itunes_duration
21
+ element :"itunes:explicit", :as => :itunes_explicit
22
+ element :"itunes:keywords", :as => :itunes_keywords
23
+ element :"itunes:subtitle", :as => :itunes_subtitle
24
+ # If summary is not present, use the description tag
25
+ element :"itunes:summary", :as => :itunes_summary
26
+ element :enclosure, :value => :length, :as => :enclosure_length
27
+ element :enclosure, :value => :type, :as => :enclosure_type
28
+ element :enclosure, :value => :url, :as => :enclosure_url
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,12 @@
1
+ module Feedzirra
2
+
3
+ module Parser
4
+ class ITunesRSSOwner
5
+ include SAXMachine
6
+ include FeedUtilities
7
+ element :"itunes:name", :as => :name
8
+ element :"itunes:email", :as => :email
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,28 @@
1
+ module Feedzirra
2
+
3
+ module Parser
4
+ # == Summary
5
+ # Parser for dealing with RSS feeds.
6
+ #
7
+ # == Attributes
8
+ # * title
9
+ # * feed_url
10
+ # * url
11
+ # * entries
12
+ class RSS
13
+ include SAXMachine
14
+ include FeedUtilities
15
+ element :title
16
+ element :link, :as => :url
17
+ elements :item, :as => :entries, :class => RSSEntry
18
+
19
+ attr_accessor :feed_url
20
+
21
+ def self.able_to_parse?(xml) #:nodoc:
22
+ xml =~ /\<rss|rdf/
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,40 @@
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
+ # * author
11
+ # * content
12
+ # * summary
13
+ # * published
14
+ # * categories
15
+ class RSSEntry
16
+ include SAXMachine
17
+ include FeedEntryUtilities
18
+ element :title
19
+ element :link, :as => :url
20
+
21
+ element :"dc:creator", :as => :author
22
+ element :"content:encoded", :as => :content
23
+ element :description, :as => :summary
24
+
25
+ element :pubDate, :as => :published
26
+ element :"dc:date", :as => :published
27
+ element :"dc:Date", :as => :published
28
+ element :"dcterms:created", :as => :published
29
+
30
+
31
+ element :"dcterms:modified", :as => :updated
32
+ element :issued, :as => :published
33
+ elements :category, :as => :categories
34
+
35
+ element :guid, :as => :id
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,56 @@
1
+ module Feedzirra
2
+ ##
3
+ # Contrary to Feedzirra::Feed, Feedzirra::PushParser doesn't expect
4
+ # the whole document to be given in one String, but allows
5
+ # subsequent parsing of chunks.
6
+ class PushParser
7
+ ##
8
+ # How many bytes to buffer before starting to parse, helps
9
+ # Feedzirra's content detection.
10
+ BUF_MIN_THRESHOLD = 1000
11
+
12
+ ##
13
+ # Just resets instance variables
14
+ def initialize
15
+ @buf = ''
16
+ @parser = nil
17
+ end
18
+
19
+ ##
20
+ # Either buffer up til BUF_MIN_THRESHOLD or, if reached, actually
21
+ # parse a chunk
22
+ def push(chunk)
23
+ if @parser
24
+ @parser.parse(chunk)
25
+ else
26
+ @buf += chunk
27
+ if @buf.size > BUF_MIN_THRESHOLD
28
+ start_parsing
29
+ end
30
+ end
31
+ end
32
+
33
+ ##
34
+ # Really start parsing, if BUF_MIN_THRESHOLD wasn't reached yet,
35
+ # finalize, and return the actual parser/document
36
+ def finish
37
+ # TODO: if we haven't started yet we won't even need a
38
+ # PushParser
39
+ start_parsing unless @parser
40
+
41
+ @parser.parse_finish
42
+ @parser
43
+ end
44
+
45
+ private
46
+
47
+ def start_parsing
48
+ unless klass = Feed::determine_feed_parser_for_xml(@buf)
49
+ raise NoParserAvailable.new("No valid parser for XML.")
50
+ end
51
+ @parser = klass.new
52
+ @parser.parse(@buf)
53
+ @buf = nil
54
+ end
55
+ end
56
+ end
@@ -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.to_s.should == "Wed, 15 Jun 2005 19:00:00 GMT"
56
- feed.entries.first.itunes_author.should == "John Doe"
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 the Feedzirra::ITunesRSS object for an itunes feed" do
99
- Feedzirra::Feed.determine_feed_parser_for_xml(sample_itunes_feed).should == Feedzirra::ITunesRSS
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
@@ -160,7 +163,7 @@ describe Feedzirra::Feed do
160
163
  @cmock = stub('cmock', :header_str => '', :body_str => @paul_feed[:xml] )
161
164
  @multi = stub('curl_multi', :add => true, :perform => true)
162
165
  @curl_easy = stub('curl_easy')
163
- @curl = stub('curl', :headers => {}, :follow_location= => true, :on_failure => true)
166
+ @curl = stub('curl', :headers => {}, :follow_location= => true, :on_failure => true, :timeout= => true)
164
167
  @curl.stub!(:on_success).and_yield(@cmock)
165
168
 
166
169
  Curl::Multi.stub!(:new).and_return(@multi)
@@ -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
 
@@ -206,12 +209,12 @@ describe Feedzirra::Feed do
206
209
  Curl::Multi.stub!(:new).and_return(multi)
207
210
 
208
211
  paul_response = stub('paul_response', :header_str => '', :body_str => @paul_feed[:xml] )
209
- trotter_response = stub('trotter_response', :header_str => '', :body_str => @trotter_feed[:xml] )
212
+ trotter_response = stub('trotter_response', :header_str => '', :body_str => @trotter_feed[:xml])
210
213
 
211
- paul_curl = stub('paul_curl', :headers => {}, :follow_location= => true, :on_failure => true)
214
+ paul_curl = stub('paul_curl', :headers => {}, :follow_location= => true, :on_failure => true, :timeout= => true)
212
215
  paul_curl.stub!(:on_success).and_yield(paul_response)
213
216
 
214
- trotter_curl = stub('trotter_curl', :headers => {}, :follow_location= => true, :on_failure => true)
217
+ trotter_curl = stub('trotter_curl', :headers => {}, :follow_location= => true, :on_failure => true, :timeout= => true)
215
218
  trotter_curl.stub!(:on_success).and_yield(trotter_response)
216
219
 
217
220
  Curl::Easy.should_receive(:new).with(@paul_feed[:url]).ordered.and_yield(paul_curl)
@@ -253,7 +256,7 @@ describe Feedzirra::Feed do
253
256
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :if_modified_since => Time.parse("Jan 25 2009 04:10:32 GMT"))
254
257
  @easy_curl.headers["If-Modified-Since"].should == 'Sun, 25 Jan 2009 04:10:32 GMT'
255
258
  end
256
-
259
+
257
260
  it 'should set follow location to true' do
258
261
  @easy_curl.should_receive(:follow_location=).with(true)
259
262
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
@@ -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
@@ -394,6 +397,11 @@ describe Feedzirra::Feed do
394
397
 
395
398
  it "should set if modified since as an option if passed"
396
399
 
400
+ it "should set timeout to the right value" do
401
+ @easy_curl.should_receive(:timeout=).with(8)
402
+ Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {:timeout => 8})
403
+ end
404
+
397
405
  it 'should set follow location to true' do
398
406
  @easy_curl.should_receive(:follow_location=).with(true)
399
407
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
@@ -415,8 +423,8 @@ describe Feedzirra::Feed do
415
423
  @new_feed = @feed.clone
416
424
  @feed.stub!(:update_from_feed)
417
425
  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)
426
+ Feedzirra::Feed.stub!(:determine_feed_parser_for_xml).and_return(Feedzirra::Parser::AtomFeedBurner)
427
+ Feedzirra::Parser::AtomFeedBurner.stub!(:parse).and_return(@new_feed)
420
428
  Feedzirra::Feed.stub!(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
421
429
  Feedzirra::Feed.stub!(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
422
430
  end
@@ -424,7 +432,7 @@ describe Feedzirra::Feed do
424
432
  it 'should process the next feed in the queue'
425
433
 
426
434
  it 'should parse the updated feed' do
427
- Feedzirra::AtomFeedBurner.should_receive(:parse).and_return(@new_feed)
435
+ Feedzirra::Parser::AtomFeedBurner.should_receive(:parse).and_return(@new_feed)
428
436
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
429
437
  @easy_curl.on_success.call(@easy_curl)
430
438
  end