taf2-curb 0.4.5.0 → 0.4.6.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/doc.rb +1 -1
- data/ext/curb.h +3 -3
- data/ext/curb_multi.c +76 -2
- data/ext/curb_upload.c +24 -0
- data/tests/tc_curl_multi.rb +44 -0
- metadata +2 -2
data/doc.rb
CHANGED
@@ -34,7 +34,7 @@ begin
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
system("rdoc --title='Curb - libcurl bindings for ruby' --main=README #{pp_srcdir}/*.c README LICENSE
|
37
|
+
system("rdoc --title='Curb - libcurl bindings for ruby' --main=README #{pp_srcdir}/*.c README LICENSE lib/curb.rb")
|
38
38
|
ensure
|
39
39
|
rm_rf(tmpdir)
|
40
40
|
end
|
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.
|
24
|
-
#define CURB_VER_NUM
|
23
|
+
#define CURB_VERSION "0.4.6.0"
|
24
|
+
#define CURB_VER_NUM 460
|
25
25
|
#define CURB_VER_MAJ 0
|
26
26
|
#define CURB_VER_MIN 4
|
27
|
-
#define CURB_VER_MIC
|
27
|
+
#define CURB_VER_MIC 6
|
28
28
|
#define CURB_VER_PATCH 0
|
29
29
|
|
30
30
|
|
data/ext/curb_multi.c
CHANGED
@@ -93,6 +93,51 @@ static VALUE ruby_curl_multi_new(VALUE klass) {
|
|
93
93
|
return new_curlm;
|
94
94
|
}
|
95
95
|
|
96
|
+
// Hash#foreach callback for ruby_curl_multi_requests
|
97
|
+
static int ruby_curl_multi_requests_callback(VALUE key, VALUE value, VALUE result_array) {
|
98
|
+
rb_ary_push(result_array, value);
|
99
|
+
|
100
|
+
return ST_CONTINUE;
|
101
|
+
}
|
102
|
+
|
103
|
+
/*
|
104
|
+
* call-seq:
|
105
|
+
* multi.requests => [#<Curl::Easy...>, ...]
|
106
|
+
*
|
107
|
+
* Returns an array containing all the active requests on this Curl::Multi object.
|
108
|
+
*/
|
109
|
+
static VALUE ruby_curl_multi_requests(VALUE self) {
|
110
|
+
ruby_curl_multi *rbcm;
|
111
|
+
|
112
|
+
Data_Get_Struct(self, ruby_curl_multi, rbcm);
|
113
|
+
|
114
|
+
VALUE result_array = rb_ary_new();
|
115
|
+
|
116
|
+
// iterate over the requests hash, and stuff references into the array.
|
117
|
+
rb_hash_foreach( rbcm->requests, ruby_curl_multi_requests_callback, result_array );
|
118
|
+
|
119
|
+
return result_array;
|
120
|
+
}
|
121
|
+
|
122
|
+
/*
|
123
|
+
* call-seq:
|
124
|
+
* multi.idle? => true or false
|
125
|
+
*
|
126
|
+
* Returns whether or not this Curl::Multi handle is processing any requests. E.g. this returns
|
127
|
+
* true when multi.requests.length == 0.
|
128
|
+
*/
|
129
|
+
static VALUE ruby_curl_multi_idle(VALUE self) {
|
130
|
+
ruby_curl_multi *rbcm;
|
131
|
+
|
132
|
+
Data_Get_Struct(self, ruby_curl_multi, rbcm);
|
133
|
+
|
134
|
+
if ( FIX2INT( rb_funcall(rbcm->requests, rb_intern("length"), 0) ) == 0 ) {
|
135
|
+
return Qtrue;
|
136
|
+
} else {
|
137
|
+
return Qfalse;
|
138
|
+
}
|
139
|
+
}
|
140
|
+
|
96
141
|
/*
|
97
142
|
* call-seq:
|
98
143
|
* multi = Curl::Multi.new
|
@@ -185,7 +230,7 @@ static VALUE ruby_curl_multi_add(VALUE self, VALUE easy) {
|
|
185
230
|
* # sometime later
|
186
231
|
* multi.remove(easy)
|
187
232
|
*
|
188
|
-
* Remove an easy handle from a multi stack
|
233
|
+
* Remove an easy handle from a multi stack.
|
189
234
|
*
|
190
235
|
* Will raise an exception if the easy handle is not found
|
191
236
|
*/
|
@@ -226,6 +271,30 @@ static void rb_curl_multi_remove(ruby_curl_multi *rbcm, VALUE easy) {
|
|
226
271
|
}
|
227
272
|
}
|
228
273
|
|
274
|
+
// Hash#foreach callback for ruby_curl_multi_cancel
|
275
|
+
static int ruby_curl_multi_cancel_callback(VALUE key, VALUE value, ruby_curl_multi *rbcm) {
|
276
|
+
rb_curl_multi_remove(rbcm, value);
|
277
|
+
|
278
|
+
return ST_CONTINUE;
|
279
|
+
}
|
280
|
+
|
281
|
+
/*
|
282
|
+
* call-seq:
|
283
|
+
* multi.cancel!
|
284
|
+
*
|
285
|
+
* Cancels all requests currently being made on this Curl::Multi handle.
|
286
|
+
*/
|
287
|
+
static VALUE ruby_curl_multi_cancel(VALUE self) {
|
288
|
+
ruby_curl_multi *rbcm;
|
289
|
+
|
290
|
+
Data_Get_Struct(self, ruby_curl_multi, rbcm);
|
291
|
+
|
292
|
+
rb_hash_foreach( rbcm->requests, ruby_curl_multi_cancel_callback, (VALUE)rbcm );
|
293
|
+
|
294
|
+
// for chaining
|
295
|
+
return self;
|
296
|
+
}
|
297
|
+
|
229
298
|
static void rb_curl_multi_read_info(VALUE self, CURLM *multi_handle) {
|
230
299
|
int msgs_left, result;
|
231
300
|
CURLMsg *msg;
|
@@ -379,11 +448,16 @@ void init_curb_multi() {
|
|
379
448
|
|
380
449
|
/* Class methods */
|
381
450
|
rb_define_singleton_method(cCurlMulti, "new", ruby_curl_multi_new, 0);
|
382
|
-
|
451
|
+
|
452
|
+
/* "Attributes" */
|
453
|
+
rb_define_method(cCurlMulti, "requests", ruby_curl_multi_requests, 0);
|
454
|
+
rb_define_method(cCurlMulti, "idle?", ruby_curl_multi_idle, 0);
|
455
|
+
|
383
456
|
/* Instnace methods */
|
384
457
|
rb_define_method(cCurlMulti, "max_connects=", ruby_curl_multi_max_connects, 1);
|
385
458
|
rb_define_method(cCurlMulti, "pipeline=", ruby_curl_multi_pipeline, 1);
|
386
459
|
rb_define_method(cCurlMulti, "add", ruby_curl_multi_add, 1);
|
387
460
|
rb_define_method(cCurlMulti, "remove", ruby_curl_multi_remove, 1);
|
461
|
+
rb_define_method(cCurlMulti, "cancel!", ruby_curl_multi_cancel, 0);
|
388
462
|
rb_define_method(cCurlMulti, "perform", ruby_curl_multi_perform, 0);
|
389
463
|
}
|
data/ext/curb_upload.c
CHANGED
@@ -6,6 +6,10 @@
|
|
6
6
|
extern VALUE mCurl;
|
7
7
|
VALUE cCurlUpload;
|
8
8
|
|
9
|
+
#ifdef RDOC_NEVER_DEFINED
|
10
|
+
mCurl = rb_define_module("Curl");
|
11
|
+
#endif
|
12
|
+
|
9
13
|
static void curl_upload_mark(ruby_curl_upload *rbcu) {
|
10
14
|
if (rbcu->stream) rb_gc_mark(rbcu->stream);
|
11
15
|
}
|
@@ -13,6 +17,10 @@ static void curl_upload_free(ruby_curl_upload *rbcu) {
|
|
13
17
|
free(rbcu);
|
14
18
|
}
|
15
19
|
|
20
|
+
/*
|
21
|
+
* call-seq:
|
22
|
+
* internal class for sending large file uploads
|
23
|
+
*/
|
16
24
|
VALUE ruby_curl_upload_new(VALUE klass) {
|
17
25
|
VALUE upload;
|
18
26
|
ruby_curl_upload *rbcu = ALLOC(ruby_curl_upload);
|
@@ -22,23 +30,39 @@ VALUE ruby_curl_upload_new(VALUE klass) {
|
|
22
30
|
return upload;
|
23
31
|
}
|
24
32
|
|
33
|
+
/*
|
34
|
+
* call-seq:
|
35
|
+
* internal class for sending large file uploads
|
36
|
+
*/
|
25
37
|
VALUE ruby_curl_upload_stream_set(VALUE self, VALUE stream) {
|
26
38
|
ruby_curl_upload *rbcu;
|
27
39
|
Data_Get_Struct(self, ruby_curl_upload, rbcu);
|
28
40
|
rbcu->stream = stream;
|
29
41
|
return stream;
|
30
42
|
}
|
43
|
+
/*
|
44
|
+
* call-seq:
|
45
|
+
* internal class for sending large file uploads
|
46
|
+
*/
|
31
47
|
VALUE ruby_curl_upload_stream_get(VALUE self) {
|
32
48
|
ruby_curl_upload *rbcu;
|
33
49
|
Data_Get_Struct(self, ruby_curl_upload, rbcu);
|
34
50
|
return rbcu->stream;
|
35
51
|
}
|
52
|
+
/*
|
53
|
+
* call-seq:
|
54
|
+
* internal class for sending large file uploads
|
55
|
+
*/
|
36
56
|
VALUE ruby_curl_upload_offset_set(VALUE self, VALUE offset) {
|
37
57
|
ruby_curl_upload *rbcu;
|
38
58
|
Data_Get_Struct(self, ruby_curl_upload, rbcu);
|
39
59
|
rbcu->offset = FIX2INT(offset);
|
40
60
|
return offset;
|
41
61
|
}
|
62
|
+
/*
|
63
|
+
* call-seq:
|
64
|
+
* internal class for sending large file uploads
|
65
|
+
*/
|
42
66
|
VALUE ruby_curl_upload_offset_get(VALUE self) {
|
43
67
|
ruby_curl_upload *rbcu;
|
44
68
|
Data_Get_Struct(self, ruby_curl_upload, rbcu);
|
data/tests/tc_curl_multi.rb
CHANGED
@@ -100,6 +100,50 @@ class TestCurbCurlMulti < Test::Unit::TestCase
|
|
100
100
|
m = nil
|
101
101
|
|
102
102
|
end
|
103
|
+
|
104
|
+
def test_idle_check
|
105
|
+
m = Curl::Multi.new
|
106
|
+
e = Curl::Easy.new($TEST_URL)
|
107
|
+
|
108
|
+
assert(m.idle?, 'A new Curl::Multi handle should be idle')
|
109
|
+
|
110
|
+
m.add(e)
|
111
|
+
|
112
|
+
assert((not m.idle?), 'A Curl::Multi handle with a request should not be idle')
|
113
|
+
|
114
|
+
m.perform
|
115
|
+
|
116
|
+
assert(m.idle?, 'A Curl::Multi handle should be idle after performing its requests')
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_requests
|
120
|
+
m = Curl::Multi.new
|
121
|
+
|
122
|
+
assert_equal([], m.requests, 'A new Curl::Multi handle should have no requests')
|
123
|
+
|
124
|
+
10.times do
|
125
|
+
m.add(Curl::Easy.new($TEST_URL))
|
126
|
+
end
|
127
|
+
|
128
|
+
assert_equal(10, m.requests.length, 'multi.requests should contain all the active requests')
|
129
|
+
|
130
|
+
m.perform
|
131
|
+
|
132
|
+
assert_equal([], m.requests, 'A new Curl::Multi handle should have no requests after a perform')
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_cancel
|
136
|
+
m = Curl::Multi.new
|
137
|
+
m.cancel! # shouldn't raise anything
|
138
|
+
|
139
|
+
10.times do
|
140
|
+
m.add(Curl::Easy.new($TEST_URL))
|
141
|
+
end
|
142
|
+
|
143
|
+
m.cancel!
|
144
|
+
|
145
|
+
assert_equal([], m.requests, 'A new Curl::Multi handle should have no requests after being canceled')
|
146
|
+
end
|
103
147
|
|
104
148
|
def test_with_success
|
105
149
|
c1 = Curl::Easy.new($TEST_URL)
|
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.
|
4
|
+
version: 0.4.6.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-
|
13
|
+
date: 2009-07-19 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|