feedzirra 0.2.1 → 0.2.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.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -1
  3. data/.travis.yml +3 -3
  4. data/{HISTORY.md → CHANGELOG.md} +32 -7
  5. data/Gemfile +4 -1
  6. data/Guardfile +0 -1
  7. data/README.md +102 -87
  8. data/Rakefile +1 -1
  9. data/feedzirra.gemspec +2 -1
  10. data/lib/feedzirra/core_ext/date.rb +1 -1
  11. data/lib/feedzirra/core_ext/string.rb +2 -2
  12. data/lib/feedzirra/feed.rb +16 -16
  13. data/lib/feedzirra/feed_entry_utilities.rb +5 -5
  14. data/lib/feedzirra/parser/atom_entry.rb +2 -2
  15. data/lib/feedzirra/parser/atom_feed_burner.rb +1 -1
  16. data/lib/feedzirra/parser/atom_feed_burner_entry.rb +2 -2
  17. data/lib/feedzirra/parser/google_docs_atom_entry.rb +1 -1
  18. data/lib/feedzirra/parser/itunes_rss_item.rb +2 -2
  19. data/lib/feedzirra/parser/itunes_rss_owner.rb +3 -3
  20. data/lib/feedzirra/parser/rss.rb +1 -1
  21. data/lib/feedzirra/parser/rss_entry.rb +7 -6
  22. data/lib/feedzirra/parser/rss_feed_burner.rb +1 -1
  23. data/lib/feedzirra/parser/rss_feed_burner_entry.rb +1 -1
  24. data/lib/feedzirra/parser.rb +1 -1
  25. data/lib/feedzirra/version.rb +1 -1
  26. data/lib/feedzirra.rb +1 -1
  27. data/spec/benchmarks/feed_benchmarks.rb +7 -7
  28. data/spec/benchmarks/feedzirra_benchmarks.rb +1 -1
  29. data/spec/benchmarks/fetching_benchmarks.rb +3 -3
  30. data/spec/benchmarks/parsing_benchmark.rb +1 -1
  31. data/spec/benchmarks/updating_benchmarks.rb +6 -6
  32. data/spec/feedzirra/feed_entry_utilities_spec.rb +11 -7
  33. data/spec/feedzirra/feed_spec.rb +85 -85
  34. data/spec/feedzirra/feed_utilities_spec.rb +22 -22
  35. data/spec/feedzirra/parser/atom_entry_spec.rb +1 -1
  36. data/spec/feedzirra/parser/atom_feed_burner_entry_spec.rb +7 -7
  37. data/spec/feedzirra/parser/atom_feed_burner_spec.rb +7 -7
  38. data/spec/feedzirra/parser/atom_spec.rb +9 -9
  39. data/spec/feedzirra/parser/itunes_rss_item_spec.rb +11 -11
  40. data/spec/feedzirra/parser/itunes_rss_owner_spec.rb +4 -4
  41. data/spec/feedzirra/parser/itunes_rss_spec.rb +8 -8
  42. data/spec/feedzirra/parser/rss_feed_burner_entry_spec.rb +1 -1
  43. data/spec/feedzirra/parser/rss_feed_burner_spec.rb +8 -8
  44. data/spec/feedzirra/parser/rss_spec.rb +6 -6
  45. data/spec/spec_helper.rb +4 -3
  46. metadata +10 -21
@@ -24,20 +24,20 @@ describe Feedzirra::Feed do
24
24
  before(:all) do
25
25
  Feedzirra::Feed.add_common_feed_entry_element("wfw:commentRss", :as => :comment_rss)
26
26
  end
27
-
27
+
28
28
  it "should parse the added element out of Atom feeds entries" do
29
29
  Feedzirra::Feed.parse(sample_wfw_feed).entries.first.comment_rss.should == "this is the new val"
30
30
  end
31
-
31
+
32
32
  it "should parse the added element out of Atom Feedburner feeds entries" do
33
33
  Feedzirra::Parser::AtomEntry.new.should respond_to(:comment_rss)
34
34
  end
35
-
35
+
36
36
  it "should parse the added element out of RSS feeds entries" do
37
37
  Feedzirra::Parser::RSSEntry.new.should respond_to(:comment_rss)
38
38
  end
39
39
  end
40
-
40
+
41
41
  describe "#parse" do # many of these tests are redundant with the specific feed type tests, but I put them here for completeness
42
42
  context "when there's an available parser" do
43
43
  it "should parse an rdf feed" do
@@ -66,7 +66,7 @@ describe Feedzirra::Feed do
66
66
  feed.title.should == "Paul Dix Explains Nothing"
67
67
  feed.entries.first.published.should == Time.parse_safely("Thu Jan 22 15:50:22 UTC 2009")
