pauldix-feedzirra 0.0.10 → 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 (34) hide show
  1. data/README.textile +1 -1
  2. data/Rakefile +3 -0
  3. data/lib/feedzirra/feed.rb +11 -25
  4. data/lib/feedzirra/parser/atom.rb +26 -0
  5. data/lib/feedzirra/parser/atom_entry.rb +34 -0
  6. data/lib/feedzirra/parser/atom_feed_burner.rb +27 -0
  7. data/lib/feedzirra/parser/atom_feed_burner_entry.rb +35 -0
  8. data/lib/feedzirra/parser/itunes_rss.rb +50 -0
  9. data/lib/feedzirra/parser/itunes_rss_item.rb +31 -0
  10. data/lib/feedzirra/parser/itunes_rss_owner.rb +12 -0
  11. data/lib/feedzirra/parser/rss.rb +28 -0
  12. data/lib/feedzirra/parser/rss_entry.rb +40 -0
  13. data/lib/feedzirra.rb +10 -10
  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} +3 -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} +5 -5
  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} +3 -3
  24. data/spec/feedzirra/{rss_spec.rb → parser/rss_spec.rb} +5 -5
  25. metadata +19 -19
  26. data/lib/feedzirra/atom.rb +0 -22
  27. data/lib/feedzirra/atom_entry.rb +0 -29
  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 -23
  34. data/lib/feedzirra/rss_entry.rb +0 -35
data/README.textile CHANGED
@@ -93,7 +93,7 @@ updated_feed.new_entries # a collection of the entry objects that are newer tha
93
93
 
94
94
  # fetching multiple feeds
95
95
  feed_urls = ["http://feeds.feedburner.com/PaulDixExplainsNothing", "http://feeds.feedburner.com/trottercashion"]
96
- feeds = Feedzirra::Feed.fetch_and_parse(feeds_urls)
96
+ feeds = Feedzirra::Feed.fetch_and_parse(feed_urls)
97
97
 
98
98
  # feeds is now a hash with the feed_urls as keys and the parsed feed objects as values. If an error was thrown
99
99
  # there will be a Fixnum of the http response code instead of a feed object
data/Rakefile CHANGED
@@ -20,6 +20,9 @@ def recent_specs(touched_since)
20
20
  recent_specs.uniq
21
21
  end
22
22
 
23
+ desc "Run all the tests"
24
+ task :default => :spec
25
+
23
26
  # Tasks
24
27
  Spec::Rake::SpecTask.new do |t|
25
28
  t.spec_opts = ['--options', "\"#{File.dirname(__FILE__)}/spec/spec.opts\""]
@@ -46,7 +46,7 @@ module Feedzirra
46
46
  # === Returns
47
47
  # A array of class names.
48
48
  def self.feed_classes
49
- @feed_classes ||= [RSS, AtomFeedBurner, Atom]
49
+ @feed_classes ||= [Feedzirra::Parser::RSS, Feedzirra::Parser::AtomFeedBurner, Feedzirra::Parser::Atom]
50
50
  end
51
51
 
52
52
  # Makes all entry types look for the passed in element to parse. This is actually just a call to
@@ -58,25 +58,11 @@ module Feedzirra
58
58
  def self.add_common_feed_entry_element(element_tag, options = {})
59
59
  # need to think of a better way to do this. will break for people who want this behavior
60
60
  # across their added classes
61
- feed_classes.each do |klass|
61
+ feed_classes.map{|k| eval("#{k}Entry") }.each do |klass|
62
62
  klass.send(:element, element_tag, options)
63
63
  end
64
64
  end
65
65
 
66
- # Makes all entry types look for the passed in elements to parse. This is actually just a call to
67
- # elements (a SAXMachine call) in the class
68
- #
69
- # === Parameters
70
- # [element_tag<String>]
71
- # [options<Hash>] Valid keys are same as with SAXMachine
72
- def self.add_common_feed_entry_elements(element_tag, options = {})
73
- # need to think of a better way to do this. will break for people who want this behavior
74
- # across their added classes
75
- [RSSEntry, AtomFeedBurnerEntry, AtomEntry].each do |klass|
76
- klass.send(:elements, element_tag, options)
77
- end
78
- end
79
-
80
66
  # Fetches and returns the raw XML for each URL provided.
