feedzirra 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 935a303a640e7d1691deac27f8fa4842890d20f8
4
- data.tar.gz: c8fb4c77b662451975749d78c40327bdbd53d819
3
+ metadata.gz: 6547ea21e91fd542899dbb76260595526c269d70
4
+ data.tar.gz: 4b34a18d37afb06519846075bedaac411770e084
5
5
  SHA512:
6
- metadata.gz: a5219f1781ac43e8736032ae7cb9b7d3840394af711a1f2041e7ee71bfba894977d8ed4040077e003977c5af768622284725021c8f3d661ce70c93fdce882eff
7
- data.tar.gz: 1f525c241c9c5f7de1351f8941d48a944b225fe71cfee43918cadcabaaabe70bd1a3c9b9028145c24b100e21b29246d03e7011e4c3e680629cc7832a4cfc09f5
6
+ metadata.gz: 7d45bc2899f40f6e3bbe1ac2173deca01e403522b08e8fd2c468df8ea96624f72c948b2d10f266de08f9dee61a27bec9af8294dac83a4aeac6a142cf42c1533f
7
+ data.tar.gz: 1813e66fa65f47b612befc1be51aefca816e9cf6a2553790abdd31a515ce5e98d2fc8acdba37e71a656fee8bd090ae3a4afa853b228c42882667176bfd1857fd
@@ -1,5 +1,19 @@
1
1
  # Feedzirra Changelog
2
2
 