68
68
  feed.entries.size.should == 5
69
- end
69
+ end
70
70
 
71
71
  it "should parse an itunes feed" do
72
72
  feed = Feedzirra::Feed.parse(sample_itunes_feed)
@@ -126,13 +126,13 @@ describe Feedzirra::Feed do
126
126
  describe "when adding feed types" do
127
127
  it "should prioritize added types over the built in ones" do
128
128
  feed_text = "Atom asdf"
129
- Feedzirra::Parser::Atom.stub!(:able_to_parse?).and_return(true)
129
+ Feedzirra::Parser::Atom.stub(:able_to_parse?).and_return(true)
130
130
  new_feed_type = Class.new do
131
131
  def self.able_to_parse?(val)
132
132
  true
133
133
  end
134
134
  end
135
-
135
+
136
136
  new_feed_type.should be_able_to_parse(feed_text)
137
137
  Feedzirra::Feed.add_feed_class(new_feed_type)
138
138
  Feedzirra::Feed.determine_feed_parser_for_xml(feed_text).should == new_feed_type
@@ -179,14 +179,14 @@ describe Feedzirra::Feed do
179
179
 
180
180
  describe "#fetch_raw" do
181
181
  before(:each) do
182
- @cmock = stub('cmock', :header_str => '', :body_str => @paul_feed[:xml] )
183
- @multi = stub('curl_multi', :add => true, :perform => true)
184
- @curl_easy = stub('curl_easy')
185
- @curl = stub('curl', :headers => {}, :follow_location= => true, :on_failure => true)
186
- @curl.stub!(:on_success).and_yield(@cmock)
187
-
188
- Curl::Multi.stub!(:new).and_return(@multi)
189
- Curl::Easy.stub!(:new).and_yield(@curl).and_return(@curl_easy)
182
+ @cmock = double('cmock', :header_str => '', :body_str => @paul_feed[:xml] )
183
+ @multi = double('curl_multi', :add => true, :perform => true)
184
+ @curl_easy = double('curl_easy')
185
+ @curl = double('curl', :headers => {}, :follow_location= => true, :on_failure => true)
186
+ @curl.stub(:on_success).and_yield(@cmock)
187
+
188
+ Curl::Multi.stub(:new).and_return(@multi)
189
+ Curl::Easy.stub(:new).and_yield(@curl).and_return(@curl_easy)
190
190
  end
191
191
 
192
192
  it "should set user agent if it's passed as an option" do
@@ -198,7 +198,7 @@ describe Feedzirra::Feed do
198
198
  Feedzirra::Feed.fetch_raw(@paul_feed[:url])
199
199
  @curl.headers['User-Agent'].should == Feedzirra::Feed::USER_AGENT
200
200
  end
201
-
201
+
202
202
  it "should set if modified since as an option if passed" do
203
203
  Feedzirra::Feed.fetch_raw(@paul_feed[:url], :if_modified_since => Time.parse_safely("Wed, 28 Jan 2009 04:10:32 GMT"))
204
204
  @curl.headers["If-Modified-Since"].should == 'Wed, 28 Jan 2009 04:10:32 GMT'
@@ -208,7 +208,7 @@ describe Feedzirra::Feed do
208
208
  Feedzirra::Feed.fetch_raw(@paul_feed[:url], :if_none_match => 'ziEyTl4q9GH04BR4jgkImd0GvSE')
209
209
  @curl.headers["If-None-Match"].should == 'ziEyTl4q9GH04BR4jgkImd0GvSE'
210
210
  end
211
-
211
+
212
212
  it 'should set userpwd for http basic authentication if :http_authentication is passed' do
213
213
  @curl.should_receive(:userpwd=).with('username:password')
214
214
  Feedzirra::Feed.fetch_raw(@paul_feed[:url], :http_authentication => ['username', 'password'])
@@ -224,21 +224,21 @@ describe Feedzirra::Feed do
224
224
  end
225
225
 
226
226
  it "should take multiple feed urls and return a hash of urls and response xml" do
