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.
- data/README.textile +1 -1
- data/Rakefile +3 -0
- data/lib/feedzirra/feed.rb +11 -25
- data/lib/feedzirra/parser/atom.rb +26 -0
- data/lib/feedzirra/parser/atom_entry.rb +34 -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 +28 -0
- data/lib/feedzirra/parser/rss_entry.rb +40 -0
- data/lib/feedzirra.rb +10 -10
- 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} +3 -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} +5 -5
- 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} +3 -3
- data/spec/feedzirra/{rss_spec.rb → parser/rss_spec.rb} +5 -5
- metadata +19 -19
- data/lib/feedzirra/atom.rb +0 -22
- data/lib/feedzirra/atom_entry.rb +0 -29
- 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 -23
- 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(
|
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
data/lib/feedzirra/feed.rb
CHANGED
@@ -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
|
-
|
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
|
-
#
|
127
|
-
#
|
128
|
-
#
|
129
|
-
#
|
130
|
-
#
|
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
|
-
|
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,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.
|
33
|
+
VERSION = "0.0.12"
|
34
34
|
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
|
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
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require File.dirname(__FILE__)
|
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__)
|
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__)
|
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__)
|
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__)
|
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.
|
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
|
data/lib/feedzirra/atom.rb
DELETED
@@ -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
|
data/lib/feedzirra/atom_entry.rb
DELETED
@@ -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
|
data/lib/feedzirra/itunes_rss.rb
DELETED
@@ -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
|
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
|
data/lib/feedzirra/rss_entry.rb
DELETED
@@ -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
|