taf2-curb 0.4.9.0 → 0.5.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/ext/curb.h CHANGED
@@ -20,11 +20,11 @@
20
20
  #include "curb_macros.h"
21
21
 
22
22
  // These should be managed from the Rake 'release' task.
23
- #define CURB_VERSION "0.4.9.0"
24
- #define CURB_VER_NUM 490
23
+ #define CURB_VERSION "0.5.0.0"
24
+ #define CURB_VER_NUM 500
25
25
  #define CURB_VER_MAJ 0
26
- #define CURB_VER_MIN 4
27
- #define CURB_VER_MIC 9
26
+ #define CURB_VER_MIN 5
27
+ #define CURB_VER_MIC 0
28
28
  #define CURB_VER_PATCH 0
29
29
 
30
30
 
data/ext/curb_easy.c CHANGED
@@ -1669,7 +1669,6 @@ VALUE ruby_curl_easy_setup( ruby_curl_easy *rbce, VALUE *body_buffer, VALUE *hea
1669
1669
  }
1670
1670
  }
1671
1671
  if (rbce->cacert != Qnil) {
1672
- // XXX: This should really be using the output of 'curl-config --ca'
1673
1672
  #ifdef HAVE_CURL_CONFIG_CA
1674
1673
  curl_easy_setopt(curl, CURLOPT_CAINFO, CURL_CONFIG_CA);
1675
1674
  #else
@@ -1682,7 +1681,6 @@ VALUE ruby_curl_easy_setup( ruby_curl_easy *rbce, VALUE *body_buffer, VALUE *hea
1682
1681
  curl_easy_setopt(curl, CURLOPT_USERAGENT, StringValuePtr(rbce->useragent));
1683
1682
  }
1684
1683
 
1685
-
1686
1684
  /* Setup HTTP headers if necessary */
1687
1685
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, NULL); // XXX: maybe we shouldn't be clearing this?
1688
1686
 