227
- multi = stub('curl_multi', :add => true, :perform => true)
228
- Curl::Multi.stub!(:new).and_return(multi)
229
-
230
- paul_response = stub('paul_response', :header_str => '', :body_str => @paul_feed[:xml] )
231
- trotter_response = stub('trotter_response', :header_str => '', :body_str => @trotter_feed[:xml] )
232
-
233
- paul_curl = stub('paul_curl', :headers => {}, :follow_location= => true, :on_failure => true)
234
- paul_curl.stub!(:on_success).and_yield(paul_response)
235
-
236
- trotter_curl = stub('trotter_curl', :headers => {}, :follow_location= => true, :on_failure => true)
237
- trotter_curl.stub!(:on_success).and_yield(trotter_response)
238
-
227
+ multi = double('curl_multi', :add => true, :perform => true)
228
+ Curl::Multi.stub(:new).and_return(multi)
229
+
230
+ paul_response = double('paul_response', :header_str => '', :body_str => @paul_feed[:xml] )
231
+ trotter_response = double('trotter_response', :header_str => '', :body_str => @trotter_feed[:xml] )
232
+
233
+ paul_curl = double('paul_curl', :headers => {}, :follow_location= => true, :on_failure => true)
234
+ paul_curl.stub(:on_success).and_yield(paul_response)
235
+
236
+ trotter_curl = double('trotter_curl', :headers => {}, :follow_location= => true, :on_failure => true)
237
+ trotter_curl.stub(:on_success).and_yield(trotter_response)
238
+
239
239
  Curl::Easy.should_receive(:new).with(@paul_feed[:url]).ordered.and_yield(paul_curl)
240
240
  Curl::Easy.should_receive(:new).with(@trotter_feed[:url]).ordered.and_yield(trotter_curl)
241
-
241
+
242
242
  results = Feedzirra::Feed.fetch_raw([@paul_feed[:url], @trotter_feed[:url]])
243
243
  results.keys.should include(@paul_feed[:url])
244
244
  results.keys.should include(@trotter_feed[:url])
@@ -256,9 +256,9 @@ describe Feedzirra::Feed do
256
256
  before(:each) do
257
257
  allow_message_expectations_on_nil
258
258
  @multi = Curl::Multi.get([@paul_feed[:url]], {:follow_location => true}, {:pipeline => true})
259
- @multi.stub!(:add)
259
+ @multi.stub(:add)
260
260
  @easy_curl = Curl::Easy.new(@paul_feed[:url])
261
-
261
+
262
262
  Curl::Easy.should_receive(:new).and_yield(@easy_curl)
263
263
  end
264
264
 
@@ -266,12 +266,12 @@ describe Feedzirra::Feed do
266
266
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :user_agent => 'My cool application')
267
267
  @easy_curl.headers["User-Agent"].should == 'My cool application'
268
268
  end
269
-
269
+
270
270
  it "should set user agent to default if it's not passed as an option" do
271
271
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
272
272
  @easy_curl.headers["User-Agent"].should == Feedzirra::Feed::USER_AGENT
273
273
  end
274
-
274
+
275
275
  it "should set if modified since as an option if passed" do
276
276
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :if_modified_since => Time.parse_safely("Jan 25 2009 04:10:32 GMT"))
277
277
  @easy_curl.headers["If-Modified-Since"].should == 'Sun, 25 Jan 2009 04:10:32 GMT'
@@ -281,12 +281,12 @@ describe Feedzirra::Feed do
281
281
  @easy_curl.should_receive(:follow_location=).with(true)
282
282
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
283
283
  end
284
-
284
+
285
285
  it 'should set userpwd for http basic authentication if :http_authentication is passed' do
286
286
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :http_authentication => ['myusername', 'mypassword'])
287
287
  @easy_curl.userpwd.should == 'myusername:mypassword'
288
288
  end
289
-
289
+
290
290
  it 'should set accepted encodings' do
291
291
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {:compress => true})
292
292
  @easy_curl.headers["Accept-encoding"].should == 'gzip, deflate'
@@ -296,15 +296,15 @@ describe Feedzirra::Feed do
296
296
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, :if_none_match => 'ziEyTl4q9GH04BR4jgkImd0GvSE')
297
297
  @easy_curl.headers["If-None-Match"].should == 'ziEyTl4q9GH04BR4jgkImd0GvSE'
298
298
  end
299
-
299
+
300
300
  describe 'on success' do
301
301
  before(:each) do
