curb 1.0.2 → 1.0.3

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
  SHA256:
3
- metadata.gz: b338d766fda8dfadab0c602cdad4a9f15a529bb495725b15ca5def63a9d8390a
4
- data.tar.gz: 5b074f1154e3da7ce37eee89e6e5a577a2c09202b6baee72afd2098eac986bd7
3
+ metadata.gz: 51f01ce3c875c6eb02061c959c0724844fd0076d3644e28aa130b87c3f7da631
4
+ data.tar.gz: 0ca3a17b17bcdfc721608f119757e908d2c57c40aaf8e9a66d119a1deec3184d
5
5
  SHA512:
6
- metadata.gz: 59a25fdf7add62512432495a89d6c8832513ecbc94bb14e7e5720abbfbfea24e0ae52c77fe10497871c6683f39e6988ff184088318e06a14848ab764db38bea2
7
- data.tar.gz: 4fc8fb4b8111f102107cabc002f1b1a11d2f73e9b66d188ebaf3027a803c90868184c751a3448639bf23ca62eace0a227769aff716a4ba0a8a39b23888346097
6
+ metadata.gz: 207ac7282c2d95de745edfadef35e809d7dee0edf03eec266c536e0c080dd072df87809dbdd0a3137382a4c7a1b5c420bb32de3bd2820126c6ad6e29085d986f
7
+ data.tar.gz: e1ad940900fb2a107c52b8f28991e0cc50d409dc91a1d075d03145020a527a806578da341ed8cbf2162cb8383c64f3137ec68329911b04ce4713acb9bb7baf1b
data/ext/curb.h CHANGED
@@ -28,11 +28,11 @@
28
28
  #include "curb_macros.h"
29
29
 
30
30
  // These should be managed from the Rake 'release' task.
31
- #define CURB_VERSION "1.0.2"
32
- #define CURB_VER_NUM 1002
31
+ #define CURB_VERSION "1.0.3"
32
+ #define CURB_VER_NUM 1003
33
33
  #define CURB_VER_MAJ 1
34
34
  #define CURB_VER_MIN 0
35
- #define CURB_VER_MIC 2
35
+ #define CURB_VER_MIC 3
36
36
  #define CURB_VER_PATCH 0
37
37
 
38
38
 
data/ext/curb_multi.c CHANGED
@@ -43,6 +43,11 @@ static void rb_curl_multi_remove(ruby_curl_multi *rbcm, VALUE easy);
43
43
  static void rb_curl_multi_read_info(VALUE self, CURLM *mptr);
44
44
  static void rb_curl_multi_run(VALUE self, CURLM *multi_handle, int *still_running);
45
45
 
46
+ static VALUE callback_exception(VALUE did_raise, VALUE exception) {
47
+ rb_hash_aset(did_raise, rb_easy_hkey("error"), exception);
48
+ return exception;
49
+ }
50
+
46
51
  void curl_multi_free(ruby_curl_multi *rbcm) {
47
52
  curl_multi_cleanup(rbcm->handle);
48
53
  free(rbcm);
@@ -292,13 +297,14 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
292
297
  }
293
298
 
294
299
  int status;
300
+ VALUE did_raise = rb_hash_new();
295
301
 
