curb 0.9.3 → 0.9.4

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: 2964444d7cc4bfb4e2e5f64e9abe3ecaa7b0dacc
4
- data.tar.gz: 170341c4d16f2f3974ab95b170a5dbe89710785f
3
+ metadata.gz: f745e8a670b83facff3af44169290e38d59fc087
4
+ data.tar.gz: 23258e4b6f84aaec880ffb050c8fd774f82728a7
5
5
  SHA512:
6
- metadata.gz: bea120408008fed02a50784ba8655547c9f79a4217b8754ec8cd5605f687b6a414151d0e561294bf33713968e823dc204fce1952bd18af14ab94cf577416be5c
7
- data.tar.gz: e31a107d26330271becb884c663b64944d614057a6918bc345a8926155b52d6fc25798f9f956e9b62bcd94daf619afee54c8f6a6a809df752331a53eb54d5fc1
6
+ metadata.gz: 4f79f4530412869086922114a4a9170acd57e5a8b68c43b19616a3d31609d9f85ef94bf890cad9b57cdd4f7a59bf1257eeb7d20ca40781e72ec4a2f03fe91711
7
+ data.tar.gz: 5f67114460a69c76e6e7835124e26825833c8de153232ba10bab032732481e2c694baf54976dcba80cd43fce37a75f1267a9e9c507d369dead6c924ebb829b67
@@ -65,6 +65,12 @@ Curb provides two classes:
65
65
  * `Curl::Easy` - simple API, for day-to-day tasks.
66
66
  * `Curl::Multi` - more advanced API, for operating on multiple URLs simultaneously.
67
67
 
68
+ To use either, you will need to require the curb gem:
69
+
70
+ ```ruby
71
+ require 'curb'
72
+ ```
73
+
68
74
  ### Super simple API (less typing)
69
75
 