302
- @feed = mock('feed', :feed_url= => true, :etag= => true, :last_modified= => true)
303
- Feedzirra::Feed.stub!(:decode_content).and_return(@paul_feed[:xml])
304
- Feedzirra::Feed.stub!(:determine_feed_parser_for_xml).and_return(Feedzirra::Parser::AtomFeedBurner)
305
- Feedzirra::Parser::AtomFeedBurner.stub!(:parse).and_return(@feed)
306
- Feedzirra::Feed.stub!(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
307
- Feedzirra::Feed.stub!(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
302
+ @feed = double('feed', :feed_url= => true, :etag= => true, :last_modified= => true)
303
+ Feedzirra::Feed.stub(:decode_content).and_return(@paul_feed[:xml])
304
+ Feedzirra::Feed.stub(:determine_feed_parser_for_xml).and_return(Feedzirra::Parser::AtomFeedBurner)
305
+ Feedzirra::Parser::AtomFeedBurner.stub(:parse).and_return(@feed)
306
+ Feedzirra::Feed.stub(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
307
+ Feedzirra::Feed.stub(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
308
308
  end
309
309
 
310
310
  it 'should decode the response body' do
@@ -312,7 +312,7 @@ describe Feedzirra::Feed do
312
312
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
313
313
  @easy_curl.on_success.call(@easy_curl)
314
314
  end
315
-
315
+
316
316
  it 'should determine the xml parser class' do
317
317
  Feedzirra::Feed.should_receive(:determine_feed_parser_for_xml).with(@paul_feed[:xml]).and_return(Feedzirra::Parser::AtomFeedBurner)
318
318
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
@@ -324,7 +324,7 @@ describe Feedzirra::Feed do
324
324
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, {})
325
325
  @easy_curl.on_success.call(@easy_curl)
326
326
  end
327
-
327
+
328
328
  describe 'when a compatible xml parser class is found' do
329
329
  it 'should set the last effective url to the feed url' do
330
330
  @easy_curl.should_receive(:last_effective_url).and_return(@paul_feed[:url])
@@ -349,11 +349,11 @@ describe Feedzirra::Feed do
349
349
  responses = {}
350
350
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], responses, {})
351
351
  @easy_curl.on_success.call(@easy_curl)
352
-
352
+
353
353
  responses.length.should == 1
354
354
  responses['http://feeds.feedburner.com/PaulDixExplainsNothing'].should == @feed
355
355
  end
356
-
356
+
357
357
  it 'should call proc if :on_success option is passed' do
358
358
  success = lambda { |url, feed| }
359
359
  success.should_receive(:call).with(@paul_feed[:url], @feed)
@@ -372,9 +372,9 @@ describe Feedzirra::Feed do
372
372
  @headers = "HTTP/1.0 500 Something Bad\r\nDate: Thu, 29 Jan 2009 03:55:24 GMT\r\nServer: Apache\r\nX-FB-Host: chi-write6\r\nLast-Modified: Wed, 28 Jan 2009 04:10:32 GMT\r\n"
373
373
  @body = 'Sorry, something broke'
374
374
 
375
- @easy_curl.stub!(:response_code).and_return(500)
376
- @easy_curl.stub!(:header_str).and_return(@headers)
377
- @easy_curl.stub!(:body_str).and_return(@body)
375
+ @easy_curl.stub(:response_code).and_return(500)
376
+ @easy_curl.stub(:header_str).and_return(@headers)
377
+ @easy_curl.stub(:body_str).and_return(@body)
378
378
  end
379
379
 
380
380
  it 'should call proc if :on_failure option is passed' do
@@ -383,7 +383,7 @@ describe Feedzirra::Feed do
383
383
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { :on_failure => failure })
384
384
  @easy_curl.on_failure.call(@easy_curl)
385
385
  end
386
-
386
+
387
387
  it 'should return the http code in the responses' do
388
388
  responses = {}
389
389
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], responses, {})
@@ -399,9 +399,9 @@ describe Feedzirra::Feed do
399
399
  @headers = "HTTP/1.0 404 Not Found\r\nDate: Thu, 29 Jan 2009 03:55:24 GMT\r\nServer: Apache\r\nX-FB-Host: chi-write6\r\nLast-Modified: Wed, 28 Jan 2009 04:10:32 GMT\r\n"
400
400
  @body = 'Page could not be found.'
401
401
 
402
- @easy_curl.stub!(:response_code).and_return(404)
403
- @easy_curl.stub!(:header_str).and_return(@headers)
404
- @easy_curl.stub!(:body_str).and_return(@body)
402
+ @easy_curl.stub(:response_code).and_return(404)
403
+ @easy_curl.stub(:header_str).and_return(@headers)
404
+ @easy_curl.stub(:body_str).and_return(@body)
405
405
  end
406
406
 
407
407
  it 'should call proc if :on_failure option is passed' do
@@ -410,7 +410,7 @@ describe Feedzirra::Feed do
410
410
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { :on_failure => complete })
411
411
  @easy_curl.on_complete.call(@easy_curl)
412
412
  end
413
-
413
+
414
414
  it 'should return the http code in the responses' do
415
415
  responses = {}
416
416
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], responses, {})
@@ -426,7 +426,7 @@ describe Feedzirra::Feed do
426
426
  before(:each) do
427
427
  allow_message_expectations_on_nil
428
428
  @multi = Curl::Multi.get([@paul_feed[:url]], {:follow_location => true}, {:pipeline => true})
429
- @multi.stub!(:add)
429
+ @multi.stub(:add)
430
430
  @easy_curl = Curl::Easy.new(@paul_feed[:url])
431
431
  @feed = Feedzirra::Feed.parse(sample_feedburner_atom_feed)
432
432
 