296
302
  if (!rb_easy_nil("complete_proc")) {
297
303
  callargs = rb_ary_new3(2, rb_easy_get("complete_proc"), easy);
298
304
  rbce->callback_active = 1;
299
- rb_protect(call_status_handler1, callargs, &status);
305
+ rb_rescue(call_status_handler1, callargs, callback_exception, did_raise);
300
306
  rbce->callback_active = 0;
301
- if (status) {
307
+ if (rb_hash_aref(did_raise, "error") != Qnil) {
302
308
  CURB_RB_CALLBACK_RAISE("complete")
303
309
  }
304
310
  }
@@ -316,9 +322,9 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
316
322
  if (!rb_easy_nil("failure_proc")) {
317
323
  callargs = rb_ary_new3(3, rb_easy_get("failure_proc"), easy, rb_curl_easy_error(result));
318
324
  rbce->callback_active = 1;
319
- rb_protect(call_status_handler2, callargs, &status);
325
+ rb_rescue(call_status_handler2, callargs, callback_exception, did_raise);
320
326
  rbce->callback_active = 0;
321
- if (status) {
327
+ if (rb_hash_aref(did_raise, "error") != Qnil) {
322
328
  CURB_RB_CALLBACK_RAISE("failure")
323
329
  }
324
330
  }
@@ -327,17 +333,17 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
327
333
  /* NOTE: we allow response_code == 0, in the case of non http requests e.g. reading from disk */
328
334
  callargs = rb_ary_new3(2, rb_easy_get("success_proc"), easy);
329
335
  rbce->callback_active = 1;
330
- rb_protect(call_status_handler1, callargs, &status);
336
+ rb_rescue(call_status_handler1, callargs, callback_exception, did_raise);
331
337
  rbce->callback_active = 0;
332
- if (status) {
338
+ if (rb_hash_aref(did_raise, "error") != Qnil) {
333
339
  CURB_RB_CALLBACK_RAISE("success")
334
340
  }
335
341
  } else if (!rb_easy_nil("redirect_proc") && ((response_code >= 300 && response_code < 400) || redirect_count > 0) ) {
336
342
  rbce->callback_active = 1;
337
343
  callargs = rb_ary_new3(3, rb_easy_get("redirect_proc"), easy, rb_curl_easy_error(result));
338
344
  rbce->callback_active = 0;
339
- rb_protect(call_status_handler2, callargs, &status);
340
- if (status) {
345
+ rb_rescue(call_status_handler2, callargs, callback_exception, did_raise);
346
+ if (rb_hash_aref(did_raise, "error") != Qnil) {
341
347
  CURB_RB_CALLBACK_RAISE("redirect")
342
348
  }
343
349
  } else if (!rb_easy_nil("missing_proc") &&
@@ -345,17 +351,17 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
345
351
  rbce->callback_active = 1;
346
352
  callargs = rb_ary_new3(3, rb_easy_get("missing_proc"), easy, rb_curl_easy_error(result));
347
353
  rbce->callback_active = 0;
348
- rb_protect(call_status_handler2, callargs, &status);
349
- if (status) {
354
+ rb_rescue(call_status_handler2, callargs, callback_exception, did_raise);
355
+ if (rb_hash_aref(did_raise, "error") != Qnil) {
350
356
  CURB_RB_CALLBACK_RAISE("missing")
351
357
  }
352
358
  } else if (!rb_easy_nil("failure_proc") &&
353
359
  (response_code >= 500 && response_code <= 999)) {
354
360
  callargs = rb_ary_new3(3, rb_easy_get("failure_proc"), easy, rb_curl_easy_error(result));
355
361
  rbce->callback_active = 1;
356
- rb_protect(call_status_handler2, callargs, &status);
362
+ rb_rescue(call_status_handler2, callargs, callback_exception, did_raise);
357
363
  rbce->callback_active = 0;
358
- if (status) {
364
+ if (rb_hash_aref(did_raise, "error") != Qnil) {
359
365
  CURB_RB_CALLBACK_RAISE("failure")
360
366
  }
361
367
  }
data/lib/curl/multi.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
  module Curl
3
3
  class Multi
4
+ class DownloadError < RuntimeError
5
+ attr_accessor :errors
6
+ end
4
7
  class << self
5
8
  # call-seq:
6
9
  # Curl::Multi.get(['url1','url2','url3','url4','url5'], :follow_location => true) do|easy|
@@ -241,7 +244,11 @@ module Curl
241
244
  errors << e
242
245
  end
243
246
  }
244
- raise errors unless errors.empty?
247
+ if errors.any?
248
+ de = Curl::Multi::DownloadError.new
249
+ de.errors = errors
250
+ raise de
251
+ end
245
252
  end
246
253
  end
247
254
 
@@ -161,6 +161,15 @@ class TestCurbCurlMulti < Test::Unit::TestCase
161
161
 
162
162
  end
163
163
 
164
+ def test_multi_easy_get
165
+ n = 1
166
+ urls = []
167
+ n.times { urls << $TEST_URL }
168
+ Curl::Multi.get(urls, {timeout: 5}) {|easy|
169
+ puts easy.last_effective_url
170
+ }
171
+ end
172
+
164
173
  # NOTE: if this test runs slowly on Mac OSX, it is probably due to the use of a port install curl+ssl+ares install
165
174
  # on my MacBook, this causes curl_easy_init to take nearly 0.01 seconds / * 100 below is 1 second too many!
166
175
  def test_n_requests
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ross Bamford