feedzirra 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|