@@ -437,7 +437,7 @@ describe Feedzirra::Feed do
437
437
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, :user_agent => 'My cool application')
438
438
  @easy_curl.headers["User-Agent"].should == 'My cool application'
439
439
  end
440
-
440
+
441
441
  it "should set user agent to default if it's not passed as an option" do
442
442
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
443
443
  @easy_curl.headers["User-Agent"].should == Feedzirra::Feed::USER_AGENT
@@ -447,10 +447,10 @@ describe Feedzirra::Feed do
447
447
  modified_time = Time.parse_safely("Wed, 28 Jan 2009 04:10:32 GMT")
448
448
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {:if_modified_since => modified_time})
449
449
  modified_time.should be > @feed.last_modified
450
-
450
+
451
451
  @easy_curl.headers["If-Modified-Since"].should == modified_time
452
452
  end
453
-
453
+
454
454
  it 'should set follow location to true' do
455
455
  @easy_curl.should_receive(:follow_location=).with(true)
456
456
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
@@ -470,16 +470,16 @@ describe Feedzirra::Feed do
470
470
  describe 'on success' do
471
471
  before(:each) do
472
472
  @new_feed = @feed.clone
473
- @feed.stub!(:update_from_feed)
474
- Feedzirra::Feed.stub!(:decode_content).and_return(@paul_feed[:xml])
475
- Feedzirra::Feed.stub!(:determine_feed_parser_for_xml).and_return(Feedzirra::Parser::AtomFeedBurner)
476
- Feedzirra::Parser::AtomFeedBurner.stub!(:parse).and_return(@new_feed)
477
- Feedzirra::Feed.stub!(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
478
- Feedzirra::Feed.stub!(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
473
+ @feed.stub(:update_from_feed)
474
+ Feedzirra::Feed.stub(:decode_content).and_return(@paul_feed[:xml])
475
+ Feedzirra::Feed.stub(:determine_feed_parser_for_xml).and_return(Feedzirra::Parser::AtomFeedBurner)
476
+ Feedzirra::Parser::AtomFeedBurner.stub(:parse).and_return(@new_feed)
477
+ Feedzirra::Feed.stub(:etag_from_header).and_return('ziEyTl4q9GH04BR4jgkImd0GvSE')
478
+ Feedzirra::Feed.stub(:last_modified_from_header).and_return('Wed, 28 Jan 2009 04:10:32 GMT')
479
479
  end
480
480
 
481
481
  it 'should process the next feed in the queue'
482
-
482
+
483
483
  it 'should parse the updated feed' do
484
484
  Feedzirra::Parser::AtomFeedBurner.should_receive(:parse).and_return(@new_feed)
485
485
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
@@ -520,7 +520,7 @@ describe Feedzirra::Feed do
520
520
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, { :on_success => success })
521
521
  @easy_curl.on_success.call(@easy_curl)
522
522
  end
523
-
523
+
524
524
  it 'should call update from feed on the old feed with the updated feed' do
525
525
  @feed.should_receive(:update_from_feed).with(@new_feed)
526
526
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, {})
@@ -533,9 +533,9 @@ describe Feedzirra::Feed do
533
533
  @headers = "HTTP/1.0 404 Not Found\r\nDate: Thu, 29 Jan 2009 03:55:24 GMT\r\nServer: Apache\r\nX-FB-Host: chi-write6\r\nLast-Modified: Wed, 28 Jan 2009 04:10:32 GMT\r\n"
534
534
  @body = 'Page could not be found.'
535
535
 
536
- @easy_curl.stub!(:response_code).and_return(404)
537
- @easy_curl.stub!(:header_str).and_return(@headers)
538
- @easy_curl.stub!(:body_str).and_return(@body)
536
+ @easy_curl.stub(:response_code).and_return(404)
537
+ @easy_curl.stub(:header_str).and_return(@headers)
538
+ @easy_curl.stub(:body_str).and_return(@body)
539
539
  end
540
540
 
541
541
  it 'should call on success callback if the response code is 304' do
@@ -545,7 +545,7 @@ describe Feedzirra::Feed do
545
545
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, { :on_success => success })
546
546
  @easy_curl.on_failure.call(@easy_curl)
547
547
  end
548
-
548
+
549
549
  it 'should return the http code in the responses' do
550
550
  responses = {}
551
551
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], responses, {})
@@ -563,51 +563,51 @@ describe Feedzirra::Feed do
563
563
  it 'should slice the feeds into groups of thirty for processing'
564
564
  it "should return a feed object if a single feed is passed in"
565
565
  it "should return an return an array of feed objects if multiple feeds are passed in"
566
-
566
+
567
567
  it "should set if modified since as an option if passed" do
568
568
  modified_time = Time.parse_safely("Wed, 28 Jan 2009 04:10:32 GMT")
