feedzirra 0.0.24 → 0.0.30
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/.rspec +1 -0
- data/README.rdoc +207 -0
- data/Rakefile +19 -24
- data/lib/feedzirra.rb +7 -28
- data/lib/feedzirra/core_ext.rb +3 -0
- data/lib/{core_ext → feedzirra/core_ext}/date.rb +2 -4
- data/lib/{core_ext → feedzirra/core_ext}/string.rb +0 -0
- data/lib/feedzirra/feed.rb +99 -41
- data/lib/feedzirra/feed_entry_utilities.rb +12 -11
- data/lib/feedzirra/parser.rb +15 -0
- data/lib/feedzirra/parser/atom.rb +7 -13
- data/lib/feedzirra/parser/atom_entry.rb +4 -14
- data/lib/feedzirra/parser/atom_feed_burner.rb +4 -10
- data/lib/feedzirra/parser/atom_feed_burner_entry.rb +8 -13
- data/lib/feedzirra/parser/itunes_rss.rb +4 -4
- data/lib/feedzirra/parser/itunes_rss_item.rb +1 -1
- data/lib/feedzirra/parser/rss.rb +4 -10
- data/lib/feedzirra/parser/rss_entry.rb +2 -12
- data/lib/feedzirra/version.rb +3 -0
- data/spec/benchmarks/feed_benchmarks.rb +98 -0
- data/spec/benchmarks/feedzirra_benchmarks.rb +40 -0
- data/spec/benchmarks/fetching_benchmarks.rb +28 -0
- data/spec/benchmarks/parsing_benchmark.rb +30 -0
- data/spec/benchmarks/updating_benchmarks.rb +33 -0
- data/spec/feedzirra/feed_entry_utilities_spec.rb +1 -1
- data/spec/feedzirra/feed_spec.rb +38 -5
- data/spec/feedzirra/feed_utilities_spec.rb +7 -4
- data/spec/feedzirra/parser/atom_feed_burner_entry_spec.rb +5 -0
- data/spec/feedzirra/parser/atom_feed_burner_spec.rb +5 -1
- data/spec/feedzirra/parser/atom_spec.rb +5 -1
- data/spec/feedzirra/parser/itunes_rss_item_spec.rb +1 -1
- data/spec/feedzirra/parser/rss_entry_spec.rb +2 -1
- data/spec/feedzirra/parser/rss_spec.rb +5 -1
- data/spec/sample_feeds/run_against_sample.rb +20 -0
- data/spec/spec_helper.rb +10 -2
- metadata +141 -59
- data/README.textile +0 -208
- data/spec/spec.opts +0 -2
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require File.dirname(__FILE__) + '/../../lib/feedzirra.rb'
|
3
|
+
|
4
|
+
require 'open-uri'
|
5
|
+
|
6
|
+
require 'benchmark'
|
7
|
+
include Benchmark
|
8
|
+
|
9
|
+
iterations = 10
|
10
|
+
urls = File.readlines(File.dirname(__FILE__) + "/../sample_feeds/successful_feed_urls.txt").slice(0, 20)
|
11
|
+
puts "benchmarks on #{urls.size} feeds"
|
12
|
+
puts "************************************"
|
13
|
+
benchmark do |t|
|
14
|
+
t.report("feedzirra open uri") do
|
15
|
+
iterations.times do
|
16
|
+
urls.each do |url|
|
17
|
+
Feedzirra::Feed.parse(open(url, "User-Agent" => "feedzirra http://github.com/pauldix/feedzirra/tree/master").read)
|
18
|
+
$stdout.print '.'; $stdout.flush
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
t.report("feedzirra fetch and parse") do
|
24
|
+
iterations.times do
|
25
|
+
Feedzirra::Feed.fetch_and_parse(urls, :on_success => lambda { |url, feed| $stdout.print '.'; $stdout.flush })
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../lib/feedzirra.rb'
|
2
|
+
require 'rfeedparser'
|
3
|
+
require 'feed-normalizer'
|
4
|
+
|
5
|
+
require 'benchmark'
|
6
|
+
include Benchmark
|
7
|
+
|
8
|
+
iterations = 50
|
9
|
+
xml = File.read(File.dirname(__FILE__) + '/../sample_feeds/PaulDixExplainsNothing.xml')
|
10
|
+
|
11
|
+
benchmark do |t|
|
12
|
+
t.report("feedzirra") do
|
13
|
+
iterations.times do
|
14
|
+
Feedzirra::Feed.parse(xml)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
t.report("rfeedparser") do
|
19
|
+
iterations.times do
|
20
|
+
FeedParser.parse(xml)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
t.report("feed-normalizer") do
|
25
|
+
iterations.times do
|
26
|
+
# have to use the :force option to make feed-normalizer parse an atom feed
|
27
|
+
FeedNormalizer::FeedNormalizer.parse(xml, :force_parser => FeedNormalizer::SimpleRssParser)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require File.dirname(__FILE__) + '/../../lib/feedzirra.rb'
|
3
|
+
|
4
|
+
require 'benchmark'
|
5
|
+
include Benchmark
|
6
|
+
|
7
|
+
urls = File.readlines(File.dirname(__FILE__) + "/../sample_feeds/successful_feed_urls.txt")
|
8
|
+
puts "benchmarks on #{urls.size} feeds"
|
9
|
+
puts "************************************"
|
10
|
+
benchmark do |t|
|
11
|
+
feeds = {}
|
12
|
+
t.report("feedzirra fetch and parse") do
|
13
|
+
feeds = Feedzirra::Feed.fetch_and_parse(urls,
|
14
|
+
:on_success => lambda { |url, feed| $stdout.print '.'; $stdout.flush },
|
15
|
+
:on_failure => lambda {|url, response_code, header, body| puts "#{response_code} ERROR on #{url}"})
|
16
|
+
end
|
17
|
+
|
18
|
+
# curb caches the dns lookups for 60 seconds. to make things fair we have to wait for the cache to expire
|
19
|
+
puts "sleeping to wait for dns cache to clear"
|
20
|
+
65.times {$stdout.print('.'); sleep(1)}
|
21
|
+
puts "done"
|
22
|
+
|
23
|
+
updated_feeds = []
|
24
|
+
t.report("feedzirra update") do
|
25
|
+
updated_feeds = Feedzirra::Feed.update(feeds.values.reject {|f| f.class == Fixnum},
|
26
|
+
:on_success => lambda {|feed| $stdout.print '.'; $stdout.flush},
|
27
|
+
:on_failure => lambda {|feed, response_code, header, body| puts "#{response_code} ERROR on #{feed.feed_url}"})
|
28
|
+
end
|
29
|
+
|
30
|
+
updated_feeds.each do |feed|
|
31
|
+
puts feed.feed_url if feed.updated?
|
32
|
+
end
|
33
|
+
end
|
data/spec/feedzirra/feed_spec.rb
CHANGED
@@ -1,20 +1,39 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
2
|
|
3
3
|
describe Feedzirra::Feed do
|
4
|
+
|
5
|
+
describe "#add_common_feed_element" do
|
6
|
+
before(:all) do
|
7
|
+
Feedzirra::Feed.add_common_feed_element("generator")
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should parse the added element out of Atom feeds" do
|
11
|
+
Feedzirra::Feed.parse(sample_wfw_feed).generator.should == "TypePad"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should parse the added element out of Atom Feedburner feeds" do
|
15
|
+
Feedzirra::Parser::Atom.new.should respond_to(:generator)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should parse the added element out of RSS feeds" do
|
19
|
+
Feedzirra::Parser::RSS.new.should respond_to(:generator)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
4
23
|
describe "#add_common_feed_entry_element" do
|
5
24
|
before(:all) do
|
6
25
|
Feedzirra::Feed.add_common_feed_entry_element("wfw:commentRss", :as => :comment_rss)
|
7
26
|
end
|
8
27
|
|
9
|
-
it "should parse the added element out of Atom feeds" do
|
28
|
+
it "should parse the added element out of Atom feeds entries" do
|
10
29
|
Feedzirra::Feed.parse(sample_wfw_feed).entries.first.comment_rss.should == "this is the new val"
|
11
30
|
end
|
12
31
|
|
13
|
-
it "should parse the added element out of Atom Feedburner feeds" do
|
32
|
+
it "should parse the added element out of Atom Feedburner feeds entries" do
|
14
33
|
Feedzirra::Parser::AtomEntry.new.should respond_to(:comment_rss)
|
15
34
|
end
|
16
35
|
|
17
|
-
it "should parse the added element out of RSS feeds" do
|
36
|
+
it "should parse the added element out of RSS feeds entries" do
|
18
37
|
Feedzirra::Parser::RSSEntry.new.should respond_to(:comment_rss)
|
19
38
|
end
|
20
39
|
end
|
@@ -107,7 +126,7 @@ describe Feedzirra::Feed do
|
|
107
126
|
describe "when adding feed types" do
|
108
127
|
it "should prioritize added types over the built in ones" do
|
109
128
|
feed_text = "Atom asdf"
|
110
|
-
Feedzirra::Parser::Atom.
|
129
|
+
Feedzirra::Parser::Atom.stub!(:able_to_parse?).and_return(true)
|
111
130
|
new_feed_type = Class.new do
|
112
131
|
def self.able_to_parse?(val)
|
113
132
|
true
|
@@ -300,7 +319,7 @@ describe Feedzirra::Feed do
|
|
300
319
|
end
|
301
320
|
|
302
321
|
it 'should parse the xml' do
|
303
|
-
Feedzirra::Parser::AtomFeedBurner.should_receive(:parse).with(@paul_feed[:xml]).and_return(@feed)
|
322
|
+
Feedzirra::Parser::AtomFeedBurner.should_receive(:parse).with(@paul_feed[:xml], an_instance_of(Proc)).and_return(@feed)
|
304
323
|
Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
|
305
324
|
@easy_curl.on_success.call(@easy_curl)
|
306
325
|
end
|
@@ -524,12 +543,26 @@ describe Feedzirra::Feed do
|
|
524
543
|
Feedzirra::Feed.decode_content(@curl_easy)
|
525
544
|
end
|
526
545
|
|
546
|
+
it 'should decode the response body using gzip if the Content-Encoding: is gzip even when the case is wrong' do
|
547
|
+
@curl_easy.stub!(:header_str).and_return('content-encoding: gzip')
|
548
|
+
string_io = mock('stringio', :read => @curl_easy.body_str, :close => true)
|
549
|
+
StringIO.should_receive(:new).and_return(string_io)
|
550
|
+
Zlib::GzipReader.should_receive(:new).with(string_io).and_return(string_io)
|
551
|
+
Feedzirra::Feed.decode_content(@curl_easy)
|
552
|
+
end
|
553
|
+
|
527
554
|
it 'should deflate the response body using inflate if the Content-Encoding: is deflate' do
|
528
555
|
@curl_easy.stub!(:header_str).and_return('Content-Encoding: deflate')
|
529
556
|
Zlib::Inflate.should_receive(:inflate).with(@curl_easy.body_str)
|
530
557
|
Feedzirra::Feed.decode_content(@curl_easy)
|
531
558
|
end
|
532
559
|
|
560
|
+
it 'should deflate the response body using inflate if the Content-Encoding: is deflate event if the case is wrong' do
|
561
|
+
@curl_easy.stub!(:header_str).and_return('content-encoding: deflate')
|
562
|
+
Zlib::Inflate.should_receive(:inflate).with(@curl_easy.body_str)
|
563
|
+
Feedzirra::Feed.decode_content(@curl_easy)
|
564
|
+
end
|
565
|
+
|
533
566
|
it 'should return the response body if it is not encoded' do
|
534
567
|
@curl_easy.stub!(:header_str).and_return('')
|
535
568
|
Feedzirra::Feed.decode_content(@curl_easy).should == '<xml></xml>'
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'active_support'
|
2
4
|
|
3
5
|
describe Feedzirra::FeedUtilities do
|
4
6
|
before(:each) do
|
@@ -31,8 +33,9 @@ describe Feedzirra::FeedUtilities do
|
|
31
33
|
it "should provide a last_modified accessor" do
|
32
34
|
feed = @klass.new
|
33
35
|
time = Time.now
|
34
|
-
feed.last_modified = time
|
36
|
+
feed.last_modified = time
|
35
37
|
feed.last_modified.should == time
|
38
|
+
feed.last_modified.class.should == Time
|
36
39
|
end
|
37
40
|
|
38
41
|
it "should return new_entries? as true when entries are put into new_entries" do
|
@@ -121,9 +124,9 @@ describe Feedzirra::FeedUtilities do
|
|
121
124
|
@old_entry = Feedzirra::Parser::AtomEntry.new
|
122
125
|
@old_entry.url = "http://pauldix.net/old.html"
|
123
126
|
@old_entry.published = Time.now.to_s
|
124
|
-
@new_entry = Feedzirra::Parser::AtomEntry.new
|
127
|
+
@new_entry = Feedzirra::Parser::AtomEntry.new
|
125
128
|
@new_entry.url = "http://pauldix.net/new.html"
|
126
|
-
@new_entry.published = (Time.now + 10).to_s
|
129
|
+
@new_entry.published = (Time.now + 10).to_s
|
127
130
|
@feed.entries << @old_entry
|
128
131
|
@updated_feed.entries << @new_entry
|
129
132
|
@updated_feed.entries << @old_entry
|
@@ -131,7 +134,7 @@ describe Feedzirra::FeedUtilities do
|
|
131
134
|
|
132
135
|
it "should update last-modified from the latest entry date" do
|
133
136
|
@feed.update_from_feed(@updated_feed)
|
134
|
-
@feed.last_modified.should == @new_entry.published
|
137
|
+
@feed.last_modified.should == @new_entry.published
|
135
138
|
end
|
136
139
|
|
137
140
|
it "should put new entries into new_entries" do
|
@@ -20,6 +20,11 @@ describe Feedzirra::Parser::AtomFeedBurnerEntry do
|
|
20
20
|
@entry.url.should == "http://www.pauldix.net/2009/01/making-a-ruby-c-library-even-faster.html"
|
21
21
|
end
|
22
22
|
|
23
|
+
it "should parse the url when there is no alternate" do
|
24
|
+
entry = Feedzirra::Parser::AtomFeedBurner.parse(File.read("#{File.dirname(__FILE__)}/../../sample_feeds/FeedBurnerUrlNoAlternate.xml")).entries.first
|
25
|
+
entry.url.should == 'http://example.com/QQQQ.html'
|
26
|
+
end
|
27
|
+
|
23
28
|
it "should parse the author" do
|
24
29
|
@entry.author.should == "Paul Dix"
|
25
30
|
end
|
@@ -23,7 +23,11 @@ describe Feedzirra::Parser::AtomFeedBurner do
|
|
23
23
|
it "should parse the title" do
|
24
24
|
@feed.title.should == "Paul Dix Explains Nothing"
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
|
+
it "should parse the description" do
|
28
|
+
@feed.description.should == "Entrepreneurship, programming, software development, politics, NYC, and random thoughts."
|
29
|
+
end
|
30
|
+
|
27
31
|
it "should parse the url" do
|
28
32
|
@feed.url.should == "http://www.pauldix.net/"
|
29
33
|
end
|
@@ -19,7 +19,11 @@ describe Feedzirra::Parser::Atom do
|
|
19
19
|
it "should parse the title" do
|
20
20
|
@feed.title.should == "Amazon Web Services Blog"
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
|
+
it "should parse the description" do
|
24
|
+
@feed.description.should == "Amazon Web Services, Products, Tools, and Developer Information..."
|
25
|
+
end
|
26
|
+
|
23
27
|
it "should parse the url" do
|
24
28
|
@feed.url.should == "http://aws.typepad.com/aws/"
|
25
29
|
end
|
@@ -34,7 +34,7 @@ describe Feedzirra::Parser::ITunesRSSItem do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should parse the published date" do
|
37
|
-
@item.published.should == "Wed
|
37
|
+
@item.published.to_s.should == "Wed Jun 15 19:00:00 UTC 2005"
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should parse the duration" do
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
|
2
3
|
|
3
4
|
describe Feedzirra::Parser::RSSEntry do
|
@@ -27,7 +28,7 @@ describe Feedzirra::Parser::RSSEntry do
|
|
27
28
|
@entry.summary.should == "Oops! When I released nokogiri version 1.0.7, I totally forgot to talk about Nokogiri::Slop() feature that was added. Why is it called \"slop\"? It lets you sloppily explore documents. Basically, it decorates your document with method_missing() that allows you to search your document via method calls.\nGiven this document:\n\ndoc = Nokogiri::Slop(<<-eohtml)\n<html>\n  <body>\n  [...]"
|
28
29
|
end
|
29
30
|
|
30
|
-
it "should parse the published date" do
|
31
|
+
it "should parse the published date" do
|
31
32
|
@entry.published.to_s.should == "Thu Dec 04 17:17:49 UTC 2008"
|
32
33
|
end
|
33
34
|
|
@@ -24,7 +24,11 @@ describe Feedzirra::Parser::RSS do
|
|
24
24
|
it "should parse the title" do
|
25
25
|
@feed.title.should == "Tender Lovemaking"
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
|
+
it "should parse the description" do
|
29
|
+
@feed.description.should == "The act of making love, tenderly."
|
30
|
+
end
|
31
|
+
|
28
32
|
it "should parse the url" do
|
29
33
|
@feed.url.should == "http://tenderlovemaking.com"
|
30
34
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require File.dirname(__FILE__) + "/../../lib/feedzirra.rb"
|
3
|
+
|
4
|
+
feed_urls = File.readlines(File.dirname(__FILE__) + "/top5kfeeds.dat").collect {|line| line.split.first}
|
5
|
+
|
6
|
+
success = lambda do |url, feed|
|
7
|
+
puts "SUCCESS - #{feed.title} - #{url}"
|
8
|
+
end
|
9
|
+
|
10
|
+
failed_feeds = []
|
11
|
+
failure = lambda do |url, response_code, header, body|
|
12
|
+
failed_feeds << url if response_code == 200
|
13
|
+
puts "*********** FAILED with #{response_code} on #{url}"
|
14
|
+
end
|
15
|
+
|
16
|
+
Feedzirra::Feed.fetch_and_parse(feed_urls, :on_success => success, :on_failure => failure)
|
17
|
+
|
18
|
+
File.open("./failed_urls.txt", "w") do |f|
|
19
|
+
f.write failed_feeds.join("\n")
|
20
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require "rubygems"
|
2
|
-
require "
|
2
|
+
require "rspec"
|
3
3
|
|
4
4
|
# gem install redgreen for colored test output
|
5
5
|
begin require "redgreen" unless ENV['TM_CURRENT_LINE']; rescue LoadError; end
|
@@ -7,7 +7,7 @@ begin require "redgreen" unless ENV['TM_CURRENT_LINE']; rescue LoadError; end
|
|
7
7
|
path = File.expand_path(File.dirname(__FILE__) + "/../lib/")
|
8
8
|
$LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
|
9
9
|
|
10
|
-
require "
|
10
|
+
require "feedzirra"
|
11
11
|
|
12
12
|
def load_sample(filename)
|
13
13
|
File.read("#{File.dirname(__FILE__)}/sample_feeds/#{filename}")
|
@@ -55,4 +55,12 @@ end
|
|
55
55
|
|
56
56
|
def sample_wfw_feed
|
57
57
|
load_sample("PaulDixExplainsNothingWFW.xml")
|
58
|
+
end
|
59
|
+
|
60
|
+
# http://eigenclass.org/hiki/Changes+in+Ruby+1.9#l156
|
61
|
+
# Default Time.to_s changed in 1.9, monkeypatching it back
|
62
|
+
class Time
|
63
|
+
def to_s
|
64
|
+
strftime("%a %b %d %H:%M:%S %Z %Y")
|
65
|
+
end
|
58
66
|
end
|
metadata
CHANGED
@@ -1,131 +1,183 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feedzirra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 35
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
9
|
+
- 30
|
10
|
+
version: 0.0.30
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Paul Dix
|
14
|
+
- Julien Kirch
|
13
15
|
autorequire:
|
14
16
|
bindir: bin
|
15
17
|
cert_chain: []
|
16
18
|
|
17
|
-
date:
|
18
|
-
default_executable:
|
19
|
+
date: 2011-07-20 00:00:00 Z
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: nokogiri
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
|
-
- -
|
27
|
+
- - ~>
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
27
30
|
segments:
|
28
|
-
-
|
29
|
-
-
|
30
|
-
-
|
31
|
-
version:
|
31
|
+
- 1
|
32
|
+
- 4
|
33
|
+
- 4
|
34
|
+
version: 1.4.4
|
32
35
|
type: :runtime
|
33
36
|
version_requirements: *id001
|
34
37
|
- !ruby/object:Gem::Dependency
|
35
38
|
name: sax-machine
|
36
39
|
prerelease: false
|
37
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
38
42
|
requirements:
|
39
|
-
- -
|
43
|
+
- - ~>
|
40
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 55
|
41
46
|
segments:
|
42
47
|
- 0
|
43
48
|
- 0
|
44
|
-
-
|
45
|
-
version: 0.0.
|
49
|
+
- 20
|
50
|
+
version: 0.0.20
|
46
51
|
type: :runtime
|
47
52
|
version_requirements: *id002
|
48
53
|
- !ruby/object:Gem::Dependency
|
49
54
|
name: curb
|
50
55
|
prerelease: false
|
51
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
52
58
|
requirements:
|
53
|
-
- -
|
59
|
+
- - ~>
|
54
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 29
|
55
62
|
segments:
|
56
63
|
- 0
|
57
|
-
-
|
58
|
-
-
|
59
|
-
version: 0.
|
64
|
+
- 7
|
65
|
+
- 15
|
66
|
+
version: 0.7.15
|
60
67
|
type: :runtime
|
61
68
|
version_requirements: *id003
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
70
|
name: builder
|
64
71
|
prerelease: false
|
65
72
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
66
74
|
requirements:
|
67
|
-
- -
|
75
|
+
- - ~>
|
68
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 7
|
69
78
|
segments:
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
version:
|
79
|
+
- 3
|
80
|
+
- 0
|
81
|
+
- 0
|
82
|
+
version: 3.0.0
|
74
83
|
type: :runtime
|
75
84
|
version_requirements: *id004
|
76
85
|
- !ruby/object:Gem::Dependency
|
77
86
|
name: activesupport
|
78
87
|
prerelease: false
|
79
88
|
requirement: &id005 !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
80
90
|
requirements:
|
81
|
-
- -
|
91
|
+
- - ~>
|
82
92
|
- !ruby/object:Gem::Version
|
93
|
+
hash: 23
|
83
94
|
segments:
|
84
|
-
- 2
|
85
95
|
- 3
|
96
|
+
- 0
|
86
97
|
- 8
|
87
|
-
version:
|
98
|
+
version: 3.0.8
|
88
99
|
type: :runtime
|
89
100
|
version_requirements: *id005
|
90
101
|
- !ruby/object:Gem::Dependency
|
91
102
|
name: loofah
|
92
103
|
prerelease: false
|
93
104
|
requirement: &id006 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
94
106
|
requirements:
|
95
|
-
- -
|
107
|
+
- - ~>
|
96
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 23
|
97
110
|
segments:
|
98
|
-
- 0
|
99
|
-
- 3
|
100
111
|
- 1
|
101
|
-
|
112
|
+
- 0
|
113
|
+
- 0
|
114
|
+
version: 1.0.0
|
102
115
|
type: :runtime
|
103
116
|
version_requirements: *id006
|
104
117
|
- !ruby/object:Gem::Dependency
|
105
|
-
name:
|
118
|
+
name: rdoc
|
106
119
|
prerelease: false
|
107
120
|
requirement: &id007 !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
108
122
|
requirements:
|
109
|
-
- -
|
123
|
+
- - ~>
|
110
124
|
- !ruby/object:Gem::Version
|
125
|
+
hash: 23
|
111
126
|
segments:
|
112
|
-
-
|
113
|
-
|
114
|
-
|
127
|
+
- 3
|
128
|
+
- 8
|
129
|
+
version: "3.8"
|
130
|
+
type: :runtime
|
115
131
|
version_requirements: *id007
|
116
132
|
- !ruby/object:Gem::Dependency
|
117
|
-
name:
|
133
|
+
name: rake
|
118
134
|
prerelease: false
|
119
135
|
requirement: &id008 !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
120
137
|
requirements:
|
121
138
|
- - ">="
|
122
139
|
- !ruby/object:Gem::Version
|
140
|
+
hash: 63
|
123
141
|
segments:
|
124
142
|
- 0
|
125
|
-
|
126
|
-
|
143
|
+
- 9
|
144
|
+
- 2
|
145
|
+
version: 0.9.2
|
146
|
+
type: :runtime
|
127
147
|
version_requirements: *id008
|
128
|
-
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
name: i18n
|
150
|
+
prerelease: false
|
151
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
153
|
+
requirements:
|
154
|
+
- - ~>
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
hash: 7
|
157
|
+
segments:
|
158
|
+
- 0
|
159
|
+
- 6
|
160
|
+
- 0
|
161
|
+
version: 0.6.0
|
162
|
+
type: :runtime
|
163
|
+
version_requirements: *id009
|
164
|
+
- !ruby/object:Gem::Dependency
|
165
|
+
name: rspec
|
166
|
+
prerelease: false
|
167
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ~>
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
hash: 23
|
173
|
+
segments:
|
174
|
+
- 2
|
175
|
+
- 6
|
176
|
+
- 0
|
177
|
+
version: 2.6.0
|
178
|
+
type: :development
|
179
|
+
version_requirements: *id010
|
180
|
+
description: "A feed fetching and parsing library that treats the internet like Godzilla treats Japan: it dominates and eats all."
|
129
181
|
email: paul@pauldix.net
|
130
182
|
executables: []
|
131
183
|
|
@@ -134,10 +186,12 @@ extensions: []
|
|
134
186
|
extra_rdoc_files: []
|
135
187
|
|
136
188
|
files:
|
137
|
-
- lib/core_ext/date.rb
|
138
|
-
- lib/core_ext/string.rb
|
139
|
-
- lib/feedzirra.rb
|
189
|
+
- lib/feedzirra/core_ext/date.rb
|
190
|
+
- lib/feedzirra/core_ext/string.rb
|
191
|
+
- lib/feedzirra/core_ext.rb
|
140
192
|
- lib/feedzirra/feed.rb
|
193
|
+
- lib/feedzirra/feed_entry_utilities.rb
|
194
|
+
- lib/feedzirra/feed_utilities.rb
|
141
195
|
- lib/feedzirra/parser/atom.rb
|
142
196
|
- lib/feedzirra/parser/atom_entry.rb
|
143
197
|
- lib/feedzirra/parser/atom_feed_burner.rb
|
@@ -147,25 +201,31 @@ files:
|
|
147
201
|
- lib/feedzirra/parser/itunes_rss_owner.rb
|
148
202
|
- lib/feedzirra/parser/rss.rb
|
149
203
|
- lib/feedzirra/parser/rss_entry.rb
|
150
|
-
- lib/feedzirra/
|
151
|
-
- lib/feedzirra/
|
152
|
-
-
|
153
|
-
-
|
154
|
-
- spec/
|
155
|
-
- spec/
|
204
|
+
- lib/feedzirra/parser.rb
|
205
|
+
- lib/feedzirra/version.rb
|
206
|
+
- lib/feedzirra.rb
|
207
|
+
- spec/benchmarks/feed_benchmarks.rb
|
208
|
+
- spec/benchmarks/feedzirra_benchmarks.rb
|
209
|
+
- spec/benchmarks/fetching_benchmarks.rb
|
210
|
+
- spec/benchmarks/parsing_benchmark.rb
|
211
|
+
- spec/benchmarks/updating_benchmarks.rb
|
212
|
+
- spec/feedzirra/feed_entry_utilities_spec.rb
|
156
213
|
- spec/feedzirra/feed_spec.rb
|
157
|
-
- spec/feedzirra/
|
214
|
+
- spec/feedzirra/feed_utilities_spec.rb
|
158
215
|
- spec/feedzirra/parser/atom_entry_spec.rb
|
159
|
-
- spec/feedzirra/parser/atom_feed_burner_spec.rb
|
160
216
|
- spec/feedzirra/parser/atom_feed_burner_entry_spec.rb
|
161
|
-
- spec/feedzirra/parser/
|
217
|
+
- spec/feedzirra/parser/atom_feed_burner_spec.rb
|
218
|
+
- spec/feedzirra/parser/atom_spec.rb
|
162
219
|
- spec/feedzirra/parser/itunes_rss_item_spec.rb
|
163
220
|
- spec/feedzirra/parser/itunes_rss_owner_spec.rb
|
164
|
-
- spec/feedzirra/parser/
|
221
|
+
- spec/feedzirra/parser/itunes_rss_spec.rb
|
165
222
|
- spec/feedzirra/parser/rss_entry_spec.rb
|
166
|
-
- spec/feedzirra/
|
167
|
-
- spec/
|
168
|
-
|
223
|
+
- spec/feedzirra/parser/rss_spec.rb
|
224
|
+
- spec/sample_feeds/run_against_sample.rb
|
225
|
+
- spec/spec_helper.rb
|
226
|
+
- README.rdoc
|
227
|
+
- Rakefile
|
228
|
+
- .rspec
|
169
229
|
homepage: http://github.com/pauldix/feedzirra
|
170
230
|
licenses: []
|
171
231
|
|
@@ -175,25 +235,47 @@ rdoc_options: []
|
|
175
235
|
require_paths:
|
176
236
|
- lib
|
177
237
|
required_ruby_version: !ruby/object:Gem::Requirement
|
238
|
+
none: false
|
178
239
|
requirements:
|
179
240
|
- - ">="
|
180
241
|
- !ruby/object:Gem::Version
|
242
|
+
hash: 3
|
181
243
|
segments:
|
182
244
|
- 0
|
183
245
|
version: "0"
|
184
246
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
247
|
+
none: false
|
185
248
|
requirements:
|
186
249
|
- - ">="
|
187
250
|
- !ruby/object:Gem::Version
|
251
|
+
hash: 3
|
188
252
|
segments:
|
189
253
|
- 0
|
190
254
|
version: "0"
|
191
255
|
requirements: []
|
192
256
|
|
193
257
|
rubyforge_project:
|
194
|
-
rubygems_version: 1.
|
258
|
+
rubygems_version: 1.8.5
|
195
259
|
signing_key:
|
196
|
-
specification_version:
|
197
|
-
summary:
|
198
|
-
test_files:
|
199
|
-
|
260
|
+
specification_version: 3
|
261
|
+
summary: A feed fetching and parsing library
|
262
|
+
test_files:
|
263
|
+
- spec/benchmarks/feed_benchmarks.rb
|
264
|
+
- spec/benchmarks/feedzirra_benchmarks.rb
|
265
|
+
- spec/benchmarks/fetching_benchmarks.rb
|
266
|
+
- spec/benchmarks/parsing_benchmark.rb
|
267
|
+
- spec/benchmarks/updating_benchmarks.rb
|
268
|
+
- spec/feedzirra/feed_entry_utilities_spec.rb
|
269
|
+
- spec/feedzirra/feed_spec.rb
|
270
|
+
- spec/feedzirra/feed_utilities_spec.rb
|
271
|
+
- spec/feedzirra/parser/atom_entry_spec.rb
|
272
|
+
- spec/feedzirra/parser/atom_feed_burner_entry_spec.rb
|
273
|
+
- spec/feedzirra/parser/atom_feed_burner_spec.rb
|
274
|
+
- spec/feedzirra/parser/atom_spec.rb
|
275
|
+
- spec/feedzirra/parser/itunes_rss_item_spec.rb
|
276
|
+
- spec/feedzirra/parser/itunes_rss_owner_spec.rb
|
277
|
+
- spec/feedzirra/parser/itunes_rss_spec.rb
|
278
|
+
- spec/feedzirra/parser/rss_entry_spec.rb
|
279
|
+
- spec/feedzirra/parser/rss_spec.rb
|
280
|
+
- spec/sample_feeds/run_against_sample.rb
|
281
|
+
- spec/spec_helper.rb
|