@@ -1772,7 +1770,7 @@ static VALUE handle_perform(VALUE self, ruby_curl_easy *rbce) {
1772
1770
 
1773
1771
  VALUE multi = ruby_curl_multi_new(cCurlMulti);
1774
1772
  ruby_curl_multi_add(multi, self);
1775
- VALUE ret = ruby_curl_multi_perform(multi);
1773
+ VALUE ret = rb_funcall(multi, rb_intern("perform"), 0);
1776
1774
 
1777
1775
  /* check for errors in the easy response and raise exceptions if anything went wrong and their is no on_failure handler */
1778
1776
  if( rbce->last_result != 0 && rbce->failure_proc == Qnil ) {
@@ -1875,9 +1873,7 @@ static VALUE ruby_curl_easy_perform_post(int argc, VALUE *argv, VALUE self) {
1875
1873
  rb_scan_args(argc, argv, "*", &args_ary);
1876
1874
 
1877
1875
  Data_Get_Struct(self, ruby_curl_easy, rbce);
1878
- curl = curl_easy_duphandle(rbce->curl);
1879
- curl_easy_cleanup(rbce->curl);
1880
- rbce->curl = curl;
1876
+ curl = rbce->curl;
1881
1877
 
1882
1878
  if (rbce->multipart_form_post) {
1883
1879
  VALUE ret;
@@ -1976,9 +1972,19 @@ static VALUE ruby_curl_easy_perform_put(VALUE self, VALUE data) {
1976
1972
 
1977
1973
  ruby_curl_easy_put_data_set(self, data);
1978
1974
 
1979
- VALUE ret = handle_perform(self, rbce);
1980
-
1981
- return ret;
1975
+ return handle_perform(self, rbce);
1976
+ }
1977
+
1978
+ /*
1979
+ * call-seq:
1980
+ * Curl::Easy.http_put(url, data) {|c| ... }
1981
+ *
1982
+ * see easy.http_put
1983
+ */
1984
+ static VALUE ruby_curl_easy_class_perform_put(VALUE klass, VALUE url, VALUE data) {
1985
+ VALUE c = ruby_curl_easy_new(1, &url, klass);
1986
+ ruby_curl_easy_perform_put(c, data);
1987
+ return c;
1982
1988
  }
1983
1989
 
1984
1990
  /* =================== DATA FUNCS =============== */
@@ -2653,10 +2659,6 @@ static VALUE ruby_curl_easy_class_perform(int argc, VALUE *argv, VALUE klass) {
2653
2659
  static VALUE ruby_curl_easy_class_perform_get(int argc, VALUE *argv, VALUE klass) {
2654
2660
  VALUE c = ruby_curl_easy_new(argc, argv, klass);
2655
2661
 
2656
- if (rb_block_given_p()) {
2657
- rb_yield(c);
2658
- }
2659
-
2660
2662
  ruby_curl_easy_perform_get(c);
2661
2663
  return c;
2662
2664
  }
@@ -2674,10 +2676,6 @@ static VALUE ruby_curl_easy_class_perform_get(int argc, VALUE *argv, VALUE klass
2674
2676
  static VALUE ruby_curl_easy_class_perform_delete(int argc, VALUE *argv, VALUE klass) {
2675
2677
  VALUE c = ruby_curl_easy_new(argc, argv, klass);
2676
2678
 
2677
- if (rb_block_given_p()) {
2678
- rb_yield(c);
2679
- }
2680
-
2681
2679
  ruby_curl_easy_perform_delete(c);
2682
2680
  return c;
2683
2681
  }
@@ -2695,10 +2693,6 @@ static VALUE ruby_curl_easy_class_perform_delete(int argc, VALUE *argv, VALUE kl
2695
2693
  static VALUE ruby_curl_easy_class_perform_head(int argc, VALUE *argv, VALUE klass) {
2696
2694
  VALUE c = ruby_curl_easy_new(argc, argv, klass);
2697
2695
 
2698
- if (rb_block_given_p()) {
2699
- rb_yield(c);
2700
- }
2701
-
2702
2696
  ruby_curl_easy_perform_head(c);
2703
2697
 
2704
2698
  return c;
@@ -2756,6 +2750,7 @@ void init_curb_easy() {
2756
2750
  rb_define_singleton_method(cCurlEasy, "http_get", ruby_curl_easy_class_perform_get, -1);
2757
2751
  rb_define_singleton_method(cCurlEasy, "http_post", ruby_curl_easy_class_perform_post, -1);
2758
2752
  rb_define_singleton_method(cCurlEasy, "http_head", ruby_curl_easy_class_perform_head, -1);
2753
+ rb_define_singleton_method(cCurlEasy, "http_put", ruby_curl_easy_class_perform_put, 2);
2759
2754
 
2760
2755
  /* Attributes for config next perform */
2761
2756
  rb_define_method(cCurlEasy, "url=", ruby_curl_easy_url_set, 1);
data/ext/curb_multi.c CHANGED
@@ -57,6 +57,11 @@ static void curl_multi_flush_easy(VALUE key, VALUE easy, ruby_curl_multi *rbcm)
57
57
  }
58
58
  }
59
59
 
60
+ static int
61
+ rb_hash_clear_i(VALUE key, VALUE value, VALUE dummy) {
62
+ return ST_DELETE;
63
+ }
64
+
60
65
  static void curl_multi_free(ruby_curl_multi *rbcm) {
61
66
 
62
67
  //printf("hash entries: %d\n", RHASH(rbcm->requests)->tbl->num_entries );
@@ -64,7 +69,7 @@ static void curl_multi_free(ruby_curl_multi *rbcm) {
64
69
 
65
70
  rb_hash_foreach( rbcm->requests, (int (*)())curl_multi_flush_easy, (VALUE)rbcm );
66
71
 
67
- //rb_hash_clear(rbcm->requests)
72
+ rb_hash_foreach(rbcm->requests, rb_hash_clear_i, 0); //rb_hash_clear(rbcm->requests);
68
73
  rbcm->requests = Qnil;
69
74
  }
70
75
  curl_multi_cleanup(rbcm->handle);
@@ -381,7 +386,7 @@ static void rb_curl_multi_run(VALUE self, CURLM *multi_handle, int *still_runnin
381
386
  *
382
387
  * Run multi handles, looping selecting when data can be transfered
383
388
  */
384
- VALUE ruby_curl_multi_perform(VALUE self) {
389
+ VALUE ruby_curl_multi_perform(int argc, VALUE *argv, VALUE self) {
385
390
  CURLMcode mcode;
386
391
  ruby_curl_multi *rbcm;
387
392
  int maxfd, rc;
@@ -389,9 +394,11 @@ VALUE ruby_curl_multi_perform(VALUE self) {
389
394
 
390
395
  long timeout_milliseconds;
391
396
  struct timeval tv = {0, 0};
397
+ VALUE block = Qnil;
398
+
399
+ rb_scan_args(argc, argv, "0&", &block);
392
400
 
393
401
  Data_Get_Struct(self, ruby_curl_multi, rbcm);
394
- //rb_gc_mark(self);
395
402
 
396
403
  rb_curl_multi_run( self, rbcm->handle, &(rbcm->running) );
397
404
 
@@ -440,9 +447,12 @@ VALUE ruby_curl_multi_perform(VALUE self) {
440
447
  rb_raise(rb_eRuntimeError, "select(): %s", strerror(errno));
441
448
  break;
442
449
  case 0:
443
- if (rb_block_given_p()) {
444
- rb_yield(self);
450
+ if (block != Qnil) {
451
+ rb_funcall(block, rb_intern("call"), 1, self);
445
452
  }
453
+ // if (rb_block_given_p()) {
454
+ // rb_yield(self);
455
+ // }
446
456
  default:
447
457
  rb_curl_multi_run( self, rbcm->handle, &(rbcm->running) );
448
458
  break;
@@ -472,5 +482,5 @@ void init_curb_multi() {
472
482
  rb_define_method(cCurlMulti, "add", ruby_curl_multi_add, 1);
473
483
  rb_define_method(cCurlMulti, "remove", ruby_curl_multi_remove, 1);
474
484
  rb_define_method(cCurlMulti, "cancel!", ruby_curl_multi_cancel, 0);
475
- rb_define_method(cCurlMulti, "perform", ruby_curl_multi_perform, 0);
485
+ rb_define_method(cCurlMulti, "perform", ruby_curl_multi_perform, -1);
476
486
  }
data/ext/curb_multi.h CHANGED
@@ -21,7 +21,7 @@ typedef struct {
21
21
  extern VALUE cCurlMulti;
22
22
  void init_curb_multi();
23
23
  VALUE ruby_curl_multi_new(VALUE klass);
24
- VALUE ruby_curl_multi_perform(VALUE self);
24
+ VALUE ruby_curl_multi_perform(int argc, VALUE *argv, VALUE self);
25
25
  VALUE ruby_curl_multi_add(VALUE self, VALUE easy);
26
26
  VALUE ruby_curl_multi_remove(VALUE self, VALUE easy);
27
27
 
@@ -499,6 +499,19 @@ class TestCurbCurlEasy < Test::Unit::TestCase
499
499
  curl.http_post
500
500
  assert_equal "POST\n", curl.body_str
501
501
  end
502
+
503
+ def test_post_remote_is_easy_handle
504
+ # see: http://pastie.org/560852 and
505
+ # http://groups.google.com/group/curb---ruby-libcurl-bindings/browse_thread/thread/216bb2d9b037f347?hl=en
506
+ [:post, :get,:head,:delete].each do |method|
507
+ count = 0
508
+ curl = Curl::Easy.send("http_#{method}", TestServlet.url) do|c|
509
+ count += 1
510
+ assert_equal Curl::Easy, c.class
511
+ end
512
+ assert_equal 1, count, "For request method: #{method.to_s.upcase}"
513
+ end
514
+ end
502
515
 
503
516
  def test_post_with_body_remote
504
517
  curl = Curl::Easy.new(TestServlet.url)
@@ -574,6 +587,16 @@ class TestCurbCurlEasy < Test::Unit::TestCase
574
587
  end
575
588
  assert_equal "PUT\n#{File.read(__FILE__)}", curl.body_str
576
589
  end
590
+
591
+ def test_put_class_method
592
+ count = 0
593
+ curl = Curl::Easy.http_put(TestServlet.url,File.open(__FILE__,'rb')) do|c|
594
+ count += 1
595
+ assert_equal Curl::Easy, c.class
596
+ end
597
+ assert_equal 1, count
598
+ assert_equal "PUT\n#{File.read(__FILE__)}", curl.body_str
599
+ end
577
600
 
578
601
  # Generate a self-signed cert with
579
602
  # openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 \
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taf2-curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9.0
4
+ version: 0.5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ross Bamford
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-07-26 00:00:00 -07:00
13
+ date: 2009-07-27 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -46,6 +46,7 @@ files:
46
46
  - ext/curb_multi.h
47
47
  has_rdoc: true
48
48
  homepage: http://curb.rubyforge.org/
49
+ licenses:
49
50
  post_install_message:
50
51
  rdoc_options:
51
52
  - --main
@@ -68,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
69
  requirements: []
69
70
 
70
71
  rubyforge_project: curb
71
- rubygems_version: 1.2.0
72
+ rubygems_version: 1.3.5
72
73
  signing_key:
73
74
  specification_version: 2
74
75
  summary: Ruby libcurl bindings