569
- Feedzirra::Feed.should_receive(:add_url_to_multi).with(anything, anything, anything, anything, {:if_modified_since => modified_time}).any_number_of_times
570
-
569
+ Feedzirra::Feed.should_receive(:add_url_to_multi).with(anything, anything, anything, anything, {:if_modified_since => modified_time})
570
+
571
571
  @feed = Feedzirra::Feed.fetch_and_parse(sample_feedburner_atom_feed, {:if_modified_since => modified_time})
572
572
  end
573
-
573
+
574
574
  end
575
575
 
576
576
  describe "#decode_content" do
577
577
  before(:each) do
578
- @curl_easy = mock('curl_easy', :body_str => '<xml></xml>')
578
+ @curl_easy = double('curl_easy', :body_str => '<xml></xml>')
579
579
  end
580
580
 
581
581
  it 'should decode the response body using gzip if the Content-Encoding: is gzip' do
582
- @curl_easy.stub!(:header_str).and_return('Content-Encoding: gzip')
583
- string_io = mock('stringio', :read => @curl_easy.body_str, :close => true)
582
+ @curl_easy.stub(:header_str).and_return('Content-Encoding: gzip')
583
+ string_io = double('stringio', :read => @curl_easy.body_str, :close => true)
584
584
  StringIO.should_receive(:new).and_return(string_io)
585
585
  Zlib::GzipReader.should_receive(:new).with(string_io).and_return(string_io)
586
586
  Feedzirra::Feed.decode_content(@curl_easy)
587
587
  end
588
-
588
+
589
589
  it 'should decode the response body using gzip if the Content-Encoding: is gzip even when the case is wrong' do
590
- @curl_easy.stub!(:header_str).and_return('content-encoding: gzip')
591
- string_io = mock('stringio', :read => @curl_easy.body_str, :close => true)
590
+ @curl_easy.stub(:header_str).and_return('content-encoding: gzip')
591
+ string_io = double('stringio', :read => @curl_easy.body_str, :close => true)
592
592
  StringIO.should_receive(:new).and_return(string_io)
593
593
  Zlib::GzipReader.should_receive(:new).with(string_io).and_return(string_io)
594
594
  Feedzirra::Feed.decode_content(@curl_easy)
595
595
  end
596
596
 
597
597
  it 'should deflate the response body using inflate if the Content-Encoding: is deflate' do
598
- @curl_easy.stub!(:header_str).and_return('Content-Encoding: deflate')
598
+ @curl_easy.stub(:header_str).and_return('Content-Encoding: deflate')
599
599
  Zlib::Inflate.should_receive(:inflate).with(@curl_easy.body_str)
600
600
  Feedzirra::Feed.decode_content(@curl_easy)
601
601
  end
602
602
 
603
603
  it 'should deflate the response body using inflate if the Content-Encoding: is deflate event if the case is wrong' do
604
- @curl_easy.stub!(:header_str).and_return('content-encoding: deflate')
604
+ @curl_easy.stub(:header_str).and_return('content-encoding: deflate')
605
605
  Zlib::Inflate.should_receive(:inflate).with(@curl_easy.body_str)
606
606
  Feedzirra::Feed.decode_content(@curl_easy)
607
607
  end
608
608
 
609
609
  it 'should return the response body if it is not encoded' do
610
- @curl_easy.stub!(:header_str).and_return('')
610
+ @curl_easy.stub(:header_str).and_return('')
611
611
  Feedzirra::Feed.decode_content(@curl_easy).should == '<xml></xml>'
612
612
  end
613
613
  end
@@ -616,7 +616,7 @@ describe Feedzirra::Feed do
616
616
  it 'should perform the updating using multicurl'
617
617
  it "should pass any request options through to add_feed_to_multi"
618
618
  it "should return a feed object if a single feed is passed in"
619
- it "should return an return an array of feed objects if multiple feeds are passed in"
619
+ it "should return an return an array of feed objects if multiple feeds are passed in"
620
620
  end
621
621
  end
622
622
  end
@@ -14,34 +14,34 @@ describe Feedzirra::FeedUtilities do
14
14
  feed.updated = true
15
15
  feed.should be_updated
16
16
  end
17
-
17
+
18
18
  it "should provide a new_entries accessor" do
19
19
  feed = @klass.new
20
20
  feed.new_entries.should == []
21
21
  feed.new_entries = [:foo]
22
22
  feed.new_entries.should == [:foo]
23
23
  end
24
-
24
+
25
25
  it "should provide an etag accessor" do
26
26
  feed = @klass.new
27
27
  feed.etag = "foo"
28
28
  feed.etag.should == "foo"
29
29
  end
30
-
30
+
31
31
  it "should provide a last_modified accessor" do
32
32
  feed = @klass.new
33
33
  time = Time.now