70
76
  ```ruby
data/ext/curb.c CHANGED
@@ -398,6 +398,9 @@ void Init_curb_core() {
398
398
  CURB_DEFINE(CURLOPT_HEADER);
399
399
  CURB_DEFINE(CURLOPT_NOPROGRESS);
400
400
  CURB_DEFINE(CURLOPT_NOSIGNAL);
401
+ #if HAVE_CURLOPT_PATH_AS_IS
402
+ CURB_DEFINE(CURLOPT_PATH_AS_IS);
403
+ #endif
401
404
  CURB_DEFINE(CURLOPT_WRITEFUNCTION);
402
405
  CURB_DEFINE(CURLOPT_WRITEDATA);
403
406
  CURB_DEFINE(CURLOPT_READFUNCTION);
data/ext/curb.h CHANGED
@@ -20,10 +20,10 @@
20
20
  #include "curb_macros.h"
21
21
 
22
22
  // These should be managed from the Rake 'release' task.
23
- #define CURB_VERSION "0.9.3"
24
- #define CURB_VER_NUM 903
23
+ #define CURB_VERSION "0.9.4"
24
+ #define CURB_VER_NUM 904
25
25
  #define CURB_VER_MAJ 0
26
- #define CURB_VER_MIN 3
26
+ #define CURB_VER_MIN 4
27
27
  #define CURB_VER_MIC 0
28
28
  #define CURB_VER_PATCH 0
29
29
 
@@ -228,6 +228,16 @@ static void ruby_curl_easy_free(ruby_curl_easy *rbce) {
228
228
  }
229
229
 
230
230
  if (rbce->curl) {
231
+ /* disable any progress or debug events */
232
+ curl_easy_setopt(rbce->curl, CURLOPT_WRITEFUNCTION, NULL);
233
+ curl_easy_setopt(rbce->curl, CURLOPT_WRITEDATA, NULL);
234
+ curl_easy_setopt(rbce->curl, CURLOPT_HEADERFUNCTION, NULL);
235
+ curl_easy_setopt(rbce->curl, CURLOPT_HEADERDATA, NULL);
236
+ curl_easy_setopt(rbce->curl, CURLOPT_DEBUGFUNCTION, NULL);
237
+ curl_easy_setopt(rbce->curl, CURLOPT_DEBUGDATA, NULL);
238
+ curl_easy_setopt(rbce->curl, CURLOPT_VERBOSE, 0);
239
+ curl_easy_setopt(rbce->curl, CURLOPT_PROGRESSFUNCTION, NULL);
240
+ curl_easy_setopt(rbce->curl, CURLOPT_NOPROGRESS, 1);
231
241
  curl_easy_cleanup(rbce->curl);
232
242
  }
233
243
  }
@@ -3072,12 +3082,40 @@ static VALUE ruby_curl_easy_num_connects_get(VALUE self) {
3072
3082
  }
3073
3083
 
3074
3084
 
3075
- /* TODO this needs to be implemented.
3085
+ /*
3086
+ * call-seq:
3087
+ * easy.cookielist => array
3088
+ *
3089
+ * Retrieves the cookies curl knows in an array of strings.
3090
+ * Returned strings are in Netscape cookiejar format or in Set-Cookie format.
3091
+ *
3092
+ * See also option CURLINFO_COOKIELIST of curl_easy_getopt(3) to see how libcurl behaves.
3093
+ *
3094
+ * (requires libcurl 7.14.1 or higher, otherwise -1 is always returned).
3095
+ */
3096
+ static VALUE ruby_curl_easy_cookielist_get(VALUE self) {
3097
+ #ifdef HAVE_CURLINFO_COOKIELIST
3098
+ ruby_curl_easy *rbce;
3099
+ struct curl_slist *cookies;
3100
+ struct curl_slist *cookie;
3101
+ VALUE rb_cookies;
3076
3102
 
3077
- CURLINFO_COOKIELIST
3103
+ Data_Get_Struct(self, ruby_curl_easy, rbce);
3104
+ curl_easy_getinfo(rbce->curl, CURLINFO_COOKIELIST, &cookies);
3105
+ if (!cookies)
3106
+ return Qnil;
3107
+ rb_cookies = rb_ary_new();
3108
+ for (cookie = cookies; cookie; cookie = cookie->next)
3109
+ rb_ary_push(rb_cookies, rb_str_new2(cookie->data));
3110
+ curl_slist_free_all(cookies);
3111
+ return rb_cookies;
3112
+
3113
+ #else
3114
+ rb_warn("Installed libcurl is too old to support cookielist");
3115
+ return INT2FIX(-1);
3116
+ #endif
3117
+ }
3078
3118
 
3079
- Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all cookies cURL knows (expired ones, too). Don't forget to curl_slist_free_all(3) the list after it has been used. If there are no cookies (cookies for the handle have not been enabled or simply none have been received) 'struct curl_slist *' will be set to point to NULL. (Added in 7.14.1)
3080
- */
3081
3119
 
3082
3120
  /* TODO this needs to be implemented. Could probably support CONNECT_ONLY by having this
3083
3121
  * return an open Socket or something.
@@ -3193,6 +3231,9 @@ static VALUE ruby_curl_easy_set_opt(VALUE self, VALUE opt, VALUE val) {
3193
3231
  case CURLOPT_HEADER:
3194
3232
  case CURLOPT_NOPROGRESS:
3195
3233
  case CURLOPT_NOSIGNAL:
3234
+ #if HAVE_CURLOPT_PATH_AS_IS
3235
+ case CURLOPT_PATH_AS_IS:
3236
+ #endif
3196
3237
  case CURLOPT_HTTPGET:
3197
3238
  case CURLOPT_NOBODY: {
3198
3239
  int type = rb_type(val);
@@ -3536,6 +3577,7 @@ void init_curb_easy() {
3536
3577
  rb_define_method(cCurlEasy, "content_type", ruby_curl_easy_content_type_get, 0);
3537
3578
  rb_define_method(cCurlEasy, "os_errno", ruby_curl_easy_os_errno_get, 0);
3538
3579
  rb_define_method(cCurlEasy, "num_connects", ruby_curl_easy_num_connects_get, 0);
3580
+ rb_define_method(cCurlEasy, "cookielist", ruby_curl_easy_cookielist_get, 0);
3539
3581
  rb_define_method(cCurlEasy, "ftp_entry_path", ruby_curl_easy_ftp_entry_path_get, 0);
3540
3582
 
3541
3583
  rb_define_method(cCurlEasy, "close", ruby_curl_easy_close, 0);
@@ -79,9 +79,7 @@ void curl_multi_free(ruby_curl_multi *rbcm) {
79
79
  rbcm->requests = Qnil;
80
80
  }
81
81
 
82
- if (rbcm->handle) {
83
- curl_multi_cleanup(rbcm->handle);
84
- }
82
+ curl_multi_cleanup(rbcm->handle);
85
83
  free(rbcm);
86
84
  }
87
85
 
@@ -194,13 +192,6 @@ static VALUE ruby_curl_multi_max_connects(VALUE self, VALUE count) {
194
192
 
195
193
  Data_Get_Struct(self, ruby_curl_multi, rbcm);
196
194
 
197
- if (!rbcm->handle) {
198
- rbcm->handle = curl_multi_init();
199
- if (!rbcm->handle) {
200
- rb_raise(mCurlErrFailedInit, "Failed to initialize multi handle");
201
- }
202
- }
203
-
204
195
  curl_multi_setopt(rbcm->handle, CURLMOPT_MAXCONNECTS, NUM2LONG(count));
205
196
  #endif
206
197
 
@@ -234,14 +225,6 @@ static VALUE ruby_curl_multi_pipeline(VALUE self, VALUE method) {
234
225
  }
235
226
 
236
227
  Data_Get_Struct(self, ruby_curl_multi, rbcm);
237
-
238
- if (!rbcm->handle) {
239
- rbcm->handle = curl_multi_init();
240
- if (!rbcm->handle) {
241
- rb_raise(mCurlErrFailedInit, "Failed to initialize multi handle");
242
- }
243
- }
244
-
245
228
  curl_multi_setopt(rbcm->handle, CURLMOPT_PIPELINING, value);
246
229
  #endif
247
230
  return method == Qtrue ? 1 : 0;
@@ -274,13 +257,6 @@ VALUE ruby_curl_multi_add(VALUE self, VALUE easy) {
274
257
  /* setup the easy handle */
275
258
  ruby_curl_easy_setup( rbce );
276
259
 
277
- if (!rbcm->handle) {
278
- rbcm->handle = curl_multi_init();
279
- if (!rbcm->handle) {
280
- rb_raise(mCurlErrFailedInit, "Failed to initialize multi handle");
281
- }
282
- }
283
-
284
260
  mcode = curl_multi_add_handle(rbcm->handle, rbce->curl);
285
261
  if (mcode != CURLM_CALL_MULTI_PERFORM && mcode != CURLM_OK) {
286
262
  raise_curl_multi_error_exception(mcode);
@@ -319,13 +295,6 @@ VALUE ruby_curl_multi_remove(VALUE self, VALUE easy) {
319
295
 
320
296
  Data_Get_Struct(self, ruby_curl_multi, rbcm);
321
297
 
322
- if (!rbcm->handle) {
323
- rbcm->handle = curl_multi_init();
324
- if (!rbcm->handle) {
325
- rb_raise(mCurlErrFailedInit, "Failed to initialize multi handle");
326
- }
327
- }
328
-
329
298
  rb_curl_multi_remove(rbcm,easy);
330
299
 
331
300
  return self;
@@ -376,13 +345,6 @@ static VALUE ruby_curl_multi_cancel(VALUE self) {
376
345
  ruby_curl_multi *rbcm;
377
346
 
378
347
  Data_Get_Struct(self, ruby_curl_multi, rbcm);
379
-
380
- if (!rbcm->handle) {
381
- rbcm->handle = curl_multi_init();
382
- if (!rbcm->handle) {
383
- rb_raise(mCurlErrFailedInit, "Failed to initialize multi handle");
384
- }
385
- }
386
348
 
387
349
  rb_hash_foreach( rbcm->requests, ruby_curl_multi_cancel_callback, (VALUE)rbcm );
388
350
 
@@ -505,11 +467,10 @@ static void rb_curl_multi_run(VALUE self, CURLM *multi_handle, int *still_runnin
505
467
  mcode = curl_multi_perform(multi_handle, still_running);
506
468
  } while (mcode == CURLM_CALL_MULTI_PERFORM);
507
469
 
508
-
509
470
  if (mcode != CURLM_OK) {
510
471
  raise_curl_multi_error_exception(mcode);
511
472
  }
512
-
473
+
513
474
  }
514
475
 
515
476
  #ifdef _WIN32
@@ -634,6 +595,15 @@ VALUE ruby_curl_multi_perform(int argc, VALUE *argv, VALUE self) {
634
595
  raise_curl_multi_error_exception(mcode);
635
596
  }
636
597
 
598
+ if (maxfd == -1) {
599
+ /* libcurl recommends sleeping for 100ms */
600
+ rb_thread_wait_for(rb_time_timeval(DBL2NUM(0.1)));
601
+ rb_curl_multi_run( self, rbcm->handle, &(rbcm->running) );
602
+ rb_curl_multi_read_info( self, rbcm->handle );
603
+ if (block != Qnil) { rb_funcall(block, rb_intern("call"), 1, self); }
604
+ continue;
605
+ }
606
+
637
607
  #ifdef _WIN32
638
608
  create_crt_fd(&fdread, &crt_fdread);
639
609
  create_crt_fd(&fdwrite, &crt_fdwrite);
@@ -683,15 +653,7 @@ VALUE ruby_curl_multi_perform(int argc, VALUE *argv, VALUE self) {
683
653
 
684
654
  rb_curl_multi_read_info( self, rbcm->handle );
685
655
  if (block != Qnil) { rb_funcall(block, rb_intern("call"), 1, self); }
686
-
687
- /* do early cleanup */
688
- VALUE hash = rbcm->requests;
689
- if (!NIL_P(hash) && rb_type(hash) == T_HASH && RHASH_SIZE(hash) > 0) {
690
- rb_hash_foreach(hash, curl_multi_flush_easy, (VALUE)rbcm);
691
- }
692
- curl_multi_cleanup(rbcm->handle);
693
- rbcm->handle = NULL;
694
-
656
+
695
657
  return Qtrue;
696
658
  }
697
659
 
@@ -66,6 +66,7 @@ have_constant "curlinfo_filetime"
66
66
  have_constant "curlinfo_redirect_count"
67
67
  have_constant "curlinfo_os_errno"
68
68
  have_constant "curlinfo_num_connects"
69
+ have_constant "curlinfo_cookielist"
69
70
  have_constant "curlinfo_ftp_entry_path"
70
71
  have_constant "curl_version_ssl"
71
72
  have_constant "curl_version_libz"
@@ -101,6 +102,9 @@ have_constant "curle_send_fail_rewind"
101
102
  have_constant "curle_ssl_engine_initfailed"
102
103
  have_constant "curle_login_denied"
103
104
 
105
+ # older than 7.16.0
106
+ have_constant "curlmopt_pipelining"
107
+
104
108
  # older than 7.16.3
105
109
  have_constant "curlmopt_maxconnects"
106
110
 
@@ -370,6 +374,9 @@ have_constant "CURLM_ADDED_ALREADY"
370
374
  # added in 7.40.0
371
375
  have_constant "curlopt_unix_socket_path"
372
376
 
377
+ # added in 7.42.0
378
+ have_constant "curlopt_path_as_is"
379
+
373
380
  if try_compile('int main() { return 0; }','-Wall')
374
381
  $CFLAGS << ' -Wall'
375
382
  end
@@ -47,14 +47,9 @@ module Curl
47
47
  end
48
48
 
49
49
  def self.urlalize(url, params={})
50
- query_str = params.map {|k,v| "#{URI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
51
- if url.match(/\?/) && query_str.size > 0
52
- "#{url}&#{query_str}"
53
- elsif query_str.size > 0
54
- "#{url}?#{query_str}"
55
- else
56
- url
57
- end
50
+ uri = URI(url)
51
+ uri.query = params.map {|k,v| "#{URI.escape(k.to_s)}=#{URI.escape(v.to_s)}" }.join("&")
52
+ uri.to_s
58
53
  end
59
54
 
60
55
  def self.postalize(params={})
@@ -18,7 +18,7 @@ rescue LoadError
18
18
  end
19
19
  require 'fileutils'
20
20
 
21
- $TEST_URL = "file://#{URI.escape(File.expand_path(__FILE__).tr('\\','/').tr(':','|'))}"
21
+ $TEST_URL = "file://#{'/' if RUBY_DESCRIPTION =~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/}#{URI.escape(File.expand_path(__FILE__).tr('\\','/'))}"
22
22
 
23
23
  require 'thread'
24
24
  require 'webrick'
@@ -52,13 +52,12 @@ class TestServlet < WEBrick::HTTPServlet::AbstractServlet
52
52
  end
53
53
 
54
54
  def self.port
55
- (@port or 9129)
55
+ @port ||= 9129
56
56
  end
57
57
 
58
58
  def self.path
59
59
  '/methods'
60
60
  end
61
-
62
61
  def self.url
63
62
  "http://127.0.0.1:#{port}#{path}"
64
63
  end
@@ -70,12 +69,12 @@ class TestServlet < WEBrick::HTTPServlet::AbstractServlet
70
69
  end
71
70
 
72
71
  def do_GET(req,res)
73
- if req.path.match /redirect$/
72
+ if req.path.match(/redirect$/)
74
73
  res.status = 302
75
74
  res['Location'] = '/foo'
76
- elsif req.path.match /not_here$/
75
+ elsif req.path.match(/not_here$/)
77
76
  res.status = 404
78
- elsif req.path.match /error$/
77
+ elsif req.path.match(/error$/)
79
78
  res.status = 500
80
79
  end
81
80
  respond_with("GET#{req.query_string}",req,res)
@@ -94,6 +93,9 @@ class TestServlet < WEBrick::HTTPServlet::AbstractServlet
94
93
  end
95
94
  if params and params['s'] == '500'
96
95
  res.status = 500
96
+ elsif params and params['c']
97
+ cookie = URI.decode_www_form(params['c'])[0][0].split('=')
98
+ res.cookies << WEBrick::Cookie.new(*cookie)
97
99
  else
98
100
  respond_with("POST\n#{req.body}",req,res)
99
101
  end
@@ -136,7 +138,7 @@ module TestServerMethods
136
138
 
137
139
  def server_setup(port=9129,servlet=TestServlet)
138
140
  @__port = port
139
- if @server.nil? and !File.exist?(locked_file)
141
+ if (@server ||= nil).nil? and !File.exist?(locked_file)
140
142
 
141
143
  File.open(locked_file,'w') {|f| f << 'locked' }
142
144
  if TEST_SINGLE_THREADED
@@ -11,7 +11,7 @@ class TestCurbCurlDownload < Test::Unit::TestCase
11
11
  dl_url = "http://127.0.0.1:9129/ext/curb_easy.c"
12
12
  dl_path = File.join(Dir::tmpdir, "dl_url_test.file")
13
13
 
14
- curb = Curl::Easy.download(dl_url, dl_path)
14
+ Curl::Easy.download(dl_url, dl_path)
15
15
  assert File.exist?(dl_path)
16
16
  assert_equal File.read(File.join(File.dirname(__FILE__), '..','ext','curb_easy.c')), File.read(dl_path)
17
17
  ensure
@@ -23,7 +23,7 @@ class TestCurbCurlDownload < Test::Unit::TestCase
23
23
  dl_path = File.join(Dir::tmpdir, "dl_url_test.file")
24
24
  io = File.open(dl_path, 'wb')
25
25
 
26
- curb = Curl::Easy.download(dl_url, io)
26
+ Curl::Easy.download(dl_url, io)
27
27
  assert io.closed?
28
28
  assert File.exist?(dl_path)
29
29
  assert_equal File.read(File.join(File.dirname(__FILE__), '..','ext','curb_easy.c')), File.read(dl_path)
@@ -49,7 +49,7 @@ class TestCurbCurlDownload < Test::Unit::TestCase
49
49
  # Download remote source
50
50
  begin
51
51
  reader.close
52
- curb = Curl::Easy.download(dl_url, writer)
52
+ Curl::Easy.download(dl_url, writer)
53
53
  Process.wait
54
54
  ensure
55
55
  writer.close rescue IOError # if the stream has already been closed, which occurs in Easy::download
@@ -5,7 +5,7 @@ end
5
5
 
6
6
  class TestCurbCurlEasy < Test::Unit::TestCase
7
7
  def test_global_reset
8
- c = Curl.get($TEST_URL)
8
+ Curl.get($TEST_URL)
9
9
  # in a Timeout block you should reset the thread current handle
10
10
  Curl.reset
11
11
  end
@@ -24,7 +24,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
24
24
  end
25
25
  end
26
26
 
27
- t.each {|t| t.join }
27
+ t.each {|x| x.join }
28
28
  end
29
29
 
30
30
  def test_class_perform_01
@@ -44,7 +44,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
44
44
  end
45
45
 
46
46
  def test_class_perform_03
47
- assert_raise(Curl::Err::CouldntReadError) { c = Curl::Easy.perform($TEST_URL + "nonexistent") }
47
+ assert_raise(Curl::Err::CouldntReadError) { Curl::Easy.perform($TEST_URL + "nonexistent") }
48
48
  end
49
49
 
50
50
  def test_new_01
@@ -595,6 +595,15 @@ class TestCurbCurlEasy < Test::Unit::TestCase
595
595
  assert_equal "some.file", c.cookiejar
596
596
  end
597
597
 
598
+ def test_cookielist
599
+ c = Curl::Easy.new TestServlet.url
600
+ c.enable_cookies = true
601
+ c.post_body = URI.encode_www_form c: 'somename=somevalue'
602
+ assert_nil c.cookielist
603
+ c.perform
604
+ assert_match(/somevalue/, c.cookielist.join(''))
605
+ end
606
+
598
607
  def test_on_success
599
608
  curl = Curl::Easy.new($TEST_URL)
600
609
  on_success_called = false
@@ -657,7 +666,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
657
666
  retries = 0
658
667
  begin
659
668
  count = 0
660
- curl = Curl::Easy.send("http_#{method}", TestServlet.url) do|c|
669
+ Curl::Easy.send("http_#{method}", TestServlet.url) do|c|
661
670
  count += 1
662
671
  assert_equal Curl::Easy, c.class
663
672
  end
@@ -679,8 +688,8 @@ class TestCurbCurlEasy < Test::Unit::TestCase
679
688
  Curl::PostField.file('bar', File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown')))
680
689
  ]
681
690
  curl.http_post(fields)
682
- assert_match /HTTP POST file upload/, curl.body_str
683
- assert_match /Content-Disposition: form-data/, curl.body_str
691
+ assert_match(/HTTP POST file upload/, curl.body_str)
692
+ assert_match(/Content-Disposition: form-data/, curl.body_str)
684
693
  end
685
694
 
686
695
  def test_post_with_body_remote
@@ -706,8 +715,8 @@ class TestCurbCurlEasy < Test::Unit::TestCase
706
715
  curl.multipart_form_post = true
707
716
  pf = Curl::PostField.file('readme', File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown')))
708
717
  curl.http_post(pf)
709
- assert_match /HTTP POST file upload/, curl.body_str
710
- assert_match /Content-Disposition: form-data/, curl.body_str
718
+ assert_match(/HTTP POST file upload/, curl.body_str)
719
+ assert_match(/Content-Disposition: form-data/, curl.body_str)
711
720
  end
712
721
 
713
722
  def test_delete_remote
@@ -729,7 +738,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
729
738
  redirect = curl.header_str.match(/Location: (.*)/)
730
739
 
731
740
  assert_equal '', curl.body_str
732
- assert_match '/nonexistent', redirect[1]
741
+ assert_match('/nonexistent', redirect[1])
733
742
  end
734
743
 
735
744
  def test_head_accessor
@@ -740,7 +749,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
740
749
  redirect = curl.header_str.match(/Location: (.*)/)
741
750
 
742
751
  assert_equal '', curl.body_str
743
- assert_match '/nonexistent', redirect[1]
752
+ assert_match('/nonexistent', redirect[1])
744
753
  curl.head = false
745
754
  curl.perform
746
755
  assert_equal 'GET', curl.body_str
@@ -750,11 +759,11 @@ class TestCurbCurlEasy < Test::Unit::TestCase
750
759
  curl = Curl::Easy.new(TestServlet.url)
751
760
  curl.headers['Content-Type'] = 'application/json'
752
761
  assert curl.http_put("message")
753
- assert_match /^PUT/, curl.body_str
754
- assert_match /message$/, curl.body_str
755
- assert_match /message$/, curl.body
756
- assert_match /application\/json/, curl.header_str
757
- assert_match /application\/json/, curl.head
762
+ assert_match(/^PUT/, curl.body_str)
763
+ assert_match(/message$/, curl.body_str)
764
+ assert_match(/message$/, curl.body)
765
+ assert_match(/application\/json/, curl.header_str)
766
+ assert_match(/application\/json/, curl.head)
758
767
  end
759
768
 
760
769
  def test_put_data
@@ -763,8 +772,8 @@ class TestCurbCurlEasy < Test::Unit::TestCase
763
772
 
764
773
  curl.perform
765
774
 
766
- assert_match /^PUT/, curl.body_str
767
- assert_match /message$/, curl.body_str
775
+ assert_match(/^PUT/, curl.body_str)
776
+ assert_match(/message$/, curl.body_str)
768
777
  end
769
778
 
770
779
  # https://github.com/taf2/curb/issues/101
@@ -774,8 +783,8 @@ class TestCurbCurlEasy < Test::Unit::TestCase
774
783
 
775
784
  curl.perform
776
785
 
777
- assert_match /^PUT/, curl.body_str
778
- assert_match "a\0b", curl.body_str
786
+ assert_match(/^PUT/, curl.body_str)
787
+ assert_match("a\0b", curl.body_str)
779
788
  end
780
789
 
781
790
  def test_put_nil_data_no_crash
@@ -790,7 +799,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
790
799
  File.open(__FILE__,'rb') do|f|
791
800
  assert curl.http_put(f)
792
801
  end
793
- assert_equal "PUT\n#{File.read(__FILE__)}", curl.body_str
802
+ assert_equal "PUT\n#{File.read(__FILE__)}", curl.body_str.tr("\r", '')
794
803
  end
795
804
 
796
805
  def test_put_class_method
@@ -800,7 +809,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
800
809
  assert_equal Curl::Easy, c.class
801
810
  end
802
811
  assert_equal 1, count
803
- assert_equal "PUT\n#{File.read(__FILE__)}", curl.body_str
812
+ assert_equal "PUT\n#{File.read(__FILE__)}", curl.body_str.tr("\r", '')
804
813
  end
805
814
 
806
815
  # Generate a self-signed cert with
@@ -809,7 +818,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
809
818
  def test_cert
810
819
  curl = Curl::Easy.new(TestServlet.url)
811
820
  curl.cert= File.join(File.dirname(__FILE__),"cert.pem")
812
- assert_match /cert.pem$/,curl.cert
821
+ assert_match(/cert.pem$/,curl.cert)
813
822
  end
814
823
 
815
824
  def test_cert_with_password
@@ -817,7 +826,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
817
826
  path = File.join(File.dirname(__FILE__),"cert.pem")
818
827
  curl.certpassword = 'password'
819
828
  curl.cert = path
820
- assert_match /cert.pem$/,curl.cert
829
+ assert_match(/cert.pem$/,curl.cert)
821
830
  end
822
831
 
823
832
  def test_cert_type
@@ -838,7 +847,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
838
847
  def test_ca_cert
839
848
  curl = Curl::Easy.new(TestServlet.url)
840
849
  curl.cacert= File.join(File.dirname(__FILE__),"cacert.pem")
841
- assert_match /cacert.pem$/, curl.cacert
850
+ assert_match(/cacert.pem$/, curl.cacert)
842
851
  end
843
852
 
844
853
  def test_user_agent
@@ -896,7 +905,7 @@ class TestCurbCurlEasy < Test::Unit::TestCase
896
905
  easy.http_post(pf)
897
906
 
898
907
  assert_not_equal(0,easy.body_str.size)
899
- assert_equal(easy.body_str,File.read(readme))
908
+ assert_equal(easy.body_str.tr("\r", ''), File.read(readme))
900
909
  end
901
910
 
902
911
 
@@ -992,8 +1001,8 @@ class TestCurbCurlEasy < Test::Unit::TestCase
992
1001
  curl.headers['Accept'] = '*/*'
993
1002
  curl.headers['Authorization'] = 'Foo Bar Biz Baz'
994
1003
  curl.http_put(rd)
995
- assert_match /^PUT/, curl.body_str
996
- assert_match /hello$/, curl.body_str
1004
+ assert_match(/^PUT/, curl.body_str)
1005
+ assert_match(/hello$/, curl.body_str)
997
1006
  curl.header_str
998
1007
  curl.body_str
999
1008
  end
@@ -331,7 +331,6 @@ class TestCurbCurlMulti < Test::Unit::TestCase
331
331
  Curl::Multi.download(urls,{},{},downloads) do|curl,download_path|
332
332
  assert_equal 200, curl.response_code
333
333
  assert File.exist?(download_path)
334
- store = file_info[File.basename(download_path)]
335
334
  assert_equal file_info[File.basename(download_path)][:size], File.size(download_path), "incomplete download: #{download_path}"
336
335
  end
337
336
  ensure
@@ -346,7 +345,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase
346
345
  ]
347
346
  Curl::Multi.post(urls, {:follow_location => true, :multipart_form_post => true}, {:pipeline => true}) do|easy|
348
347
  str = easy.body_str
349
- assert_match /POST/, str
348
+ assert_match(/POST/, str)
350
349
  fields = {}
351
350
  str.gsub(/POST\n/,'').split('&').map{|sv| k, v = sv.split('='); fields[k] = v }
352
351
  expected = urls.find{|s| s[:url] == easy.last_effective_url }
@@ -361,8 +360,8 @@ class TestCurbCurlMulti < Test::Unit::TestCase
361
360
  { :url => TestServlet.url, :method => :put, :put_data => "message",
362
361
  :headers => {'Content-Type' => 'application/json' } }]
363
362
  Curl::Multi.put(urls, {}, {:pipeline => true}) do|easy|
364
- assert_match /PUT/, easy.body_str
365
- assert_match /message/, easy.body_str
363
+ assert_match(/PUT/, easy.body_str)
364
+ assert_match(/message/, easy.body_str)
366
365
  end
367
366
  end
368
367
 
@@ -379,11 +378,11 @@ class TestCurbCurlMulti < Test::Unit::TestCase
379
378
  assert_equal nil, code
380
379
  case method
381
380
  when :post
382
- assert_match /POST/, easy.body_str
381
+ assert_match(/POST/, easy.body_str)
383
382
  when :get
384
- assert_match /GET/, easy.body_str
383
+ assert_match(/GET/, easy.body_str)
385
384
  when :put
386
- assert_match /PUT/, easy.body_str
385
+ assert_match(/PUT/, easy.body_str)
387
386
  end
388
387
  #puts "#{easy.body_str.inspect}, #{method.inspect}, #{code.inspect}"
389
388
  end
@@ -399,11 +398,11 @@ class TestCurbCurlMulti < Test::Unit::TestCase
399
398
  assert_equal nil, code
400
399
  case method
401
400
  when :post
402
- assert_match /POST/, easy.body_str
401
+ assert_match(/POST/, easy.body_str)
403
402
  when :get
404
- assert_match /GET/, easy.body_str
403
+ assert_match(/GET/, easy.body_str)
405
404
  when :put
406
- assert_match /PUT/, easy.body_str
405
+ assert_match(/PUT/, easy.body_str)
407
406
  end
408
407
  end
409
408
  end
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: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ross Bamford
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-04-11 00:00:00.000000000 Z
12
+ date: 2017-08-26 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Curb (probably CUrl-RuBy or something) provides Ruby-language bindings
15
15
  for the libcurl(3), a fully-featured client-side URL transfer library. cURL and