81
67
  #
82
68
  # === Parameters
@@ -115,7 +101,7 @@ module Feedzirra
115
101
  end
116
102
 
117
103
  multi.perform
118
- return urls.is_a?(String) ? responses.values.first : responses
104
+ urls.is_a?(String) ? responses.values.first : responses
119
105
  end
120
106
 
121
107
  # Fetches and returns the parsed XML for each URL provided.
@@ -123,11 +109,11 @@ module Feedzirra
123
109
  # === Parameters
124
110
  # [urls<String> or <Array>] A single feed URL, or an array of feed URLs.
125
111
  # [options<Hash>] Valid keys for this argument as as followed:
126
- # * :user_agent - String that overrides the default user agent.
127
- # * :if_modified_since - Time object representing when the feed was last updated.
128
- # * :if_none_match - String, an etag for the request that was stored previously.
129
- # * :on_success - Block that gets executed after a successful request.
130
- # * :on_failure - Block that gets executed after a failed request.
112
+ # * :user_agent - String that overrides the default user agent.
113
+ # * :if_modified_since - Time object representing when the feed was last updated.
114
+ # * :if_none_match - String, an etag for the request that was stored previously.
115
+ # * :on_success - Block that gets executed after a successful request.
116
+ # * :on_failure - Block that gets executed after a failed request.
131
117
  # === Returns
132
118
  # A Feed object if a single URL is passed.
133
119
  #
@@ -137,12 +123,12 @@ module Feedzirra
137
123
  multi = Curl::Multi.new
138
124
  responses = {}
139
125
 
140
- # I broke these down so I would only try to do 30 simultaneously because
126
+ # I broke these down so I would only try to do 30 simultaneously because
141
127
  # I was getting weird errors when doing a lot. As one finishes it pops another off the queue.
142
128
  url_queue.slice!(0, 30).each do |url|
143
129
  add_url_to_multi(multi, url, url_queue, responses, options)
144
130
  end
145
-
131
+
146
132
  multi.perform
147
133
  return urls.is_a?(String) ? responses.values.first : responses
148
134
  end
@@ -194,7 +180,7 @@ module Feedzirra
194
180
  end
195
181
 
196
182
  multi.perform
197
- return responses.size == 1 ? responses.values.first : responses.values
183
+ responses.size == 1 ? responses.values.first : responses.values
198
184
  end
199
185
 
200
186
  # An abstraction for adding a feed by URL to the passed Curb::multi stack.