34
- feed.last_modified = time
34
+ feed.last_modified = time
35
35
  feed.last_modified.should == time
36
36
  feed.last_modified.class.should == Time
37
37
  end
38
-
38
+
39
39
  it "should return new_entries? as true when entries are put into new_entries" do
40
40
  feed = @klass.new
41
41
  feed.new_entries << :foo
42
42
  feed.should have_new_entries
43
43
  end
44
-
44
+
45
45
  it "should return a last_modified value from the entry with the most recent published date if the last_modified date hasn't been set" do
46
46
  feed = Feedzirra::Parser::Atom.new
47
47
  entry =Feedzirra::Parser::AtomEntry.new
@@ -49,7 +49,7 @@ describe Feedzirra::FeedUtilities do
49
49
  feed.entries << entry
50
50
  feed.last_modified.should == entry.published
51
51
  end
52
-
52
+
53
53
  it "should not throw an error if one of the entries has published date of nil" do
54
54
  feed = Feedzirra::Parser::Atom.new
55
55
  entry = Feedzirra::Parser::AtomEntry.new
@@ -59,7 +59,7 @@ describe Feedzirra::FeedUtilities do
59
59
  feed.last_modified.should == entry.published
60
60
  end
61
61
  end
62
-
62
+
63
63
  describe "#update_from_feed" do
64
64
  describe "updating feed attributes" do
65
65
  before(:each) do
@@ -72,43 +72,43 @@ describe Feedzirra::FeedUtilities do
72
72
  @feed.updated = false
73
73
  @updated_feed = @feed.dup
74
74
  end
75
-
75
+
76
76
  it "should update the title if changed" do
77
77
  @updated_feed.title = "new title"
78
78
  @feed.update_from_feed(@updated_feed)
79
79
  @feed.title.should == @updated_feed.title
80
80
  @feed.should be_updated
81
81
  end
82
-
82
+
83
83
  it "should not update the title if the same" do
84
84
  @feed.update_from_feed(@updated_feed)
85
- @feed.should_not be_updated
85
+ @feed.should_not be_updated
86
86
  end
87
-
87
+
88
88
  it "should update the feed_url if changed" do
89
89
  @updated_feed.feed_url = "a new feed url"
90
90
  @feed.update_from_feed(@updated_feed)
91
91
  @feed.feed_url.should == @updated_feed.feed_url
92
92
  @feed.should be_updated
93
93
  end
94
-
94
+
95
95
  it "should not update the feed_url if the same" do
96
96
  @feed.update_from_feed(@updated_feed)
97
97
  @feed.should_not be_updated
98
98
  end
99
-
99
+
100
100
  it "should update the url if changed" do
101
101
  @updated_feed.url = "a new url"
102
102
  @feed.update_from_feed(@updated_feed)
103
103
  @feed.url.should == @updated_feed.url
104
104
  end
105
-
105
+
106
106
  it "should not update the url if not changed" do
107
107
  @feed.update_from_feed(@updated_feed)
108
108
  @feed.should_not be_updated
109
109
  end
110
110
  end
111
-
111
+
112
112
  describe "updating entries" do
113
113
  before(:each) do
114
114
  # I'm using the Atom class when I know I should be using a different one. However, this update_from_feed
@@ -122,24 +122,24 @@ describe Feedzirra::FeedUtilities do
122
122
  @old_entry = Feedzirra::Parser::AtomEntry.new
123
123
  @old_entry.url = "http://pauldix.net/old.html"
124
124
  @old_entry.published = Time.now.to_s
125
- @new_entry = Feedzirra::Parser::AtomEntry.new
125
+ @new_entry = Feedzirra::Parser::AtomEntry.new
126
126
  @new_entry.url = "http://pauldix.net/new.html"
127
- @new_entry.published = (Time.now + 10).to_s
127
+ @new_entry.published = (Time.now + 10).to_s
128
128
  @feed.entries << @old_entry
129
129
  @updated_feed.entries << @new_entry
130
130
  @updated_feed.entries << @old_entry
131
131
  end
132
-
132
+
133
133
  it "should update last-modified from the latest entry date" do
134
134
  @feed.update_from_feed(@updated_feed)
135
- @feed.last_modified.should == @new_entry.published
135
+ @feed.last_modified.should == @new_entry.published
136
136
  end
137
-
137
+
138
138
  it "should put new entries into new_entries" do
139
139
  @feed.update_from_feed(@updated_feed)
140
140
  @feed.new_entries.should == [@new_entry]
141
141
  end
142
-
142
+
143
143
  it "should also put new entries into the entries collection" do
144
144
  @feed.update_from_feed(@updated_feed)
145
145
  @feed.entries.should include(@new_entry)
