taf2-curb 0.4.9.0 → 0.5.0.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.
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