@@ -0,0 +1,26 @@
1
+ module Feedzirra
2
+
3
+ module Parser
4
+ # == Summary
5
+ # Parser for dealing with Atom feeds.
6
+ #
7
+ # == Attributes
8
+ # * title
9
+ # * feed_url
10
+ # * url
11
+ # * entries
12
+ class Atom
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 => AtomEntry
19
+
20
+ def self.able_to_parse?(xml) #:nodoc:
21
+ xml =~ /(Atom)|(#{Regexp.escape("http://purl.org/atom")})/
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,34 @@
1
+ module Feedzirra
2
+
3
+ module Parser
4
+ # == Summary
5
+ # Parser for dealing with Atom feed entries.
6
+ #
7
+ # == Attributes
8
+ # * title
9
+ # * url
10
+ # * author
11
+ # * content
12
+ # * summary
13
+ # * published
14
+ # * categories
15
+ class AtomEntry
16
+ include SAXMachine
17
+ include FeedEntryUtilities
18
+ element :title
19
+ element :link, :as => :url, :value => :href, :with => {:type => "text/html", :rel => "alternate"}
20
+ element :name, :as => :author
21
+ element :content
22
+ element :summary
23
+ element :published
24
+ element :id
25
+ element :created, :as => :published
26
+ element :issued, :as => :published
27
+ element :updated
28
+ element :modified, :as => :updated
29
+ elements :category, :as => :categories, :value => :term
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -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,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,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
data/lib/feedzirra.rb CHANGED
@@ -18,17 +18,17 @@ require 'feedzirra/feed_utilities'
18
18
  require 'feedzirra/feed_entry_utilities'
19
19
  require 'feedzirra/feed'
20
20
 
21
- require 'feedzirra/rss_entry'
22
- require 'feedzirra/itunes_rss_owner'
23
- require 'feedzirra/itunes_rss_item'
24
- require 'feedzirra/atom_entry'
25
- require 'feedzirra/atom_feed_burner_entry'
21
+ require 'feedzirra/parser/rss_entry'
22
+ require 'feedzirra/parser/itunes_rss_owner'
23
+ require 'feedzirra/parser/itunes_rss_item'
24
+ require 'feedzirra/parser/atom_entry'
25
+ require 'feedzirra/parser/atom_feed_burner_entry'
26
26
 
27
- require 'feedzirra/rss'
28
- require 'feedzirra/itunes_rss'
29
- require 'feedzirra/atom'
30
- require 'feedzirra/atom_feed_burner'
27
+ require 'feedzirra/parser/rss'
28
+ require 'feedzirra/parser/itunes_rss'
29
+ require 'feedzirra/parser/atom'
30
+ require 'feedzirra/parser/atom_feed_burner'
31
31
 
32
32
  module Feedzirra
33
- VERSION = "0.0.10"
33
+ VERSION = "0.0.12"
34
34
  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
@@ -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
@@ -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::ITunesRSSItem do
3
+ describe Feedzirra::Parser::ITunesRSSItem 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 ITunesRssItem,
6
6
  # but this is actually how it should work. You would never just pass entry xml straight to the ITunesRssItem
7
- @item = Feedzirra::ITunesRSS.parse(sample_itunes_feed).entries.first
7
+ @item = Feedzirra::Parser::ITunesRSS.parse(sample_itunes_feed).entries.first
8
8
  end
9
9
 
10
10
  it "should parse the title" do
@@ -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::ITunesRSSOwner do
3
+ describe Feedzirra::Parser::ITunesRSSOwner 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 RSSEntry,
6
6
  # but this is actually how it should work. You would never just pass entry xml straight to the ITunesRssOwner
7
- @owner = Feedzirra::ITunesRSS.parse(sample_itunes_feed).itunes_owners.first
7
+ @owner = Feedzirra::Parser::ITunesRSS.parse(sample_itunes_feed).itunes_owners.first
8
8
  end
9
9
 
10
10
  it "should parse the name" 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::ITunesRSS do
3
+ describe Feedzirra::Parser::ITunesRSS do
4
4
  describe "#will_parse?" do
5
5
  it "should return true for an itunes RSS feed" do
6
- Feedzirra::ITunesRSS.should be_able_to_parse(sample_itunes_feed)
6
+ Feedzirra::Parser::ITunesRSS.should be_able_to_parse(sample_itunes_feed)
7
7
  end
8
8
 
9
9
  it "should return fase for an atom feed" do
10
- Feedzirra::ITunesRSS.should_not be_able_to_parse(sample_atom_feed)
10
+ Feedzirra::Parser::ITunesRSS.should_not be_able_to_parse(sample_atom_feed)
11
11
  end
12
12
  end
13
13
 
14
14
  describe "parsing" do
15
15
  before(:each) do
16
- @feed = Feedzirra::ITunesRSS.parse(sample_itunes_feed)
16
+ @feed = Feedzirra::Parser::ITunesRSS.parse(sample_itunes_feed)
17
17
  end
18
18
 
19
19
  it "should parse the subtitle" do
@@ -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::RSSEntry do
3
+ describe Feedzirra::Parser::RSSEntry 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 RSSEntry,
6
6
  # but this is actually how it should work. You would never just pass entry xml straight to the AtomEnry
7
- @entry = Feedzirra::RSS.parse(sample_rss_feed).entries.first
7
+ @entry = Feedzirra::Parser::RSS.parse(sample_rss_feed).entries.first
8
8
  end
9
9
 
10
10
  it "should parse the title" do
@@ -1,9 +1,9 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
2
2
 
3
- describe Feedzirra::RSS do
3
+ describe Feedzirra::Parser::RSS do
4
4
  describe "#will_parse?" do
5
5
  it "should return true for an RSS feed" do
6
- Feedzirra::RSS.should be_able_to_parse(sample_rss_feed)
6
+ Feedzirra::Parser::RSS.should be_able_to_parse(sample_rss_feed)
7
7
  end
8
8
 
9
9
  # this is no longer true. combined rdf and rss into one
@@ -12,13 +12,13 @@ describe Feedzirra::RSS do
12
12
  # end
13
13
 
14
14
  it "should return fase for an atom feed" do
15
- Feedzirra::RSS.should_not be_able_to_parse(sample_atom_feed)
15
+ Feedzirra::Parser::RSS.should_not be_able_to_parse(sample_atom_feed)
16
16
  end
17
17
  end
18
18
 
19
19
  describe "parsing" do
20
20
  before(:each) do
21
- @feed = Feedzirra::RSS.parse(sample_rss_feed)
21
+ @feed = Feedzirra::Parser::RSS.parse(sample_rss_feed)
22
22
  end
23
23
 
24
24
  it "should parse the title" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pauldix-feedzirra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Dix
@@ -85,15 +85,15 @@ files:
85
85
  - lib/core_ext/string.rb
86
86
  - lib/feedzirra.rb
87
87
  - lib/feedzirra/feed.rb
88
- - lib/feedzirra/atom.rb
89
- - lib/feedzirra/atom_entry.rb
90
- - lib/feedzirra/atom_feed_burner.rb
91
- - lib/feedzirra/atom_feed_burner_entry.rb
92
- - lib/feedzirra/itunes_rss.rb
93
- - lib/feedzirra/itunes_rss_item.rb
94
- - lib/feedzirra/itunes_rss_owner.rb
95
- - lib/feedzirra/rss.rb
96
- - lib/feedzirra/rss_entry.rb
88
+ - lib/feedzirra/parser/atom.rb
89
+ - lib/feedzirra/parser/atom_entry.rb
90
+ - lib/feedzirra/parser/atom_feed_burner.rb
91
+ - lib/feedzirra/parser/atom_feed_burner_entry.rb
92
+ - lib/feedzirra/parser/itunes_rss.rb
93
+ - lib/feedzirra/parser/itunes_rss_item.rb
94
+ - lib/feedzirra/parser/itunes_rss_owner.rb
95
+ - lib/feedzirra/parser/rss.rb
96
+ - lib/feedzirra/parser/rss_entry.rb
97
97
  - lib/feedzirra/feed_utilities.rb
98
98
  - lib/feedzirra/feed_entry_utilities.rb
99
99
  - README.textile
@@ -101,15 +101,15 @@ files:
101
101
  - spec/spec.opts
102
102
  - spec/spec_helper.rb
103
103
  - spec/feedzirra/feed_spec.rb
104
- - spec/feedzirra/atom_spec.rb
105
- - spec/feedzirra/atom_entry_spec.rb
106
- - spec/feedzirra/atom_feed_burner_spec.rb
107
- - spec/feedzirra/atom_feed_burner_entry_spec.rb
108
- - spec/feedzirra/itunes_rss_spec.rb
109
- - spec/feedzirra/itunes_rss_item_spec.rb
110
- - spec/feedzirra/itunes_rss_owner_spec.rb
111
- - spec/feedzirra/rss_spec.rb
112
- - spec/feedzirra/rss_entry_spec.rb
104
+ - spec/feedzirra/parser/atom_spec.rb
105
+ - spec/feedzirra/parser/atom_entry_spec.rb
106
+ - spec/feedzirra/parser/atom_feed_burner_spec.rb
107
+ - spec/feedzirra/parser/atom_feed_burner_entry_spec.rb
108
+ - spec/feedzirra/parser/itunes_rss_spec.rb
109
+ - spec/feedzirra/parser/itunes_rss_item_spec.rb
110
+ - spec/feedzirra/parser/itunes_rss_owner_spec.rb
111
+ - spec/feedzirra/parser/rss_spec.rb
112
+ - spec/feedzirra/parser/rss_entry_spec.rb
113
113
  - spec/feedzirra/feed_utilities_spec.rb
114
114
  - spec/feedzirra/feed_entry_utilities_spec.rb
115
115
  has_rdoc: true
@@ -1,22 +0,0 @@
1
- module Feedzirra
2
- # == Summary
3
- # Parser for dealing with Atom feeds.
4
- #
5
- # == Attributes
6
- # * title
7
- # * feed_url
8
- # * url
9
- # * entries
10
- class Atom
11
- include SAXMachine
12
- include FeedUtilities
13
- element :title
14
- element :link, :as => :url, :value => :href, :with => {:type => "text/html"}
15
- element :link, :as => :feed_url, :value => :href, :with => {:type => "application/atom+xml"}
16
- elements :entry, :as => :entries, :class => AtomEntry
17
-
18
- def self.able_to_parse?(xml) #:nodoc:
19
- xml =~ /(Atom)|(#{Regexp.escape("http://purl.org/atom")})/
20
- end
21
- end
22
- end
@@ -1,29 +0,0 @@
1
- module Feedzirra
2
- # == Summary
3
- # Parser for dealing with Atom feed entries.
4
- #
5
- # == Attributes
6
- # * title
7
- # * url
8
- # * author
9
- # * content
10
- # * summary
11
- # * published
12
- # * categories
13
- class AtomEntry
14
- include SAXMachine
15
- include FeedEntryUtilities
16
- element :title
17
- element :link, :as => :url, :value => :href, :with => {:type => "text/html", :rel => "alternate"}
18
- element :name, :as => :author
19
- element :content
20
- element :summary
21
- element :published
22
- element :id
23
- element :created, :as => :published
24
- element :issued, :as => :published
25
- element :updated
26
- element :modified, :as => :updated
27
- elements :category, :as => :categories, :value => :term
28
- end
29
- end
@@ -1,22 +0,0 @@
1
- module Feedzirra
2
- # == Summary
3
- # Parser for dealing with Feedburner Atom feeds.
4
- #
5
- # == Attributes
6
- # * title
7
- # * feed_url
8
- # * url
9
- # * entries
10
- class AtomFeedBurner
11
- include SAXMachine
12
- include FeedUtilities
13
- element :title
14
- element :link, :as => :url, :value => :href, :with => {:type => "text/html"}
15
- element :link, :as => :feed_url, :value => :href, :with => {:type => "application/atom+xml"}
16
- elements :entry, :as => :entries, :class => AtomFeedBurnerEntry
17
-
18
- def self.able_to_parse?(xml) #:nodoc:
19
- (xml =~ /Atom/ && xml =~ /feedburner/) || false
20
- end
21
- end
22
- end
@@ -1,30 +0,0 @@
1
- module Feedzirra
2
- # == Summary
3
- # Parser for dealing with Feedburner Atom feed entries.
4
- #
5
- # == Attributes
6
- # * title
7
- # * url
8
- # * author
9
- # * content
10
- # * summary
11
- # * published
12
- # * categories
13
- class AtomFeedBurnerEntry
14
- include SAXMachine
15
- include FeedEntryUtilities
16
- element :title
17
- element :name, :as => :author
18
- element :link, :as => :url, :value => :href, :with => {:type => "text/html", :rel => "alternate"}
19
- element :"feedburner:origLink", :as => :url
20
- element :summary
21
- element :content
22
- element :published
23
- element :id
24
- element :issued, :as => :published
25
- element :created, :as => :published
26
- element :updated
27
- element :modified, :as => :updated
28
- elements :category, :as => :categories, :value => :term
29
- end
30
- end
@@ -1,46 +0,0 @@
1
- module Feedzirra
2
- # iTunes is RSS 2.0 + some apple extensions
3
- # Source: http://www.apple.com/itunes/whatson/podcasts/specs.html
4
- class ITunesRSS
5
- include SAXMachine
6
- include FeedUtilities
7
-
8
- attr_accessor :feed_url
9
-
10
- # RSS 2.0 elements that need including
11
- element :copyright
12
- element :description
13
- element :language
14
- element :managingEditor
15
- element :title
16
- element :link, :as => :url
17
-
18
- # If author is not present use managingEditor on the channel
19
- element :"itunes:author", :as => :itunes_author
20
- element :"itunes:block", :as => :itunes_block
21
- element :"itunes:image", :value => :href, :as => :itunes_image
22
- element :"itunes:explicit", :as => :itunes_explicit
23
- element :"itunes:keywords", :as => :itunes_keywords
24
- # New URL for the podcast feed
25
- element :"itunes:new-feed-url", :as => :itunes_new_feed_url
26
- element :"itunes:subtitle", :as => :itunes_subtitle
27
- # If summary is not present, use the description tag
28
- element :"itunes:summary", :as => :itunes_summary
29
-
30
- # iTunes RSS feeds can have multiple main categories...
31
- # ...and multiple sub-categories per category
32
- # TODO subcategories not supported correctly - they are at the same level
33
- # as the main categories
34
- elements :"itunes:category", :as => :itunes_categories, :value => :text
35
-
36
- elements :"itunes:owner", :as => :itunes_owners, :class => ITunesRSSOwner
37
-
38
- elements :item, :as => :entries, :class => ITunesRSSItem
39
-
40
- def self.able_to_parse?(xml)
41
- xml =~ /xmlns:itunes=\"http:\/\/www.itunes.com\/dtds\/podcast-1.0.dtd\"/
42
- end
43
-
44
- end
45
-
46
- end
@@ -1,28 +0,0 @@
1
- module Feedzirra
2
- # iTunes extensions to the standard RSS2.0 item
3
- # Source: http://www.apple.com/itunes/whatson/podcasts/specs.html
4
- class ITunesRSSItem
5
- include SAXMachine
6
- include FeedUtilities
7
- element :author
8
- element :guid
9
- element :title
10
- element :link, :as => :url
11
- element :description, :as => :summary
12
- element :pubDate, :as => :published
13
-
14
- # If author is not present use author tag on the item
15
- element :"itunes:author", :as => :itunes_author
16
- element :"itunes:block", :as => :itunes_block
17
- element :"itunes:duration", :as => :itunes_duration
18
- element :"itunes:explicit", :as => :itunes_explicit
19
- element :"itunes:keywords", :as => :itunes_keywords
20
- element :"itunes:subtitle", :as => :itunes_subtitle
21
- # If summary is not present, use the description tag
22
- element :"itunes:summary", :as => :itunes_summary
23
- element :enclosure, :value => :length, :as => :enclosure_length
24
- element :enclosure, :value => :type, :as => :enclosure_type
25
- element :enclosure, :value => :url, :as => :enclosure_url
26
- end
27
-
28
- end
@@ -1,8 +0,0 @@
1
- module Feedzirra
2
- class ITunesRSSOwner
3
- include SAXMachine
4
- include FeedUtilities
5
- element :"itunes:name", :as => :name
6
- element :"itunes:email", :as => :email
7
- end
8
- end
data/lib/feedzirra/rss.rb DELETED
@@ -1,23 +0,0 @@
1
- module Feedzirra
2
- # == Summary
3
- # Parser for dealing with RSS feeds.
4
- #
5
- # == Attributes
6
- # * title
7
- # * feed_url
8
- # * url
9
- # * entries
10
- class RSS
11
- include SAXMachine
12
- include FeedUtilities
13
- element :title
14
- element :link, :as => :url
15
- elements :item, :as => :entries, :class => RSSEntry
16
-
17
- attr_accessor :feed_url
18
-
19
- def self.able_to_parse?(xml) #:nodoc:
20
- xml =~ /\<rss|rdf/
21
- end
22
- end
23
- end
@@ -1,35 +0,0 @@
1
- module Feedzirra
2
- # == Summary
3
- # Parser for dealing with RDF feed entries.
4
- #
5
- # == Attributes
6
- # * title
7
- # * url
8
- # * author
9
- # * content
10
- # * summary
11
- # * published
12
- # * categories
13
- class RSSEntry
14
- include SAXMachine
15
- include FeedEntryUtilities
16
- element :title
17
- element :link, :as => :url
18
-
19
- element :"dc:creator", :as => :author
20
- element :"content:encoded", :as => :content
21
- element :description, :as => :summary
22
-
23
- element :pubDate, :as => :published
24
- element :"dc:date", :as => :published
25
- element :"dc:Date", :as => :published
26
- element :"dcterms:created", :as => :published
27
-
28
-
29
- element :"dcterms:modified", :as => :updated
30
- element :issued, :as => :published
31
- elements :category, :as => :categories
32
-
33
- element :guid, :as => :id
34
- end
35
- end