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.
Files changed (34) hide show
  1. data/README.textile +11 -2
  2. data/Rakefile +3 -0
  3. data/lib/feedzirra.rb +10 -10
  4. data/lib/feedzirra/feed.rb +45 -42
  5. data/lib/feedzirra/parser/atom.rb +47 -0
  6. data/lib/feedzirra/parser/atom_entry.rb +51 -0
  7. data/lib/feedzirra/parser/atom_feed_burner.rb +27 -0
  8. data/lib/feedzirra/parser/atom_feed_burner_entry.rb +35 -0
  9. data/lib/feedzirra/parser/itunes_rss.rb +50 -0
  10. data/lib/feedzirra/parser/itunes_rss_item.rb +31 -0
  11. data/lib/feedzirra/parser/itunes_rss_owner.rb +12 -0
  12. data/lib/feedzirra/parser/rss.rb +40 -0
  13. data/lib/feedzirra/parser/rss_entry.rb +55 -0
  14. data/spec/feedzirra/feed_spec.rb +30 -27
  15. data/spec/feedzirra/feed_utilities_spec.rb +9 -9
  16. data/spec/feedzirra/{atom_entry_spec.rb → parser/atom_entry_spec.rb} +7 -3
  17. data/spec/feedzirra/{atom_feed_burner_entry_spec.rb → parser/atom_feed_burner_entry_spec.rb} +4 -4
  18. data/spec/feedzirra/{atom_feed_burner_spec.rb → parser/atom_feed_burner_spec.rb} +6 -6
  19. data/spec/feedzirra/{atom_spec.rb → parser/atom_spec.rb} +16 -8
  20. data/spec/feedzirra/{itunes_rss_item_spec.rb → parser/itunes_rss_item_spec.rb} +3 -3
  21. data/spec/feedzirra/{itunes_rss_owner_spec.rb → parser/itunes_rss_owner_spec.rb} +3 -3
  22. data/spec/feedzirra/{itunes_rss_spec.rb → parser/itunes_rss_spec.rb} +5 -5
  23. data/spec/feedzirra/{rss_entry_spec.rb → parser/rss_entry_spec.rb} +14 -14
  24. data/spec/feedzirra/{rss_spec.rb → parser/rss_spec.rb} +17 -18
  25. metadata +22 -21
  26. data/lib/feedzirra/atom.rb +0 -35
  27. data/lib/feedzirra/atom_entry.rb +0 -41
  28. data/lib/feedzirra/atom_feed_burner.rb +0 -22
  29. data/lib/feedzirra/atom_feed_burner_entry.rb +0 -30
  30. data/lib/feedzirra/itunes_rss.rb +0 -46
  31. data/lib/feedzirra/itunes_rss_item.rb +0 -28
  32. data/lib/feedzirra/itunes_rss_owner.rb +0 -8
  33. data/lib/feedzirra/rss.rb +0 -36
  34. 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,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,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
@@ -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
@@ -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__) + '/../spec_helper'
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
@@ -1,10 +1,10 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
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__)}/../sample_feeds/PaulDixExplainsNothingAlternate.xml")).entries.first
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__) + '/../spec_helper'
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__) + '/../spec_helper'
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