3
+ ## 0.7.0
4
+
5
+ * General
6
+ * README update for callback arity [[#202][]]
7
+
8
+ * Enhancements
9
+ * Add error info to `on_failure` callback [[#194][]]
10
+ * On failure callbacks get curl and error as args
11
+ * Bugfix for parsing dates that are ISO 8601 with milliseconds [[#203][]]
12
+
13
+ [#194]: https://github.com/pauldix/feedzirra/pull/194
14
+ [#202]: https://github.com/pauldix/feedzirra/pull/202
15
+ [#203]: https://github.com/pauldix/feedzirra/pull/203
16
+
3
17
  ## 0.6.0
4
18
 
5
19
  * General
data/README.md CHANGED
@@ -101,8 +101,9 @@ updated_feeds = Feedzirra::Feed.update(feeds.values)
101
101
 
102
102
  # defining custom behavior on failure or success. note that a return status of 304 (not updated) will call the on_success handler
103
103
  feed = Feedzirra::Feed.fetch_and_parse("http://feeds.feedburner.com/PaulDixExplainsNothing",
104
- :on_success => lambda [|url, feed| puts feed.title ],
105
- :on_failure => lambda [|url, response_code, response_header, response_body| puts response_body ])
104
+ :on_success => lambda {|url, feed| puts feed.title },
105
+ :on_failure => lambda {|curl, error| puts error })
106
+
106
107
  # if a collection was passed into fetch_and_parse, the handlers will be called for each one
107
108
 
108
109
  # the behavior for the handlers when using Feedzirra::Feed.update is slightly different. The feed passed into on_success will be
@@ -17,6 +17,8 @@ class Time
17
17
  dt.utc
18
18
  when dt.respond_to?(:empty?) && dt.empty?
19
19
  nil
20
+ when dt.respond_to?(:to_datetime)
21
+ dt.to_datetime.utc
20
22
  when dt.to_s =~ /\A\d{14}\z/
21
23
  parse("#{dt.to_s}Z", true)
22
24
  else
@@ -320,10 +320,10 @@ module Feedzirra
320
320
  responses[url] = feed
321
321
  options[:on_success].call(url, feed) if options.has_key?(:on_success)
322
322
  rescue Exception => e
323
- options[:on_failure].call(url, c.response_code, c.header_str, c.body_str) if options.has_key?(:on_failure)
323
+ call_on_failure(c, e, options[:on_failure])
324
324
  end
325
325
  else
326
- options[:on_failure].call(url, c.response_code, c.header_str, c.body_str) if options.has_key?(:on_failure)
326
+ call_on_failure(c, "Can't determine a parser", options[:on_failure])
327
327
  end
328
328
  end
329
329
 
@@ -343,13 +343,13 @@ module Feedzirra
343
343
 
344
344
  curl.on_missing do |c|
345
345
  if c.response_code == 404 && options.has_key?(:on_failure)
346
- options[:on_failure].call(url, c.response_code, c.header_str, c.body_str)
346
+ call_on_failure(c, 'Server returned a 404', options[:on_failure])
347
347
  end
348
348
  end
349
349
 
350
350
  curl.on_failure do |c, err|
351
351
  responses[url] = c.response_code
352
- options[:on_failure].call(url, c.response_code, c.header_str, c.body_str) if options.has_key?(:on_failure)
352
+ call_on_failure(c, err, options[:on_failure])
353
353
  end
354
354
  end
355
355
  multi.add(easy)
@@ -387,18 +387,21 @@ module Feedzirra
387
387
  responses[feed.feed_url] = feed
388
388
  options[:on_success].call(feed) if options.has_key?(:on_success)
389
389
  rescue Exception => e
390
- options[:on_failure].call(feed, c.response_code, c.header_str, c.body_str) if options.has_key?(:on_failure)
390
+ call_on_failure(c, e, options[:on_failure])
391
391
  end
392
392
  end
393
393
 
394
394
  curl.on_failure do |c, err| # response code 50X
395
- responses[feed.url] = c.response_code
396
- options[:on_failure].call(feed, c.response_code, c.header_str, c.body_str) if options.has_key?(:on_failure)
395
+ responses[feed.feed_url] = c.response_code
396
+ call_on_failure(c, 'Server returned a 404', options[:on_failure])
397
397
  end
398
398
 
399
399
  curl.on_redirect do |c, err| # response code 30X
400
400
  if c.response_code == 304
401
401
  options[:on_success].call(feed) if options.has_key?(:on_success)
402
+ else
403
+ responses[feed.feed_url] = c.response_code
404
+ call_on_failure(c, err, options[:on_failure])
402
405
  end
403
406
  end
404
407
 
@@ -438,6 +441,19 @@ module Feedzirra
438
441
  def on_parser_failure(url)
439
442
  Proc.new { |message| raise "Error while parsing [#{url}] #{message}" }
440
443
  end
444
+
445
+ def call_on_failure(c, error, on_failure)
446
+ if on_failure
447
+ if on_failure.arity == 4
448
+ warn 'on_failure proc with deprecated arity 4 should include a fifth parameter containing the error'
449
+ on_failure.call(c.url, c.response_code, c.header_str, c.body_str)
450
+ elsif on_failure.arity == 2
451
+ on_failure.call(c, error)
452
+ else
453
+ warn "on_failure proc with invalid parameters number #{on_failure.arity} instead of 2, ignoring it"
454
+ end
455
+ end
456
+ end
441
457
  end
442
458
  end
443
459
  end
@@ -1,3 +1,3 @@
1
1
  module Feedzirra
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -13,6 +13,12 @@ describe Feedzirra::FeedUtilities do
13
13
  time.class.should == Time
14
14
  time.should == Time.parse_safely("Wed Feb 20 18:05:00 UTC 2008")
15
15
  end
16
+
17
+ it "should parse a ISO 8601 with milliseconds into Time" do
18
+ time = @klass.new.parse_datetime("2013-09-17T08:20:13.931-04:00")
19
+ time.class.should == Time
20
+ time.should == Time.parse_safely("Tue Sep 17 12:20:13 UTC 2013")
21
+ end
16
22
  end
17
23
 
18
24
  describe "sanitizing" do
@@ -4,7 +4,7 @@ class Hell < StandardError; end
4
4
 
5
5
  class FailParser
6
6
  def self.parse(_, &on_failure)
7
- on_failure.call
7
+ on_failure.call 'this parser always fails.'
8
8
  end
9
9
  end
10
10
 
@@ -57,7 +57,7 @@ describe Feedzirra::Feed do
57
57
 
58
58
  context 'with a callback block' do
59
59
  it 'passes the callback to the parser' do
60
- callback = -> { raise Hell }
60
+ callback = ->(*) { raise Hell }
61
61
 
62
62
  expect do
63
63
  Feedzirra::Feed.parse_with FailParser, xml, &callback
@@ -268,6 +268,7 @@ describe Feedzirra::Feed do
268
268
  before(:each) do
269
269
  @paul_feed = { :xml => load_sample("PaulDixExplainsNothing.xml"), :url => "http://feeds.feedburner.com/PaulDixExplainsNothing" }
270
270
  @trotter_feed = { :xml => load_sample("TrotterCashionHome.xml"), :url => "http://feeds2.feedburner.com/trottercashion" }
271
+ @invalid_feed = { :xml => 'This feed is invalid', :url => "http://feeds.feedburner.com/InvalidFeed" }
271
272
  end
272
273
 
273
274
  describe "#fetch_raw" do
@@ -456,11 +457,11 @@ describe Feedzirra::Feed do
456
457
  end
457
458
 
458
459
  describe 'when the parser raises an exception' do
459
- it 'invokes the on_failure callback' do
460
- failure = lambda { |url, feed| }
461
- failure.should_receive(:call).with(@paul_feed[:url], 0, nil, nil)
460
+ it 'invokes the on_failure callback with that exception' do
461
+ failure = double 'Failure callback', arity: 2
462
+ failure.should_receive(:call).with(@easy_curl, an_instance_of(Hell))
462
463
 
463
- Feedzirra::Parser::AtomFeedBurner.should_receive(:parse).and_raise Exception
464
+ Feedzirra::Parser::AtomFeedBurner.should_receive(:parse).and_raise Hell
464
465
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { on_failure: failure })
465
466
 
466
467
  @easy_curl.on_success.call(@easy_curl)
@@ -473,8 +474,8 @@ describe Feedzirra::Feed do
473
474
  end
474
475
 
475
476
  it 'invokes the on_failure callback' do
476
- failure = lambda { |url, feed| }
477
- failure.should_receive(:call).with(@paul_feed[:url], 0, nil, nil)
477
+ failure = double 'Failure callback', arity: 2
478
+ failure.should_receive(:call).with(@easy_curl, an_instance_of(RuntimeError))
478
479
 
479
480
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { on_failure: failure })
480
481
  @easy_curl.on_success.call(@easy_curl)
@@ -484,8 +485,8 @@ describe Feedzirra::Feed do
484
485
 
485
486
  describe 'when no compatible xml parser class is found' do
486
487
  it 'invokes the on_failure callback' do
487
- failure = lambda { |url, feed| }
488
- failure.should_receive(:call).with(@paul_feed[:url], 0, nil, nil)
488
+ failure = double 'Failure callback', arity: 2
489
+ failure.should_receive(:call).with(@easy_curl, "Can't determine a parser")
489
490
 
490
491
  Feedzirra::Feed.should_receive(:determine_feed_parser_for_xml).and_return nil
491
492
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { on_failure: failure })
@@ -506,8 +507,8 @@ describe Feedzirra::Feed do
506
507
  end
507
508
 
508
509
  it 'should call proc if :on_failure option is passed' do
509
- failure = lambda { |url, feed| }
510
- failure.should_receive(:call).with(@paul_feed[:url], 500, @headers, @body)
510
+ failure = double 'Failure callback', arity: 2
511
+ failure.should_receive(:call).with(@easy_curl, nil)
511
512
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { :on_failure => failure })
512
513
  @easy_curl.on_failure.call(@easy_curl)
513
514
  end
@@ -533,8 +534,8 @@ describe Feedzirra::Feed do
533
534
  end
534
535
 
535
536
  it 'should call proc if :on_failure option is passed' do
536
- complete = lambda { |url| }
537
- complete.should_receive(:call).with(@paul_feed[:url], 404, @headers, @body)
537
+ complete = double 'Failure callback', arity: 2
538
+ complete.should_receive(:call).with(@easy_curl, 'Server returned a 404')
538
539
  Feedzirra::Feed.add_url_to_multi(@multi, @paul_feed[:url], [], {}, { :on_failure => complete })
539
540
  @easy_curl.on_missing.call(@easy_curl)
540
541
  end
@@ -659,7 +660,7 @@ describe Feedzirra::Feed do
659
660
  end
660
661
 
661
662
  it 'invokes the on_failure callback' do
662
- failure = lambda { |feed| }
663
+ failure = double 'Failure callback', arity: 2
663
664
  failure.should_receive(:call)
664
665
 
665
666
  Feedzirra::Feed.add_feed_to_multi(@multi, @feed, [], {}, { on_failure: failure })
@@ -692,7 +693,7 @@ describe Feedzirra::Feed do
692
693
  @easy_curl.on_failure.call(@easy_curl)
693
694
 
694
695
  responses.length.should == 1
695
- responses['http://www.pauldix.net/'].should == 404
696
+ responses[@paul_feed[:url]].should == 404
696
697
  end
697
698
  end
698
699
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedzirra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Dix
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-12-17 00:00:00.000000000 Z
14
+ date: 2014-01-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: sax-machine