feedzirra 0.0.24 → 0.0.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/.rspec +1 -0
  2. data/README.rdoc +207 -0
  3. data/Rakefile +19 -24
  4. data/lib/feedzirra.rb +7 -28
  5. data/lib/feedzirra/core_ext.rb +3 -0
  6. data/lib/{core_ext → feedzirra/core_ext}/date.rb +2 -4
  7. data/lib/{core_ext → feedzirra/core_ext}/string.rb +0 -0
  8. data/lib/feedzirra/feed.rb +99 -41
  9. data/lib/feedzirra/feed_entry_utilities.rb +12 -11
  10. data/lib/feedzirra/parser.rb +15 -0
  11. data/lib/feedzirra/parser/atom.rb +7 -13
  12. data/lib/feedzirra/parser/atom_entry.rb +4 -14
  13. data/lib/feedzirra/parser/atom_feed_burner.rb +4 -10
  14. data/lib/feedzirra/parser/atom_feed_burner_entry.rb +8 -13
  15. data/lib/feedzirra/parser/itunes_rss.rb +4 -4
  16. data/lib/feedzirra/parser/itunes_rss_item.rb +1 -1
  17. data/lib/feedzirra/parser/rss.rb +4 -10
  18. data/lib/feedzirra/parser/rss_entry.rb +2 -12
  19. data/lib/feedzirra/version.rb +3 -0
  20. data/spec/benchmarks/feed_benchmarks.rb +98 -0
  21. data/spec/benchmarks/feedzirra_benchmarks.rb +40 -0
  22. data/spec/benchmarks/fetching_benchmarks.rb +28 -0
  23. data/spec/benchmarks/parsing_benchmark.rb +30 -0
  24. data/spec/benchmarks/updating_benchmarks.rb +33 -0
  25. data/spec/feedzirra/feed_entry_utilities_spec.rb +1 -1
  26. data/spec/feedzirra/feed_spec.rb +38 -5
  27. data/spec/feedzirra/feed_utilities_spec.rb +7 -4
  28. data/spec/feedzirra/parser/atom_feed_burner_entry_spec.rb +5 -0
  29. data/spec/feedzirra/parser/atom_feed_burner_spec.rb +5 -1
  30. data/spec/feedzirra/parser/atom_spec.rb +5 -1
  31. data/spec/feedzirra/parser/itunes_rss_item_spec.rb +1 -1
  32. data/spec/feedzirra/parser/rss_entry_spec.rb +2 -1
  33. data/spec/feedzirra/parser/rss_spec.rb +5 -1
  34. data/spec/sample_feeds/run_against_sample.rb +20 -0
  35. data/spec/spec_helper.rb +10 -2
  36. metadata +141 -59
  37. data/README.textile +0 -208
  38. 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
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Feedzirra::FeedUtilities do
4
4
  before(:each) do
@@ -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.should be_able_to_parse(feed_text)
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, 15 Jun 2005 19:00:00 GMT"
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&#40;&#60;&#60;-eohtml&#41;\n&#60;html&#62;\n&#160; &#60;body&#62;\n&#160; [...]"
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 "spec"
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 "lib/feedzirra"
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
- prerelease: false
4
+ hash: 35
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 24
9
- version: 0.0.24
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: 2009-02-19 00:00:00 -05:00
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
- - 0
29
- - 0
30
- - 0
31
- version: 0.0.0
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
- - 12
45
- version: 0.0.12
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
- - 2
58
- - 3
59
- version: 0.2.3
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
- - 2
71
- - 1
72
- - 2
73
- version: 2.1.2
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: 2.3.8
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
- version: 0.3.1
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: rspec
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
- - 0
113
- version: "0"
114
- type: :development
127
+ - 3
128
+ - 8
129
+ version: "3.8"
130
+ type: :runtime
115
131
  version_requirements: *id007
116
132
  - !ruby/object:Gem::Dependency
117
- name: diff-lcs
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
- version: "0"
126
- type: :development
143
+ - 9
144
+ - 2
145
+ version: 0.9.2
146
+ type: :runtime
127
147
  version_requirements: *id008
128
- description:
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/feed_utilities.rb
151
- - lib/feedzirra/feed_entry_utilities.rb
152
- - README.textile
153
- - Rakefile
154
- - spec/spec.opts
155
- - spec/spec_helper.rb
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/parser/atom_spec.rb
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/itunes_rss_spec.rb
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/rss_spec.rb
221
+ - spec/feedzirra/parser/itunes_rss_spec.rb
165
222
  - spec/feedzirra/parser/rss_entry_spec.rb
166
- - spec/feedzirra/feed_utilities_spec.rb
167
- - spec/feedzirra/feed_entry_utilities_spec.rb
168
- has_rdoc: true
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.3.6
258
+ rubygems_version: 1.8.5
195
259
  signing_key:
196
- specification_version: 2
197
- summary: "A feed fetching and parsing library that treats the internet like Godzilla treats Japan: it dominates and eats all."
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