taf2-curb 0.4.1.0 → 0.4.2.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.1.0"
24
- #define CURB_VER_NUM 410
23
+ #define CURB_VERSION "0.4.2.0"
24
+ #define CURB_VER_NUM 420
25
25
  #define CURB_VER_MAJ 0
26
26
  #define CURB_VER_MIN 4
27
- #define CURB_VER_MIC 1
27
+ #define CURB_VER_MIC 2
28
28
  #define CURB_VER_PATCH 0
29
29
 
30
30
 
data/ext/curb_easy.c CHANGED
@@ -1568,27 +1568,27 @@ VALUE ruby_curl_easy_cleanup( VALUE self, ruby_curl_easy *rbce, VALUE bodybuf, V
1568
1568
  */
1569
1569
  static VALUE handle_perform(VALUE self, ruby_curl_easy *rbce) {
1570
1570
 
1571
- int msgs;
1572
- int still_running = 1;
1573
1571
  CURLcode result = -1;
1574
- CURLMcode mcode = -1;
1575
- CURLM *multi_handle = curl_multi_init();
1576
1572
  struct curl_slist *headers = NULL;
1577
1573
  VALUE bodybuf = Qnil, headerbuf = Qnil;
1578
- long timeout;
1579
- struct timeval tv = {0, 0};
1580
- int rc; /* select() return code */
1581
- int maxfd;
1582
1574
  // char errors[CURL_ERROR_SIZE*2];
1583
1575
 
1584
1576
  ruby_curl_easy_setup(rbce, &bodybuf, &headerbuf, &headers);
1585
1577
  // curl_easy_setopt(rbce->curl, CURLOPT_ERRORBUFFER, errors);
1586
1578
  // curl_easy_setopt(rbce->curl, CURLOPT_VERBOSE, 1);
1587
1579
 
1588
- // if( rb_thread_alone() ) {
1589
- // result = curl_easy_perform(rbce->curl);
1590
- // }
1591
- // else {
1580
+ if( rb_thread_alone() ) {
1581
+ result = curl_easy_perform(rbce->curl);
1582
+ }
1583
+ else {
1584
+ int msgs;
1585
+ int still_running = 1;
1586
+ CURLMcode mcode = -1;
1587
+ CURLM *multi_handle = curl_multi_init();
1588
+ long timeout;
1589
+ struct timeval tv = {0, 0};
1590
+ int rc; /* select() return code */
1591
+ int maxfd;
1592
1592
 
1593
1593
  /* NOTE:
1594
1594
  * We create an Curl multi handle here and use rb_thread_select allowing other ruby threads to
@@ -1679,7 +1679,7 @@ static VALUE handle_perform(VALUE self, ruby_curl_easy *rbce) {
1679
1679
 
1680
1680
  curl_multi_remove_handle(multi_handle, rbce->curl);
1681
1681
  curl_multi_cleanup(multi_handle);
1682
- // }
1682
+ }
1683
1683
 
1684
1684
  ruby_curl_easy_cleanup(self, rbce, bodybuf, headerbuf, headers);
1685
1685
 
@@ -1918,20 +1918,34 @@ static VALUE ruby_curl_easy_perform_put(VALUE self, VALUE data) {
1918
1918
  curl_easy_setopt(curl, CURLOPT_READFUNCTION, (curl_read_callback)read_data_handler);
1919
1919
  curl_easy_setopt(curl, CURLOPT_READDATA, rbce);
1920
1920
 
1921
+ /*
1922
+ * we need to set specific headers for the PUT to work... so
1923
+ * convert the internal headers structure to a HASH if one is set
1924
+ */
1925
+ if (rbce->headers != Qnil) {
1926
+ if (rb_type(rbce->headers) == T_ARRAY || rb_type(rbce->headers) == T_STRING) {
1927
+ rb_raise(rb_eRuntimeError, "Must set headers as a HASH to modify the headers in an http_put request");
1928
+ }
1929
+ }
1930
+
1921
1931
  if (rb_respond_to(data, rb_intern("read"))) {
1922
1932
  VALUE stat = rb_funcall(data, rb_intern("stat"), 0);
1923
1933
  if( stat ) {
1924
- ruby_curl_easy_headers_set(self,rb_str_new2("Expect:"));
1934
+ if( rb_hash_aref(rbce->headers, rb_str_new2("Expect")) == Qnil ) {
1935
+ rb_hash_aset(rbce->headers, rb_str_new2("Expect"), rb_str_new2(""));
1936
+ }
1925
1937
  VALUE size = rb_funcall(stat, rb_intern("size"), 0);
1926
1938
  curl_easy_setopt(curl, CURLOPT_INFILESIZE, FIX2INT(size));
1927
1939
  }
1928
- else {
1929
- ruby_curl_easy_headers_set(self,rb_str_new2("Transfer-Encoding: chunked"));
1940
+ else if( rb_hash_aref(rbce->headers, rb_str_new2("Transfer-Encoding")) == Qnil ) {
1941
+ rb_hash_aset(rbce->headers, rb_str_new2("Transfer-Encoding"), rb_str_new2("chunked"));
1930
1942
  }
1931
1943
  }
1932
1944
  else if (rb_respond_to(data, rb_intern("to_s"))) {
1933
1945
  curl_easy_setopt(curl, CURLOPT_INFILESIZE, RSTRING_LEN(data));
1934
- ruby_curl_easy_headers_set(self,rb_str_new2("Expect:"));
1946
+ if( rb_hash_aref(rbce->headers, rb_str_new2("Expect")) == Qnil ) {
1947
+ rb_hash_aset(rbce->headers, rb_str_new2("Expect"), rb_str_new2(""));
1948
+ }
1935
1949
  }
1936
1950
  else {
1937
1951
  rb_raise(rb_eRuntimeError, "PUT data must respond to read or to_s");
data/tests/helper.rb CHANGED
@@ -76,6 +76,7 @@ class TestServlet < WEBrick::HTTPServlet::AbstractServlet
76
76
  end
77
77
 
78
78
  def do_PUT(req,res)
79
+ res['X-Requested-Content-Type'] = req.content_type
79
80
  respond_with("PUT\n#{req.body}",req,res)
80
81
  end
81
82
 
@@ -532,9 +532,11 @@ class TestCurbCurlEasy < Test::Unit::TestCase
532
532
 
533
533
  def test_put_remote
534
534
  curl = Curl::Easy.new(TestServlet.url)
535
+ curl.headers['Content-Type'] = 'application/json'
535
536
  assert curl.http_put("message")
536
537
  assert_match /^PUT/, curl.body_str
537
538
  assert_match /message$/, curl.body_str
539
+ assert_match /application\/json/, curl.header_str
538
540
  end
539
541
 
540
542
  def test_put_remote_file
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.1.0
4
+ version: 0.4.2.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-06-19 00:00:00 -07:00
13
+ date: 2009-06-22 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies: []
16
16