@@ -83,4 +83,4 @@ describe Feedzirra::Parser::AtomEntry do
83
83
  @entry.title.should == "Foobar"
84
84
  end
85
85
 
86
- end
86
+ end
@@ -6,11 +6,11 @@ describe Feedzirra::Parser::AtomFeedBurnerEntry do
6
6
  # but this is actually how it should work. You would never just pass entry xml straight to the AtomEnry
7
7
  @entry = Feedzirra::Parser::AtomFeedBurner.parse(sample_feedburner_atom_feed).entries.first
8
8
  end
9
-
9
+
10
10
  it "should parse the title" do
11
11
  @entry.title.should == "Making a Ruby C library even faster"
12
12
  end
13
-
13
+
14
14
  it "should be able to fetch a url via the 'alternate' rel if no origLink exists" do
15
15
  entry = Feedzirra::Parser::AtomFeedBurner.parse(File.read("#{File.dirname(__FILE__)}/../../sample_feeds/PaulDixExplainsNothingAlternate.xml")).entries.first
16
16
  entry.url.should == 'http://feeds.feedburner.com/~r/PaulDixExplainsNothing/~3/519925023/making-a-ruby-c-library-even-faster.html'
@@ -19,7 +19,7 @@ describe Feedzirra::Parser::AtomFeedBurnerEntry do
19
19
  it "should parse the url" 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
23
  it "should parse the url when there is no alternate" do
24
24
  entry = Feedzirra::Parser::AtomFeedBurner.parse(File.read("#{File.dirname(__FILE__)}/../../sample_feeds/FeedBurnerUrlNoAlternate.xml")).entries.first
25
25
  entry.url.should == 'http://example.com/QQQQ.html'
@@ -28,15 +28,15 @@ describe Feedzirra::Parser::AtomFeedBurnerEntry do
28
28
  it "should parse the author" do
29
29
  @entry.author.should == "Paul Dix"
30
30
  end
31
-
31
+
32
32
  it "should parse the content" do
33
33
  @entry.content.should == sample_feedburner_atom_entry_content
34
34
  end
35
-
35
+
36
36
  it "should provide a summary" do
37
37
  @entry.summary.should == "Last week I released the first version of a SAX based XML parsing library called SAX-Machine. It uses Nokogiri, which uses libxml, so it's pretty fast. However, I felt that it could be even faster. The only question was how..."
38
38
  end
39
-
39
+
40
40
  it "should parse the published date" do
41
41
  @entry.published.should == Time.parse_safely("Thu Jan 22 15:50:22 UTC 2009")
42
42
  end
@@ -44,4 +44,4 @@ describe Feedzirra::Parser::AtomFeedBurnerEntry do
44
44
  it "should parse the categories" do
45
45
  @entry.categories.should == ['Ruby', 'Another Category']
46
46
  end
47
- end
47
+ end
@@ -5,15 +5,15 @@ describe Feedzirra::Parser::AtomFeedBurner do
5
5
  it "should return true for a feedburner atom feed" do
6
6
  Feedzirra::Parser::AtomFeedBurner.should be_able_to_parse(sample_feedburner_atom_feed)
7
7
  end
8
-
8
+
9
9
  it "should return false for an rdf feed" do
10
10
  Feedzirra::Parser::AtomFeedBurner.should_not be_able_to_parse(sample_rdf_feed)
11
11
  end
12
-
12
+
13
13
  it "should return false for a regular atom feed" do
14
14
  Feedzirra::Parser::AtomFeedBurner.should_not be_able_to_parse(sample_atom_feed)
15
15
  end
16
-
16
+
17
17
  it "should return false for an rss feedburner feed" do
18
18
  Feedzirra::Parser::AtomFeedBurner.should_not be_able_to_parse(sample_rss_feed_burner_feed)
19
19
  end
@@ -23,7 +23,7 @@ describe Feedzirra::Parser::AtomFeedBurner do
23
23
  before(:each) do
24
24
  @feed = Feedzirra::Parser::AtomFeedBurner.parse(sample_feedburner_atom_feed)
25
25
  end
26
-
26
+
27
27
  it "should parse the title" do
28
28
  @feed.title.should == "Paul Dix Explains Nothing"
29
29
  end
@@ -35,13 +35,13 @@ describe Feedzirra::Parser::AtomFeedBurner do
35
35
  it "should parse the url" do
36
36
  @feed.url.should == "http://www.pauldix.net/"
37
37
  end
38
-
38
+
39
39
  it "should parse the feed_url" do
40
40
  @feed.feed_url.should == "http://feeds.feedburner.com/PaulDixExplainsNothing"
41
41
  end
42
-
42
+
43
43
  it "should parse entries" do
44
44
  @feed.entries.size.should == 5
45
45
  end
46
46
  end
47
- end
47
+ end