feedzirra 0.1.1 → 0.1.2
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/lib/feedzirra/feed.rb +4 -2
- data/lib/feedzirra/parser.rb +5 -3
- data/lib/feedzirra/parser/atom_feed_burner.rb +1 -1
- data/lib/feedzirra/parser/rss.rb +1 -1
- data/lib/feedzirra/parser/rss_feed_burner.rb +22 -0
- data/lib/feedzirra/parser/rss_feed_burner_entry.rb +40 -0
- data/lib/feedzirra/version.rb +1 -1
- data/spec/feedzirra/feed_spec.rb +22 -8
- data/spec/feedzirra/parser/atom_feed_burner_spec.rb +4 -0
- data/spec/feedzirra/parser/atom_spec.rb +4 -0
- data/spec/feedzirra/parser/itunes_rss_spec.rb +4 -0
- data/spec/feedzirra/parser/rss_feed_burner_entry_spec.rb +85 -0
- data/spec/feedzirra/parser/rss_feed_burner_spec.rb +52 -0
- data/spec/feedzirra/parser/rss_spec.rb +5 -1
- data/spec/spec_helper.rb +9 -1
- metadata +19 -24
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 ||= [Feedzirra::Parser::RSS, Feedzirra::Parser::AtomFeedBurner, Feedzirra::Parser::Atom]
|
49
|
+
@feed_classes ||= [Feedzirra::Parser::RSSFeedBurner, Feedzirra::Parser::RSS, Feedzirra::Parser::AtomFeedBurner, Feedzirra::Parser::Atom]
|
50
50
|
end
|
51
51
|
|
52
52
|
# Makes all registered feeds types look for the passed in element to parse.
|
@@ -129,6 +129,7 @@ module Feedzirra
|
|
129
129
|
curl.proxy_port = options[:proxy_port] if options.has_key?(:proxy_port)
|
130
130
|
curl.max_redirects = options[:max_redirects] if options[:max_redirects]
|
131
131
|
curl.timeout = options[:timeout] if options[:timeout]
|
132
|
+
curl.ssl_verify_host = options[:ssl_verify_host] if options.has_key?(:ssl_verify_host)
|
132
133
|
|
133
134
|
curl.follow_location = true
|
134
135
|
end
|
@@ -248,7 +249,7 @@ module Feedzirra
|
|
248
249
|
end
|
249
250
|
|
250
251
|
multi.perform
|
251
|
-
responses.
|
252
|
+
responses.is_a?(Array)? responses.values : responses.values.first
|
252
253
|
end
|
253
254
|
|
254
255
|
# An abstraction for adding a feed by URL to the passed Curb::multi stack.
|
@@ -325,6 +326,7 @@ module Feedzirra
|
|
325
326
|
easy = Curl::Easy.new(feed.feed_url) do |curl|
|
326
327
|
setup_easy curl, options
|
327
328
|
curl.headers["If-Modified-Since"] = feed.last_modified.httpdate if feed.last_modified
|
329
|
+
curl.headers["If-Modified-Since"] = options[:if_modified_since] if options[:if_modified_since] && (!feed.last_modified || (Time.parse(options[:if_modified_since].to_s) > feed.last_modified))
|
328
330
|
curl.headers["If-None-Match"] = feed.etag if feed.etag
|
329
331
|
|
330
332
|
curl.on_success do |c|
|
data/lib/feedzirra/parser.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
module Feedzirra
|
2
2
|
module Parser
|
3
|
-
autoload :RSS,
|
4
|
-
autoload :RSSEntry,
|
5
|
-
|
3
|
+
autoload :RSS, 'feedzirra/parser/rss'
|
4
|
+
autoload :RSSEntry, 'feedzirra/parser/rss_entry'
|
5
|
+
autoload :RSSFeedBurner, 'feedzirra/parser/rss_feed_burner'
|
6
|
+
autoload :RSSFeedBurnerEntry, 'feedzirra/parser/rss_feed_burner_entry'
|
7
|
+
|
6
8
|
autoload :ITunesRSS, 'feedzirra/parser/itunes_rss'
|
7
9
|
autoload :ITunesRSSItem, 'feedzirra/parser/itunes_rss_item'
|
8
10
|
autoload :ITunesRSSOwner, 'feedzirra/parser/itunes_rss_owner'
|
@@ -12,7 +12,7 @@ module Feedzirra
|
|
12
12
|
elements :entry, :as => :entries, :class => AtomFeedBurnerEntry
|
13
13
|
|
14
14
|
def self.able_to_parse?(xml) #:nodoc:
|
15
|
-
((/Atom/ =~ xml) && (/feedburner/ =~ xml)) || false
|
15
|
+
((/Atom/ =~ xml) && (/feedburner/ =~ xml) && !(/\<rss|\<rdf/ =~ xml)) || false
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
data/lib/feedzirra/parser/rss.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Feedzirra
|
2
|
+
|
3
|
+
module Parser
|
4
|
+
# Parser for dealing with RSS feeds.
|
5
|
+
class RSSFeedBurner
|
6
|
+
include SAXMachine
|
7
|
+
include FeedUtilities
|
8
|
+
element :title
|
9
|
+
element :description
|
10
|
+
element :link, :as => :url
|
11
|
+
elements :item, :as => :entries, :class => RSSFeedBurnerEntry
|
12
|
+
|
13
|
+
attr_accessor :feed_url
|
14
|
+
|
15
|
+
def self.able_to_parse?(xml) #:nodoc:
|
16
|
+
(/\<rss|\<rdf/ =~ xml) && (/feedburner/ =~ xml)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Feedzirra
|
2
|
+
|
3
|
+
module Parser
|
4
|
+
# Parser for dealing with RDF feed entries.
|
5
|
+
class RSSFeedBurnerEntry
|
6
|
+
include SAXMachine
|
7
|
+
include FeedEntryUtilities
|
8
|
+
|
9
|
+
element :title
|
10
|
+
|
11
|
+
element :"feedburner:origLink", :as => :url
|
12
|
+
element :link, :as => :url
|
13
|
+
|
14
|
+
element :"dc:creator", :as => :author
|
15
|
+
element :author, :as => :author
|
16
|
+
element :"content:encoded", :as => :content
|
17
|
+
element :description, :as => :summary
|
18
|
+
|
19
|
+
element :pubDate, :as => :published
|
20
|
+
element :pubdate, :as => :published
|
21
|
+
element :"dc:date", :as => :published
|
22
|
+
element :"dc:Date", :as => :published
|
23
|
+
element :"dcterms:created", :as => :published
|
24
|
+
|
25
|
+
|
26
|
+
element :"dcterms:modified", :as => :updated
|
27
|
+
element :issued, :as => :published
|
28
|
+
elements :category, :as => :categories
|
29
|
+
|
30
|
+
element :guid, :as => :entry_id
|
31
|
+
|
32
|
+
def url
|
33
|
+
@url || @link
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
data/lib/feedzirra/version.rb
CHANGED
data/spec/feedzirra/feed_spec.rb
CHANGED
@@ -90,9 +90,9 @@ describe Feedzirra::Feed do
|
|
90
90
|
|
91
91
|
it "should parse an feedburner rss feed" do
|
92
92
|
feed = Feedzirra::Feed.parse(sample_rss_feed_burner_feed)
|
93
|
-
feed.title.should == "
|
94
|
-
feed.entries.first.published.to_s.should == "
|
95
|
-
feed.entries.size.should ==
|
93
|
+
feed.title.should == "TechCrunch"
|
94
|
+
feed.entries.first.published.to_s.should == "Wed Nov 02 17:25:27 UTC 2011"
|
95
|
+
feed.entries.size.should == 20
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
@@ -109,8 +109,8 @@ describe Feedzirra::Feed do
|
|
109
109
|
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rdf_feed).should == Feedzirra::Parser::RSS
|
110
110
|
end
|
111
111
|
|
112
|
-
it "should return the Feedzirra::Parser::
|
113
|
-
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rss_feed_burner_feed).should == Feedzirra::Parser::
|
112
|
+
it "should return the Feedzirra::Parser::RSSFeedBurner class for an rss feedburner feed" do
|
113
|
+
Feedzirra::Feed.determine_feed_parser_for_xml(sample_rss_feed_burner_feed).should == Feedzirra::Parser::RSSFeedBurner
|
114
114
|
end
|
115
115
|
|
116
116
|
it "should return the Feedzirra::Parser::RSS object for an rss 2.0 feed" do
|
@@ -254,7 +254,7 @@ describe Feedzirra::Feed do
|
|
254
254
|
|
255
255
|
describe "#add_url_to_multi" do
|
256
256
|
before(:each) do
|
257
|
-
@multi = Curl::Multi.
|
257
|
+
@multi = Curl::Multi.get([@paul_feed[:url]], {:follow_location => true}, {:pipeline => true})
|
258
258
|
@multi.stub!(:add)
|
259
259
|
@easy_curl = Curl::Easy.new(@paul_feed[:url])
|
260
260
|
|
@@ -396,7 +396,7 @@ describe Feedzirra::Feed do
|
|
396
396
|
|
397
397
|
describe "#add_feed_to_multi" do
|
398
398
|
before(:each) do
|
399
|
-
@multi = Curl::Multi.
|
399
|
+
@multi = Curl::Multi.get([@paul_feed[:url]], {:follow_location => true}, {:pipeline => true})
|
400
400
|
@multi.stub!(:add)
|
401
401
|
@easy_curl = Curl::Easy.new(@paul_feed[:url])
|
402
402
|
@feed = Feedzirra::Feed.parse(sample_feedburner_atom_feed)
|
@@ -414,7 +414,13 @@ describe Feedzirra::Feed do
|
|
414
414
|
@easy_curl.headers["User-Agent"].should == Feedzirra::Feed::USER_AGENT
|
415
415
|
end
|
416
416
|
|
417
|
-
it "should set if modified since as an option if passed"
|
417
|
+
it "should set if modified since as an option if passed" do
|
418
|
+
modified_time = Time.parse("Wed, 28 Jan 2009 04:10:32 GMT")
|
419
|
+
Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {:if_modified_since => modified_time})
|
420
|
+
modified_time.should be > @feed.last_modified
|
421
|
+
|
422
|
+
@easy_curl.headers["If-Modified-Since"].should == modified_time
|
423
|
+
end
|
418
424
|
|
419
425
|
it 'should set follow location to true' do
|
420
426
|
@easy_curl.should_receive(:follow_location=).with(true)
|
@@ -528,6 +534,14 @@ describe Feedzirra::Feed do
|
|
528
534
|
it 'should slice the feeds into groups of thirty for processing'
|
529
535
|
it "should return a feed object if a single feed is passed in"
|
530
536
|
it "should return an return an array of feed objects if multiple feeds are passed in"
|
537
|
+
|
538
|
+
it "should set if modified since as an option if passed" do
|
539
|
+
modified_time = Time.parse("Wed, 28 Jan 2009 04:10:32 GMT")
|
540
|
+
Feedzirra::Feed.should_receive(:add_url_to_multi).with(anything, anything, anything, anything, {:if_modified_since => modified_time}).any_number_of_times
|
541
|
+
|
542
|
+
@feed = Feedzirra::Feed.fetch_and_parse(sample_feedburner_atom_feed, {:if_modified_since => modified_time})
|
543
|
+
end
|
544
|
+
|
531
545
|
end
|
532
546
|
|
533
547
|
describe "#decode_content" do
|
@@ -13,6 +13,10 @@ describe Feedzirra::Parser::AtomFeedBurner do
|
|
13
13
|
it "should return false for a regular atom feed" do
|
14
14
|
Feedzirra::Parser::AtomFeedBurner.should_not be_able_to_parse(sample_atom_feed)
|
15
15
|
end
|
16
|
+
|
17
|
+
it "should return false for an rss feedburner feed" do
|
18
|
+
Feedzirra::Parser::AtomFeedBurner.should_not be_able_to_parse(sample_rss_feed_burner_feed)
|
19
|
+
end
|
16
20
|
end
|
17
21
|
|
18
22
|
describe "parsing" do
|
@@ -9,6 +9,10 @@ describe Feedzirra::Parser::Atom do
|
|
9
9
|
it "should return false for an rdf feed" do
|
10
10
|
Feedzirra::Parser::Atom.should_not be_able_to_parse(sample_rdf_feed)
|
11
11
|
end
|
12
|
+
|
13
|
+
it "should return false for an rss feedburner feed" do
|
14
|
+
Feedzirra::Parser::Atom.should_not be_able_to_parse(sample_rss_feed_burner_feed)
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
describe "parsing" do
|
@@ -9,6 +9,10 @@ describe Feedzirra::Parser::ITunesRSS do
|
|
9
9
|
it "should return fase for an atom feed" do
|
10
10
|
Feedzirra::Parser::ITunesRSS.should_not be_able_to_parse(sample_atom_feed)
|
11
11
|
end
|
12
|
+
|
13
|
+
it "should return false for an rss feedburner feed" do
|
14
|
+
Feedzirra::Parser::ITunesRSS.should_not be_able_to_parse(sample_rss_feed_burner_feed)
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
describe "parsing" do
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
3
|
+
|
4
|
+
describe Feedzirra::Parser::RSSFeedBurnerEntry do
|
5
|
+
before(:each) do
|
6
|
+
# I don't really like doing it this way because these unit test should only rely on RSSEntry,
|
7
|
+
# but this is actually how it should work. You would never just pass entry xml straight to the AtomEnry
|
8
|
+
@entry = Feedzirra::Parser::RSSFeedBurner.parse(sample_rss_feed_burner_feed).entries.first
|
9
|
+
end
|
10
|
+
|
11
|
+
after(:each) do
|
12
|
+
# We change the title in one or more specs to test []=
|
13
|
+
if @entry.title != "Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M"
|
14
|
+
@entry.title = Feedzirra::Parser::RSS.parse(sample_rss_feed_burner_feed).entries.first.title
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should parse the title" do
|
19
|
+
@entry.title.should == "Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should parse the original url" do
|
23
|
+
@entry.url.should == "http://techcrunch.com/2011/11/02/angies-list-prices-ipo-at-11-to-13-per-share-valued-at-over-600m/"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should parse the author" do
|
27
|
+
@entry.author.should == "Leena Rao"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should parse the content" do
|
31
|
+
@entry.content.should == sample_rss_feed_burner_entry_content
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should provide a summary" do
|
35
|
+
@entry.summary.should == sample_rss_feed_burner_entry_description
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should parse the published date" do
|
39
|
+
@entry.published.to_s.should == "Wed Nov 02 17:25:27 UTC 2011"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should parse the categories" do
|
43
|
+
@entry.categories.should == ["TC", "angie\\'s list"]
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should parse the guid as id" do
|
47
|
+
@entry.id.should == "http://techcrunch.com/?p=446154"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should support each" do
|
51
|
+
@entry.respond_to? :each
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should be able to list out all fields with each" do
|
55
|
+
all_fields = []
|
56
|
+
@entry.each do |field, value|
|
57
|
+
all_fields << field
|
58
|
+
end
|
59
|
+
all_fields.sort == ['author', 'categories', 'content', 'id', 'published', 'summary', 'title', 'url']
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should be able to list out all values with each" do
|
63
|
+
title_value = ''
|
64
|
+
@entry.each do |field, value|
|
65
|
+
title_value = value if field == 'title'
|
66
|
+
end
|
67
|
+
title_value.should == "Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should support checking if a field exists in the entry" do
|
71
|
+
@entry.include?('title') && @entry.include?('author')
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should allow access to fields with hash syntax" do
|
75
|
+
@entry['title'] == @entry.title
|
76
|
+
@entry['title'].should == "Angie’s List Sets Price Range IPO At $11 To $13 Per Share; Valued At Over $600M"
|
77
|
+
@entry['author'] == @entry.author
|
78
|
+
@entry['author'].should == "Leena Rao"
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should allow setting field values with hash syntax" do
|
82
|
+
@entry['title'] = "Foobar"
|
83
|
+
@entry.title.should == "Foobar"
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
2
|
+
|
3
|
+
describe Feedzirra::Parser::RSSFeedBurner do
|
4
|
+
describe "#will_parse?" do
|
5
|
+
it "should return true for a feedburner rss feed" do
|
6
|
+
Feedzirra::Parser::RSSFeedBurner.should be_able_to_parse(sample_rss_feed_burner_feed)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should return false for a regular RSS feed" do
|
10
|
+
Feedzirra::Parser::RSSFeedBurner.should_not be_able_to_parse(sample_rss_feed)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return false for a feedburner atom feed" do
|
14
|
+
Feedzirra::Parser::RSSFeedBurner.should_not be_able_to_parse(sample_feedburner_atom_feed)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should return false for an rdf feed" do
|
18
|
+
Feedzirra::Parser::RSSFeedBurner.should_not be_able_to_parse(sample_rdf_feed)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return false for a regular atom feed" do
|
22
|
+
Feedzirra::Parser::RSSFeedBurner.should_not be_able_to_parse(sample_atom_feed)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "parsing" do
|
27
|
+
before(:each) do
|
28
|
+
@feed = Feedzirra::Parser::RSSFeedBurner.parse(sample_rss_feed_burner_feed)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should parse the title" do
|
32
|
+
@feed.title.should == "TechCrunch"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should parse the description" do
|
36
|
+
@feed.description.should == "TechCrunch is a group-edited blog that profiles the companies, products and events defining and transforming the new web."
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should parse the url" do
|
40
|
+
@feed.url.should == "http://techcrunch.com"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should provide an accessor for the feed_url" do
|
44
|
+
@feed.respond_to?(:feed_url).should == true
|
45
|
+
@feed.respond_to?(:feed_url=).should == true
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should parse entries" do
|
49
|
+
@feed.entries.size.should == 20
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -11,9 +11,13 @@ describe Feedzirra::Parser::RSS do
|
|
11
11
|
# Feedzirra::RSS.should_not be_able_to_parse(sample_rdf_feed)
|
12
12
|
# end
|
13
13
|
|
14
|
-
it "should return
|
14
|
+
it "should return false for an atom feed" do
|
15
15
|
Feedzirra::Parser::RSS.should_not be_able_to_parse(sample_atom_feed)
|
16
16
|
end
|
17
|
+
|
18
|
+
it "should return false for an rss feedburner feed" do
|
19
|
+
Feedzirra::Parser::RSS.should_not be_able_to_parse(sample_rss_feed_burner_feed)
|
20
|
+
end
|
17
21
|
end
|
18
22
|
|
19
23
|
describe "parsing" do
|
data/spec/spec_helper.rb
CHANGED
@@ -34,7 +34,15 @@ def sample_rdf_entry_content
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def sample_rss_feed_burner_feed
|
37
|
-
load_sample("
|
37
|
+
load_sample("TechCrunch.xml")
|
38
|
+
end
|
39
|
+
|
40
|
+
def sample_rss_feed_burner_entry_content
|
41
|
+
load_sample("TechCrunchFirstEntry.xml")
|
42
|
+
end
|
43
|
+
|
44
|
+
def sample_rss_feed_burner_entry_description
|
45
|
+
load_sample("TechCrunchFirstEntryDescription.xml")
|
38
46
|
end
|
39
47
|
|
40
48
|
def sample_rss_feed
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feedzirra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Paul Dix
|
@@ -16,7 +15,8 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2011-09-30 00:00:00
|
18
|
+
date: 2011-09-30 00:00:00 -04:00
|
19
|
+
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: nokogiri
|
@@ -24,9 +24,8 @@ dependencies:
|
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 15
|
30
29
|
segments:
|
31
30
|
- 1
|
32
31
|
- 4
|
@@ -42,7 +41,6 @@ dependencies:
|
|
42
41
|
requirements:
|
43
42
|
- - ~>
|
44
43
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 27
|
46
44
|
segments:
|
47
45
|
- 0
|
48
46
|
- 1
|
@@ -58,7 +56,6 @@ dependencies:
|
|
58
56
|
requirements:
|
59
57
|
- - ~>
|
60
58
|
- !ruby/object:Gem::Version
|
61
|
-
hash: 29
|
62
59
|
segments:
|
63
60
|
- 0
|
64
61
|
- 7
|
@@ -72,9 +69,8 @@ dependencies:
|
|
72
69
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
70
|
none: false
|
74
71
|
requirements:
|
75
|
-
- -
|
72
|
+
- - ">="
|
76
73
|
- !ruby/object:Gem::Version
|
77
|
-
hash: 15
|
78
74
|
segments:
|
79
75
|
- 2
|
80
76
|
- 1
|
@@ -88,9 +84,8 @@ dependencies:
|
|
88
84
|
requirement: &id005 !ruby/object:Gem::Requirement
|
89
85
|
none: false
|
90
86
|
requirements:
|
91
|
-
- -
|
87
|
+
- - ~>
|
92
88
|
- !ruby/object:Gem::Version
|
93
|
-
hash: 23
|
94
89
|
segments:
|
95
90
|
- 3
|
96
91
|
- 0
|
@@ -106,7 +101,6 @@ dependencies:
|
|
106
101
|
requirements:
|
107
102
|
- - ~>
|
108
103
|
- !ruby/object:Gem::Version
|
109
|
-
hash: 31
|
110
104
|
segments:
|
111
105
|
- 1
|
112
106
|
- 2
|
@@ -122,7 +116,6 @@ dependencies:
|
|
122
116
|
requirements:
|
123
117
|
- - ~>
|
124
118
|
- !ruby/object:Gem::Version
|
125
|
-
hash: 23
|
126
119
|
segments:
|
127
120
|
- 3
|
128
121
|
- 8
|
@@ -137,12 +130,11 @@ dependencies:
|
|
137
130
|
requirements:
|
138
131
|
- - ">="
|
139
132
|
- !ruby/object:Gem::Version
|
140
|
-
hash: 63
|
141
133
|
segments:
|
142
134
|
- 0
|
143
|
-
-
|
144
|
-
-
|
145
|
-
version: 0.
|
135
|
+
- 8
|
136
|
+
- 7
|
137
|
+
version: 0.8.7
|
146
138
|
type: :runtime
|
147
139
|
version_requirements: *id008
|
148
140
|
- !ruby/object:Gem::Dependency
|
@@ -153,7 +145,6 @@ dependencies:
|
|
153
145
|
requirements:
|
154
146
|
- - ">="
|
155
147
|
- !ruby/object:Gem::Version
|
156
|
-
hash: 11
|
157
148
|
segments:
|
158
149
|
- 0
|
159
150
|
- 5
|
@@ -169,7 +160,6 @@ dependencies:
|
|
169
160
|
requirements:
|
170
161
|
- - ~>
|
171
162
|
- !ruby/object:Gem::Version
|
172
|
-
hash: 23
|
173
163
|
segments:
|
174
164
|
- 2
|
175
165
|
- 6
|
@@ -201,6 +191,8 @@ files:
|
|
201
191
|
- lib/feedzirra/parser/itunes_rss_owner.rb
|
202
192
|
- lib/feedzirra/parser/rss.rb
|
203
193
|
- lib/feedzirra/parser/rss_entry.rb
|
194
|
+
- lib/feedzirra/parser/rss_feed_burner.rb
|
195
|
+
- lib/feedzirra/parser/rss_feed_burner_entry.rb
|
204
196
|
- lib/feedzirra/parser.rb
|
205
197
|
- lib/feedzirra/version.rb
|
206
198
|
- lib/feedzirra.rb
|
@@ -220,12 +212,15 @@ files:
|
|
220
212
|
- spec/feedzirra/parser/itunes_rss_owner_spec.rb
|
221
213
|
- spec/feedzirra/parser/itunes_rss_spec.rb
|
222
214
|
- spec/feedzirra/parser/rss_entry_spec.rb
|
215
|
+
- spec/feedzirra/parser/rss_feed_burner_entry_spec.rb
|
216
|
+
- spec/feedzirra/parser/rss_feed_burner_spec.rb
|
223
217
|
- spec/feedzirra/parser/rss_spec.rb
|
224
218
|
- spec/sample_feeds/run_against_sample.rb
|
225
219
|
- spec/spec_helper.rb
|
226
220
|
- README.rdoc
|
227
221
|
- Rakefile
|
228
222
|
- .rspec
|
223
|
+
has_rdoc: true
|
229
224
|
homepage: http://github.com/pauldix/feedzirra
|
230
225
|
licenses: []
|
231
226
|
|
@@ -239,7 +234,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
239
234
|
requirements:
|
240
235
|
- - ">="
|
241
236
|
- !ruby/object:Gem::Version
|
242
|
-
hash: 3
|
243
237
|
segments:
|
244
238
|
- 0
|
245
239
|
version: "0"
|
@@ -248,14 +242,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
242
|
requirements:
|
249
243
|
- - ">="
|
250
244
|
- !ruby/object:Gem::Version
|
251
|
-
hash: 3
|
252
245
|
segments:
|
253
246
|
- 0
|
254
247
|
version: "0"
|
255
248
|
requirements: []
|
256
249
|
|
257
250
|
rubyforge_project:
|
258
|
-
rubygems_version: 1.
|
251
|
+
rubygems_version: 1.3.7
|
259
252
|
signing_key:
|
260
253
|
specification_version: 3
|
261
254
|
summary: A feed fetching and parsing library
|
@@ -276,6 +269,8 @@ test_files:
|
|
276
269
|
- spec/feedzirra/parser/itunes_rss_owner_spec.rb
|
277
270
|
- spec/feedzirra/parser/itunes_rss_spec.rb
|
278
271
|
- spec/feedzirra/parser/rss_entry_spec.rb
|
272
|
+
- spec/feedzirra/parser/rss_feed_burner_entry_spec.rb
|
273
|
+
- spec/feedzirra/parser/rss_feed_burner_spec.rb
|
279
274
|
- spec/feedzirra/parser/rss_spec.rb
|
280
275
|
- spec/sample_feeds/run_against_sample.rb
|
281
276
|
- spec/spec_helper.rb
|