feedzirra 0.6.0 → 0.7.0

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.
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