curb 1.0.7 → 1.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/curb.h +3 -3
- data/ext/curb_easy.c +140 -5
- data/lib/curl/easy.rb +26 -3
- data/tests/bug_issue277.rb +32 -0
- data/tests/tc_curl_easy.rb +62 -14
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26faca47e47561b5ab762a32f58e2771db9a39c2482152fa1116a7082a27de91
|
4
|
+
data.tar.gz: a138509513b023f12537a1bff7fa11e6ef563cc5c59af860b73f119705ee1023
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4686d9ad528ba0f1931c95fa95d25266c8ffcc2214c3a5f527e437f30977f94bde4a48b38d27ad6342cc868c620e2fd4bd214baeae435725a1746d0c93a22aef
|
7
|
+
data.tar.gz: 2e4ba49a5906448e0ad381dad6017cf01140166ee78f1b025b9245cc79c6ff20b37ffd18abc61a56289e8bdeee0750a68f3d84369da36d360f7a61775da10566
|
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.
|
32
|
-
#define CURB_VER_NUM
|
31
|
+
#define CURB_VERSION "1.0.8"
|
32
|
+
#define CURB_VER_NUM 1008
|
33
33
|
#define CURB_VER_MAJ 1
|
34
34
|
#define CURB_VER_MIN 0
|
35
|
-
#define CURB_VER_MIC
|
35
|
+
#define CURB_VER_MIC 8
|
36
36
|
#define CURB_VER_PATCH 0
|
37
37
|
|
38
38
|
|
data/ext/curb_easy.c
CHANGED
@@ -2758,6 +2758,88 @@ static VALUE ruby_curl_easy_perform_post(int argc, VALUE *argv, VALUE self) {
|
|
2758
2758
|
}
|
2759
2759
|
}
|
2760
2760
|
|
2761
|
+
/*
|
2762
|
+
* call-seq:
|
2763
|
+
* easy.http_patch("url=encoded%20form%20data;and=so%20on") => true
|
2764
|
+
* easy.http_patch("url=encoded%20form%20data", "and=so%20on", ...) => true
|
2765
|
+
* easy.http_patch("url=encoded%20form%20data", Curl::PostField, "and=so%20on", ...) => true
|
2766
|
+
* easy.http_patch(Curl::PostField, Curl::PostField ..., Curl::PostField) => true
|
2767
|
+
*
|
2768
|
+
* PATCH the specified formdata to the currently configured URL using
|
2769
|
+
* the current options set for this Curl::Easy instance. This method
|
2770
|
+
* always returns true, or raises an exception (defined under
|
2771
|
+
* Curl::Err) on error.
|
2772
|
+
*
|
2773
|
+
* When multipart_form_post is true the multipart logic is used; otherwise,
|
2774
|
+
* the arguments are joined into a raw PATCH body.
|
2775
|
+
*/
|
2776
|
+
static VALUE ruby_curl_easy_perform_patch(int argc, VALUE *argv, VALUE self) {
|
2777
|
+
ruby_curl_easy *rbce;
|
2778
|
+
CURL *curl;
|
2779
|
+
int i;
|
2780
|
+
VALUE args_ary;
|
2781
|
+
|
2782
|
+
rb_scan_args(argc, argv, "*", &args_ary);
|
2783
|
+
Data_Get_Struct(self, ruby_curl_easy, rbce);
|
2784
|
+
curl = rbce->curl;
|
2785
|
+
|
2786
|
+
/* Clear the error buffer */
|
2787
|
+
memset(rbce->err_buf, 0, CURL_ERROR_SIZE);
|
2788
|
+
|
2789
|
+
/* Set the custom HTTP method to PATCH */
|
2790
|
+
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
|
2791
|
+
|
2792
|
+
if (rbce->multipart_form_post) {
|
2793
|
+
VALUE ret;
|
2794
|
+
struct curl_httppost *first = NULL, *last = NULL;
|
2795
|
+
|
2796
|
+
/* Build the multipart form (same logic as for POST) */
|
2797
|
+
for (i = 0; i < argc; i++) {
|
2798
|
+
if (rb_obj_is_instance_of(argv[i], cCurlPostField)) {
|
2799
|
+
append_to_form(argv[i], &first, &last);
|
2800
|
+
} else if (rb_type(argv[i]) == T_ARRAY) {
|
2801
|
+
long j, argv_len = RARRAY_LEN(argv[i]);
|
2802
|
+
for (j = 0; j < argv_len; ++j) {
|
2803
|
+
if (rb_obj_is_instance_of(rb_ary_entry(argv[i], j), cCurlPostField)) {
|
2804
|
+
append_to_form(rb_ary_entry(argv[i], j), &first, &last);
|
2805
|
+
} else {
|
2806
|
+
rb_raise(eCurlErrInvalidPostField,
|
2807
|
+
"You must use PostFields only with multipart form posts");
|
2808
|
+
return Qnil;
|
2809
|
+
}
|
2810
|
+
}
|
2811
|
+
} else {
|
2812
|
+
rb_raise(eCurlErrInvalidPostField,
|
2813
|
+
"You must use PostFields only with multipart form posts");
|
2814
|
+
return Qnil;
|
2815
|
+
}
|
2816
|
+
}
|
2817
|
+
/* Disable the POST flag */
|
2818
|
+
curl_easy_setopt(curl, CURLOPT_POST, 0);
|
2819
|
+
/* Use the built multipart form as the request body */
|
2820
|
+
curl_easy_setopt(curl, CURLOPT_HTTPPOST, first);
|
2821
|
+
ret = rb_funcall(self, rb_intern("perform"), 0);
|
2822
|
+
curl_formfree(first);
|
2823
|
+
return ret;
|
2824
|
+
} else {
|
2825
|
+
/* Join arguments into a raw PATCH body */
|
2826
|
+
VALUE patch_body = rb_funcall(args_ary, idJoin, 1, rbstrAmp);
|
2827
|
+
if (patch_body == Qnil) {
|
2828
|
+
rb_raise(eCurlErrError, "Failed to join arguments");
|
2829
|
+
return Qnil;
|
2830
|
+
} else {
|
2831
|
+
if (rb_type(patch_body) == T_STRING && RSTRING_LEN(patch_body) > 0) {
|
2832
|
+
ruby_curl_easy_post_body_set(self, patch_body);
|
2833
|
+
}
|
2834
|
+
/* If postdata_buffer is still nil, set it so that the PATCH header is enabled */
|
2835
|
+
if (rb_easy_nil("postdata_buffer")) {
|
2836
|
+
ruby_curl_easy_post_body_set(self, patch_body);
|
2837
|
+
}
|
2838
|
+
return rb_funcall(self, rb_intern("perform"), 0);
|
2839
|
+
}
|
2840
|
+
}
|
2841
|
+
}
|
2842
|
+
|
2761
2843
|
/*
|
2762
2844
|
* call-seq:
|
2763
2845
|
* easy.http_put(data) => true
|
@@ -2766,18 +2848,70 @@ static VALUE ruby_curl_easy_perform_post(int argc, VALUE *argv, VALUE self) {
|
|
2766
2848
|
* current options set for this Curl::Easy instance. This method always
|
2767
2849
|
* returns true, or raises an exception (defined under Curl::Err) on error.
|
2768
2850
|
*/
|
2769
|
-
static VALUE ruby_curl_easy_perform_put(VALUE
|
2851
|
+
static VALUE ruby_curl_easy_perform_put(int argc, VALUE *argv, VALUE self) {
|
2770
2852
|
ruby_curl_easy *rbce;
|
2771
2853
|
CURL *curl;
|
2854
|
+
VALUE args_ary;
|
2855
|
+
int i;
|
2772
2856
|
|
2857
|
+
rb_scan_args(argc, argv, "*", &args_ary);
|
2773
2858
|
Data_Get_Struct(self, ruby_curl_easy, rbce);
|
2774
2859
|
curl = rbce->curl;
|
2775
2860
|
|
2776
2861
|
memset(rbce->err_buf, 0, CURL_ERROR_SIZE);
|
2862
|
+
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
|
2777
2863
|
|
2778
|
-
|
2779
|
-
|
2780
|
-
|
2864
|
+
/* New: if no arguments were provided, treat as an empty PUT */
|
2865
|
+
if (RARRAY_LEN(args_ary) == 0) {
|
2866
|
+
/* Option 1: explicitly set an empty body */
|
2867
|
+
ruby_curl_easy_put_data_set(self, rb_str_new2(""));
|
2868
|
+
}
|
2869
|
+
/* If a single argument is given and it is a String or responds to read, use legacy behavior */
|
2870
|
+
else if (RARRAY_LEN(args_ary) == 1 &&
|
2871
|
+
(rb_type(rb_ary_entry(args_ary, 0)) == T_STRING ||
|
2872
|
+
rb_respond_to(rb_ary_entry(args_ary, 0), rb_intern("read")))) {
|
2873
|
+
ruby_curl_easy_put_data_set(self, rb_ary_entry(args_ary, 0));
|
2874
|
+
}
|
2875
|
+
/* Otherwise, if multipart_form_post is true, use multipart logic */
|
2876
|
+
else if (rbce->multipart_form_post) {
|
2877
|
+
VALUE ret;
|
2878
|
+
struct curl_httppost *first = NULL, *last = NULL;
|
2879
|
+
for (i = 0; i < RARRAY_LEN(args_ary); i++) {
|
2880
|
+
VALUE field = rb_ary_entry(args_ary, i);
|
2881
|
+
if (rb_obj_is_instance_of(field, cCurlPostField)) {
|
2882
|
+
append_to_form(field, &first, &last);
|
2883
|
+
} else if (rb_type(field) == T_ARRAY) {
|
2884
|
+
long j;
|
2885
|
+
for (j = 0; j < RARRAY_LEN(field); j++) {
|
2886
|
+
VALUE subfield = rb_ary_entry(field, j);
|
2887
|
+
if (rb_obj_is_instance_of(subfield, cCurlPostField)) {
|
2888
|
+
append_to_form(subfield, &first, &last);
|
2889
|
+
} else {
|
2890
|
+
rb_raise(eCurlErrInvalidPostField,
|
2891
|
+
"You must use PostFields only with multipart form posts");
|
2892
|
+
}
|
2893
|
+
}
|
2894
|
+
} else {
|
2895
|
+
rb_raise(eCurlErrInvalidPostField,
|
2896
|
+
"You must use PostFields only with multipart form posts");
|
2897
|
+
}
|
2898
|
+
}
|
2899
|
+
curl_easy_setopt(curl, CURLOPT_POST, 0);
|
2900
|
+
curl_easy_setopt(curl, CURLOPT_HTTPPOST, first);
|
2901
|
+
/* Set the method explicitly to PUT */
|
2902
|
+
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
|
2903
|
+
ret = rb_funcall(self, rb_intern("perform"), 0);
|
2904
|
+
curl_formfree(first);
|
2905
|
+
return ret;
|
2906
|
+
}
|
2907
|
+
/* Fallback: join all arguments */
|
2908
|
+
else {
|
2909
|
+
VALUE post_body = rb_funcall(args_ary, idJoin, 1, rbstrAmp);
|
2910
|
+
if (post_body != Qnil && rb_type(post_body) == T_STRING &&
|
2911
|
+
RSTRING_LEN(post_body) > 0) {
|
2912
|
+
ruby_curl_easy_put_data_set(self, post_body);
|
2913
|
+
}
|
2914
|
+
}
|
2781
2915
|
return rb_funcall(self, rb_intern("perform"), 0);
|
2782
2916
|
}
|
2783
2917
|
|
@@ -3946,7 +4080,8 @@ void init_curb_easy() {
|
|
3946
4080
|
|
3947
4081
|
rb_define_method(cCurlEasy, "http", ruby_curl_easy_perform_verb, 1);
|
3948
4082
|
rb_define_method(cCurlEasy, "http_post", ruby_curl_easy_perform_post, -1);
|
3949
|
-
rb_define_method(cCurlEasy, "http_put", ruby_curl_easy_perform_put, 1);
|
4083
|
+
rb_define_method(cCurlEasy, "http_put", ruby_curl_easy_perform_put, -1);
|
4084
|
+
rb_define_method(cCurlEasy, "http_patch", ruby_curl_easy_perform_patch, -1);
|
3950
4085
|
|
3951
4086
|
/* Post-perform info methods */
|
3952
4087
|
rb_define_method(cCurlEasy, "body_str", ruby_curl_easy_body_str_get, 0);
|
data/lib/curl/easy.rb
CHANGED
@@ -374,13 +374,36 @@ module Curl
|
|
374
374
|
#
|
375
375
|
# call-seq:
|
376
376
|
# Curl::Easy.http_put(url, data) {|c| ... }
|
377
|
+
# Curl::Easy.http_put(url, "some=urlencoded%20form%20data&and=so%20on") => true
|
378
|
+
# Curl::Easy.http_put(url, "some=urlencoded%20form%20data", "and=so%20on", ...) => true
|
379
|
+
# Curl::Easy.http_put(url, "some=urlencoded%20form%20data", Curl::PostField, "and=so%20on", ...) => true
|
380
|
+
# Curl::Easy.http_put(url, Curl::PostField, Curl::PostField ..., Curl::PostField) => true
|
377
381
|
#
|
378
382
|
# see easy.http_put
|
379
383
|
#
|
380
|
-
def http_put(
|
381
|
-
|
384
|
+
def http_put(*args)
|
385
|
+
url = args.shift
|
386
|
+
c = Curl::Easy.new(url)
|
387
|
+
yield c if block_given?
|
388
|
+
c.http_put(*args)
|
389
|
+
c
|
390
|
+
end
|
391
|
+
|
392
|
+
#
|
393
|
+
# call-seq:
|
394
|
+
# Curl::Easy.http_patch(url, data) {|c| ... }
|
395
|
+
# Curl::Easy.http_patch(url, "some=urlencoded%20form%20data&and=so%20on") => true
|
396
|
+
# Curl::Easy.http_patch(url, "some=urlencoded%20form%20data", "and=so%20on", ...) => true
|
397
|
+
# Curl::Easy.http_patch(url, "some=urlencoded%20form%20data", Curl::PostField, "and=so%20on", ...) => true
|
398
|
+
# Curl::Easy.http_patch(url, Curl::PostField, Curl::PostField ..., Curl::PostField) => true
|
399
|
+
#
|
400
|
+
# see easy.http_patch
|
401
|
+
#
|
402
|
+
def http_patch(*args)
|
403
|
+
url = args.shift
|
404
|
+
c = Curl::Easy.new(url)
|
382
405
|
yield c if block_given?
|
383
|
-
c.
|
406
|
+
c.http_patch(*args)
|
384
407
|
c
|
385
408
|
end
|
386
409
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
+
|
3
|
+
|
4
|
+
require 'curb'
|
5
|
+
|
6
|
+
class BugIssue102 < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_gc_closewait
|
9
|
+
100.times do
|
10
|
+
responses = {}
|
11
|
+
requests = ["http://www.google.co.uk/", "http://www.ruby-lang.org/"]
|
12
|
+
m = Curl::Multi.new
|
13
|
+
# add a few easy handles
|
14
|
+
requests.each do |url|
|
15
|
+
responses[url] = ""
|
16
|
+
c = Curl::Easy.new(url) do|curl|
|
17
|
+
curl.follow_location = true
|
18
|
+
curl.on_body{|data| responses[url] << data; data.size }
|
19
|
+
curl.on_success {|easy| #puts "success, add more easy handles"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
m.add(c)
|
23
|
+
end
|
24
|
+
|
25
|
+
m.perform do
|
26
|
+
#puts "idling... can do some work here"
|
27
|
+
end
|
28
|
+
GC.start
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/tests/tc_curl_easy.rb
CHANGED
@@ -765,20 +765,27 @@ class TestCurbCurlEasy < Test::Unit::TestCase
|
|
765
765
|
assert_equal 'GET', curl.body_str
|
766
766
|
end
|
767
767
|
|
768
|
-
def
|
768
|
+
def test_remote
|
769
769
|
curl = Curl::Easy.new(TestServlet.url)
|
770
770
|
curl.http_post([Curl::PostField.content('document_id', 5)])
|
771
771
|
assert_equal "POST\ndocument_id=5", curl.unescape(curl.body_str)
|
772
|
+
|
773
|
+
curl.http_put([Curl::PostField.content('document_id', 5)])
|
774
|
+
assert_equal "PUT\ndocument_id=5", curl.unescape(curl.body_str)
|
775
|
+
|
776
|
+
curl.http_patch([Curl::PostField.content('document_id', 5)])
|
777
|
+
assert_equal "PATCH\ndocument_id=5", curl.unescape(curl.body_str)
|
772
778
|
end
|
773
779
|
|
774
|
-
def
|
780
|
+
def test_remote_is_easy_handle
|
775
781
|
# see: http://pastie.org/560852 and
|
776
782
|
# http://groups.google.com/group/curb---ruby-libcurl-bindings/browse_thread/thread/216bb2d9b037f347?hl=en
|
777
|
-
[:post, :get, :head, :delete].each do |method|
|
783
|
+
[:post, :patch, :put, :get, :head, :delete].each do |method|
|
778
784
|
retries = 0
|
779
785
|
begin
|
780
786
|
count = 0
|
781
|
-
|
787
|
+
m = "http_#{method}".to_sym
|
788
|
+
Curl::Easy.send(m, TestServlet.url) do|c|
|
782
789
|
count += 1
|
783
790
|
assert_equal Curl::Easy, c.class
|
784
791
|
end
|
@@ -787,12 +794,14 @@ class TestCurbCurlEasy < Test::Unit::TestCase
|
|
787
794
|
retries+=1
|
788
795
|
retry if retries < 3
|
789
796
|
raise e
|
797
|
+
rescue ArgumentError => e
|
798
|
+
assert false, "#{m} - #{e.message}"
|
790
799
|
end
|
791
800
|
end
|
792
801
|
end
|
793
802
|
|
794
803
|
# see: https://github.com/rvanlieshout/curb/commit/8bcdefddc0162484681ebd1a92d52a642666a445
|
795
|
-
def
|
804
|
+
def test_multipart_array_remote
|
796
805
|
curl = Curl::Easy.new(TestServlet.url)
|
797
806
|
curl.multipart_form_post = true
|
798
807
|
fields = [
|
@@ -802,9 +811,23 @@ class TestCurbCurlEasy < Test::Unit::TestCase
|
|
802
811
|
curl.http_post(fields)
|
803
812
|
assert_match(/HTTP POST file upload/, curl.body_str)
|
804
813
|
assert_match(/Content-Disposition: form-data/, curl.body_str)
|
814
|
+
|
815
|
+
curl = Curl::Easy.new(TestServlet.url)
|
816
|
+
curl.multipart_form_post = true
|
817
|
+
fields = [
|
818
|
+
Curl::PostField.file('foo', File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown'))),
|
819
|
+
Curl::PostField.file('bar', File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown')))
|
820
|
+
]
|
821
|
+
curl.http_put(fields)
|
822
|
+
assert_match(/HTTP POST file upload/, curl.body_str)
|
823
|
+
assert_match(/Content-Disposition: form-data/, curl.body_str)
|
824
|
+
|
825
|
+
curl.http_patch(fields)
|
826
|
+
assert_match(/HTTP POST file upload/, curl.body_str)
|
827
|
+
assert_match(/Content-Disposition: form-data/, curl.body_str)
|
805
828
|
end
|
806
829
|
|
807
|
-
def
|
830
|
+
def test_with_body_remote
|
808
831
|
curl = Curl::Easy.new(TestServlet.url)
|
809
832
|
curl.post_body = 'foo=bar&encoded%20string=val'
|
810
833
|
|
@@ -812,23 +835,42 @@ class TestCurbCurlEasy < Test::Unit::TestCase
|
|
812
835
|
|
813
836
|
assert_equal "POST\nfoo=bar&encoded%20string=val", curl.body_str
|
814
837
|
assert_equal 'foo=bar&encoded%20string=val', curl.post_body
|
838
|
+
|
839
|
+
curl = Curl::Easy.new(TestServlet.url)
|
840
|
+
curl.put_data = 'foo=bar&encoded%20string=val'
|
841
|
+
|
842
|
+
curl.perform
|
843
|
+
|
844
|
+
assert_equal "PUT\nfoo=bar&encoded%20string=val", curl.body_str
|
815
845
|
end
|
816
846
|
|
817
|
-
def
|
847
|
+
def test_form_body_remote
|
818
848
|
curl = Curl::Easy.new(TestServlet.url)
|
819
849
|
curl.http_post('foo=bar', 'encoded%20string=val')
|
820
850
|
|
821
851
|
assert_equal "POST\nfoo=bar&encoded%20string=val", curl.body_str
|
822
852
|
assert_equal 'foo=bar&encoded%20string=val', curl.post_body
|
823
|
-
end
|
824
853
|
|
825
|
-
def test_post_multipart_file_remote
|
826
854
|
curl = Curl::Easy.new(TestServlet.url)
|
827
|
-
curl.
|
828
|
-
|
829
|
-
curl.
|
830
|
-
|
831
|
-
|
855
|
+
curl.http_put('foo=bar', 'encoded%20string=val')
|
856
|
+
|
857
|
+
assert_equal "PUT\nfoo=bar&encoded%20string=val", curl.body_str
|
858
|
+
|
859
|
+
curl = Curl::Easy.new(TestServlet.url)
|
860
|
+
curl.http_patch('foo=bar', 'encoded%20string=val')
|
861
|
+
|
862
|
+
assert_equal "PATCH\nfoo=bar&encoded%20string=val", curl.body_str
|
863
|
+
end
|
864
|
+
|
865
|
+
def test_multipart_file_remote
|
866
|
+
[:put, :post, :patch].each {|method|
|
867
|
+
curl = Curl::Easy.new(TestServlet.url)
|
868
|
+
curl.multipart_form_post = true
|
869
|
+
pf = Curl::PostField.file('readme', File.expand_path(File.join(File.dirname(__FILE__),'..','README.markdown')))
|
870
|
+
curl.send("http_#{method}", pf)
|
871
|
+
assert_match(/HTTP POST file upload/, curl.body_str)
|
872
|
+
assert_match(/Content-Disposition: form-data/, curl.body_str)
|
873
|
+
}
|
832
874
|
end
|
833
875
|
|
834
876
|
def test_delete_remote
|
@@ -1065,6 +1107,12 @@ class TestCurbCurlEasy < Test::Unit::TestCase
|
|
1065
1107
|
assert_equal "PUT\nhello", curl.body_str
|
1066
1108
|
curl.http('COPY')
|
1067
1109
|
assert_equal 'COPY', curl.body_str
|
1110
|
+
|
1111
|
+
curl.http_patch
|
1112
|
+
assert_equal "PATCH\n", curl.body_str
|
1113
|
+
|
1114
|
+
curl.http_put
|
1115
|
+
assert_equal "PUT\n", curl.body_str
|
1068
1116
|
end
|
1069
1117
|
|
1070
1118
|
def test_easy_http_verbs_must_respond_to_str
|
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.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ross Bamford
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- tests/bug_follow_redirect_288.rb
|
53
53
|
- tests/bug_instance_post_differs_from_class_post.rb
|
54
54
|
- tests/bug_issue102.rb
|
55
|
+
- tests/bug_issue277.rb
|
55
56
|
- tests/bug_multi_segfault.rb
|
56
57
|
- tests/bug_postfields_crash.rb
|
57
58
|
- tests/bug_postfields_crash2.rb
|
@@ -108,6 +109,7 @@ test_files:
|
|
108
109
|
- tests/bug_follow_redirect_288.rb
|
109
110
|
- tests/bug_instance_post_differs_from_class_post.rb
|
110
111
|
- tests/bug_issue102.rb
|
112
|
+
- tests/bug_issue277.rb
|
111
113
|
- tests/bug_multi_segfault.rb
|
112
114
|
- tests/bug_postfields_crash.rb
|
113
115
|
- tests/bug_postfields_crash2.rb
|