ethon 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +19 -1
- data/README.md +34 -31
- data/lib/ethon/curl.rb +16 -10
- data/lib/ethon/easies/callbacks.rb +4 -0
- data/lib/ethon/easies/form.rb +1 -1
- data/lib/ethon/easies/header.rb +1 -1
- data/lib/ethon/easies/http/actionable.rb +41 -29
- data/lib/ethon/easies/http/delete.rb +3 -2
- data/lib/ethon/easies/http/get.rb +3 -2
- data/lib/ethon/easies/http/head.rb +3 -2
- data/lib/ethon/easies/http/options.rb +5 -4
- data/lib/ethon/easies/http/patch.rb +4 -3
- data/lib/ethon/easies/http/post.rb +8 -1
- data/lib/ethon/easies/http/postable.rb +2 -0
- data/lib/ethon/easies/http/put.rb +8 -1
- data/lib/ethon/easies/http/putable.rb +2 -0
- data/lib/ethon/easies/options.rb +7 -4
- data/lib/ethon/easies/params.rb +1 -1
- data/lib/ethon/easies/util.rb +27 -2
- data/lib/ethon/easy.rb +77 -1
- data/lib/ethon/extensions/string.rb +8 -1
- data/lib/ethon/multies/operations.rb +5 -0
- data/lib/ethon/multies/stack.rb +4 -0
- data/lib/ethon/version.rb +1 -1
- metadata +3 -3
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,24 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 0.0.3
|
4
|
+
|
5
|
+
[Full Changelog](http://github.com/typhoeus/ethon/compare/v0.0.2...master)
|
6
|
+
|
7
|
+
Enhancements:
|
8
|
+
|
9
|
+
* Documentation
|
10
|
+
( [Alex P](https://github.com/ifesdjeen), [\#13](https://github.com/typhoeus/ethon/issues/13) )
|
11
|
+
* New libcurl option dns_cache_timeout
|
12
|
+
( [Chris Heald](https://github.com/cheald), [\#192](https://github.com/typhoeus/typhoeus/pull/192) )
|
13
|
+
|
14
|
+
Bugfixes:
|
15
|
+
|
16
|
+
* Libcurl option ssl_verifyhost takes an integer.
|
17
|
+
* Add space between header key and value.
|
18
|
+
|
1
19
|
## 0.0.2
|
2
20
|
|
3
|
-
|
21
|
+
Bugfixes:
|
4
22
|
|
5
23
|
* Add libcurl.so.4 to ffi_lib in order to load correct lib on Debian.
|
6
24
|
* Escape zero bytes.
|
data/README.md
CHANGED
@@ -5,10 +5,6 @@ In the modern world Ethon is a very basic libcurl wrapper using ffi.
|
|
5
5
|
|
6
6
|
* [Documentation](http://rubydoc.info/github/typhoeus/ethon)
|
7
7
|
|
8
|
-
## Caution
|
9
|
-
|
10
|
-
This is __alpha__!
|
11
|
-
|
12
8
|
## Installation
|
13
9
|
|
14
10
|
With bundler:
|
@@ -19,43 +15,50 @@ With bundler:
|
|
19
15
|
|
20
16
|
Making the first request is realy simple:
|
21
17
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
```ruby
|
19
|
+
easy = Ethon::Easy.new(:url => "www.google.de")
|
20
|
+
easy.prepare
|
21
|
+
easy.perform
|
22
|
+
#=> :ok
|
23
|
+
```
|
26
24
|
|
27
25
|
You have access to various options like following redirects:
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
```ruby
|
28
|
+
easy = Ethon::Easy.new(:url => "www.google.com", :follow_location => true)
|
29
|
+
easy.prepare
|
30
|
+
easy.perform
|
31
|
+
#=> :ok
|
32
|
+
```
|
34
33
|
Once you're done you can look at the response code and body:
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
```ruby
|
36
|
+
easy = Ethon::Easy.new(:url => "www.google.de")
|
37
|
+
easy.prepare
|
38
|
+
easy.perform
|
39
|
+
easy.response_code
|
40
|
+
#=> 200
|
41
|
+
easy.response_body
|
42
|
+
#=> "<!doctype html><html ..."
|
43
|
+
```
|
43
44
|
|
44
45
|
## Http
|
45
46
|
|
46
47
|
In order to make life easier there are some helpers for doing http requests:
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
49
|
+
```ruby
|
50
|
+
easy = Ethon::Easy.new
|
51
|
+
easy.http_request("www.google.de", :get, { :params => {:a => 1} })
|
52
|
+
easy.prepare
|
53
|
+
easy.perform
|
54
|
+
#=> :ok
|
55
|
+
|
56
|
+
easy = Ethon::Easy.new
|
57
|
+
easy.http_request("www.google.de", :post, { :params => { :a => 1 }, :body => { :b => 2 } })
|
58
|
+
easy.prepare
|
59
|
+
easy.perform
|
60
|
+
#=> :ok
|
61
|
+
```
|
59
62
|
|
60
63
|
This really handy when doing requests since you don't have to care about setting
|
61
64
|
everything up correct.
|
data/lib/ethon/curl.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Ethon
|
2
|
-
|
2
|
+
|
3
|
+
# FFI Wrapper module for Curl. Holds constants and required initializers.
|
3
4
|
module Curl
|
4
5
|
# :nodoc:
|
5
6
|
def Curl.windows?
|
@@ -11,16 +12,17 @@ module Ethon
|
|
11
12
|
# :nodoc:
|
12
13
|
VERSION_NOW = 3
|
13
14
|
|
14
|
-
#
|
15
|
+
# Flag. Initialize SSL.
|
15
16
|
GLOBAL_SSL = 0x01
|
16
|
-
#
|
17
|
+
# Flag. Initialize win32 socket libraries.
|
17
18
|
GLOBAL_WIN32 = 0x02
|
18
|
-
#
|
19
|
+
# Flag. Initialize everything possible.
|
19
20
|
GLOBAL_ALL = (GLOBAL_SSL | GLOBAL_WIN32)
|
20
|
-
#
|
21
|
+
# Flag. Initialize everything by default.
|
21
22
|
GLOBAL_DEFAULT = GLOBAL_ALL
|
22
23
|
|
23
|
-
#
|
24
|
+
# Libcurl error codes, refer
|
25
|
+
# https://github.com/bagder/curl/blob/master/include/curl/curl.h for details
|
24
26
|
EasyCode = enum :easy_code, [
|
25
27
|
:ok,
|
26
28
|
:unsupported_protocol,
|
@@ -113,7 +115,8 @@ module Ethon
|
|
113
115
|
:chunk_failed,
|
114
116
|
:last]
|
115
117
|
|
116
|
-
#
|
118
|
+
# Curl-Multi socket error codes, refer
|
119
|
+
# https://github.com/bagder/curl/blob/master/include/curl/multi.h for details
|
117
120
|
MultiCode = enum :multi_code, [
|
118
121
|
:call_multi_perform, -1,
|
119
122
|
:ok,
|
@@ -132,7 +135,8 @@ module Ethon
|
|
132
135
|
:function_point, 20000,
|
133
136
|
:off_t, 30000]
|
134
137
|
|
135
|
-
#
|
138
|
+
# Curl options, refer
|
139
|
+
# https://github.com/bagder/curl/blob/master/src/tool_cfgable.h for details
|
136
140
|
Option = enum :option, [
|
137
141
|
:file, OptionType[:object_point] + 1,
|
138
142
|
:writedata, OptionType[:object_point] + 1,
|
@@ -282,7 +286,8 @@ module Ethon
|
|
282
286
|
:double, 0x300000,
|
283
287
|
:slist, 0x400000]
|
284
288
|
|
285
|
-
#
|
289
|
+
# Info details, refer
|
290
|
+
# https://github.com/bagder/curl/blob/master/src/tool_writeout.c#L66 for details
|
286
291
|
Info = enum :info, [
|
287
292
|
:effective_url, InfoType[:string] + 1,
|
288
293
|
:response_code, InfoType[:long] + 2,
|
@@ -328,7 +333,8 @@ module Ethon
|
|
328
333
|
:local_port, InfoType[:long] + 42,
|
329
334
|
:last, 42]
|
330
335
|
|
331
|
-
#
|
336
|
+
# Form options, used by FormAdd for temporary storage, refer
|
337
|
+
# https://github.com/bagder/curl/blob/master/lib/formdata.h#L51 for details
|
332
338
|
FormOption = enum :form_option, [
|
333
339
|
:none,
|
334
340
|
:copyname,
|
@@ -5,6 +5,10 @@ module Ethon
|
|
5
5
|
# which are needed to interact with libcurl.
|
6
6
|
module Callbacks
|
7
7
|
|
8
|
+
def self.included(base)
|
9
|
+
base.send(:attr_accessor, *[:response_body, :response_header])
|
10
|
+
end
|
11
|
+
|
8
12
|
# Set writefunction and headerfunction callback.
|
9
13
|
# They are called by libcurl in order to provide the header and
|
10
14
|
# the body from the request.
|
data/lib/ethon/easies/form.rb
CHANGED
data/lib/ethon/easies/header.rb
CHANGED
@@ -8,38 +8,61 @@ module Ethon
|
|
8
8
|
# for more real actions like GET, HEAD, POST and PUT.
|
9
9
|
module Actionable
|
10
10
|
|
11
|
+
# Create a new action.
|
12
|
+
#
|
13
|
+
# @example Create a new action.
|
14
|
+
# Action.new("www.example.com", {})
|
15
|
+
#
|
16
|
+
# @param [ String ] url The url.
|
17
|
+
# @param [ Hash ] options The options.
|
18
|
+
#
|
19
|
+
# @return [ Action ] A new action.
|
20
|
+
def initialize(url, options)
|
21
|
+
@url = url
|
22
|
+
@options = options
|
23
|
+
end
|
24
|
+
|
25
|
+
# Return the url.
|
26
|
+
#
|
27
|
+
# @example Return url.
|
28
|
+
# action.url
|
29
|
+
#
|
30
|
+
# @return [ String ] The url.
|
11
31
|
def url
|
12
32
|
@url
|
13
33
|
end
|
14
34
|
|
35
|
+
# Return the options hash.
|
36
|
+
#
|
37
|
+
# @example Return options.
|
38
|
+
# action.options
|
39
|
+
#
|
40
|
+
# @return [ Hash ] The options.
|
15
41
|
def options
|
16
42
|
@options
|
17
43
|
end
|
18
44
|
|
45
|
+
# Return the params.
|
46
|
+
#
|
47
|
+
# @example Return params.
|
48
|
+
# action.params
|
49
|
+
#
|
50
|
+
# @return [ Params ] The params.
|
19
51
|
def params
|
20
52
|
@params ||= Params.new(options[:params])
|
21
53
|
end
|
22
54
|
|
23
|
-
|
24
|
-
@form ||= Form.new(options[:body])
|
25
|
-
end
|
26
|
-
|
27
|
-
# Create a new action.
|
28
|
-
#
|
29
|
-
# @example Create a new action.
|
30
|
-
# Action.new("www.example.com", {})
|
55
|
+
# Return the form.
|
31
56
|
#
|
32
|
-
# @
|
33
|
-
#
|
57
|
+
# @example Return form.
|
58
|
+
# action.form
|
34
59
|
#
|
35
|
-
# @return [
|
36
|
-
def
|
37
|
-
@
|
38
|
-
@options = options
|
60
|
+
# @return [ Form ] The form.
|
61
|
+
def form
|
62
|
+
@form ||= Form.new(options[:body])
|
39
63
|
end
|
40
64
|
|
41
|
-
# Setup everything
|
42
|
-
# request.
|
65
|
+
# Setup everything necessary for a proper request.
|
43
66
|
#
|
44
67
|
# @example setup.
|
45
68
|
# action.setup(easy)
|
@@ -49,7 +72,6 @@ module Ethon
|
|
49
72
|
set_nothing(easy) if params.empty? && form.empty?
|
50
73
|
set_params(easy) unless params.empty?
|
51
74
|
set_form(easy) unless form.empty?
|
52
|
-
set_customs(easy)
|
53
75
|
easy.set_attributes(options)
|
54
76
|
end
|
55
77
|
|
@@ -63,7 +85,7 @@ module Ethon
|
|
63
85
|
easy.url = url
|
64
86
|
end
|
65
87
|
|
66
|
-
# Setup request
|
88
|
+
# Setup request with params.
|
67
89
|
#
|
68
90
|
# @example Setup nothing.
|
69
91
|
# action.set_params(easy)
|
@@ -74,7 +96,7 @@ module Ethon
|
|
74
96
|
easy.url = "#{url}?#{params.to_s}"
|
75
97
|
end
|
76
98
|
|
77
|
-
# Setup request
|
99
|
+
# Setup request with form.
|
78
100
|
#
|
79
101
|
# @example Setup nothing.
|
80
102
|
# action.set_form(easy)
|
@@ -82,16 +104,6 @@ module Ethon
|
|
82
104
|
# @param [ Easy ] easy The easy to setup.
|
83
105
|
def set_form(easy)
|
84
106
|
end
|
85
|
-
|
86
|
-
# Setup custom things eg. override the i
|
87
|
-
# action for delete.
|
88
|
-
#
|
89
|
-
# @example Setup custom things.
|
90
|
-
# action.set_customs(easy)
|
91
|
-
#
|
92
|
-
# @param [ Easy ] easy The easy to setup.
|
93
|
-
def set_customs(easy)
|
94
|
-
end
|
95
107
|
end
|
96
108
|
end
|
97
109
|
end
|
@@ -7,13 +7,14 @@ module Ethon
|
|
7
7
|
include Ethon::Easies::Http::Actionable
|
8
8
|
include Ethon::Easies::Http::Postable
|
9
9
|
|
10
|
-
# Setup
|
10
|
+
# Setup easy to make a DELETE request.
|
11
11
|
#
|
12
12
|
# @example Setup customrequest.
|
13
13
|
# delete.setup(easy)
|
14
14
|
#
|
15
15
|
# @param [ Easy ] easy The easy to setup.
|
16
|
-
def
|
16
|
+
def setup(easy)
|
17
|
+
super
|
17
18
|
easy.customrequest = "DELETE"
|
18
19
|
end
|
19
20
|
end
|
@@ -7,13 +7,14 @@ module Ethon
|
|
7
7
|
include Ethon::Easies::Http::Actionable
|
8
8
|
include Ethon::Easies::Http::Postable
|
9
9
|
|
10
|
-
# Setup
|
10
|
+
# Setup easy to make a GET request.
|
11
11
|
#
|
12
12
|
# @example Setup.
|
13
13
|
# get.set_params(easy)
|
14
14
|
#
|
15
15
|
# @param [ Easy ] easy The easy to setup.
|
16
|
-
def
|
16
|
+
def setup(easy)
|
17
|
+
super
|
17
18
|
easy.customrequest = "GET"
|
18
19
|
end
|
19
20
|
end
|
@@ -7,13 +7,14 @@ module Ethon
|
|
7
7
|
include Ethon::Easies::Http::Actionable
|
8
8
|
include Ethon::Easies::Http::Postable
|
9
9
|
|
10
|
-
# Setup
|
10
|
+
# Setup easy to make a HEAD request.
|
11
11
|
#
|
12
12
|
# @example Setup.
|
13
13
|
# get.set_params(easy)
|
14
14
|
#
|
15
15
|
# @param [ Easy ] easy The easy to setup.
|
16
|
-
def
|
16
|
+
def setup(easy)
|
17
|
+
super
|
17
18
|
easy.nobody = true
|
18
19
|
end
|
19
20
|
end
|
@@ -2,18 +2,19 @@ module Ethon
|
|
2
2
|
module Easies
|
3
3
|
module Http
|
4
4
|
|
5
|
-
# This class knows everything about making
|
5
|
+
# This class knows everything about making OPTIONS requests.
|
6
6
|
class Options
|
7
7
|
include Ethon::Easies::Http::Actionable
|
8
8
|
include Ethon::Easies::Http::Postable
|
9
9
|
|
10
|
-
# Setup
|
10
|
+
# Setup easy to make a OPTIONS request.
|
11
11
|
#
|
12
12
|
# @example Setup.
|
13
|
-
#
|
13
|
+
# options.setup(easy)
|
14
14
|
#
|
15
15
|
# @param [ Easy ] easy The easy to setup.
|
16
|
-
def
|
16
|
+
def setup(easy)
|
17
|
+
super
|
17
18
|
easy.customrequest = "OPTIONS"
|
18
19
|
end
|
19
20
|
end
|
@@ -7,13 +7,14 @@ module Ethon
|
|
7
7
|
include Ethon::Easies::Http::Actionable
|
8
8
|
include Ethon::Easies::Http::Postable
|
9
9
|
|
10
|
-
# Setup
|
10
|
+
# Setup easy to make a PATCH request.
|
11
11
|
#
|
12
12
|
# @example Setup.
|
13
|
-
#
|
13
|
+
# patch.setup(easy)
|
14
14
|
#
|
15
15
|
# @param [ Easy ] easy The easy to setup.
|
16
|
-
def
|
16
|
+
def setup(easy)
|
17
|
+
super
|
17
18
|
easy.customrequest = "PATCH"
|
18
19
|
end
|
19
20
|
end
|
@@ -6,7 +6,14 @@ module Ethon
|
|
6
6
|
include Ethon::Easies::Http::Actionable
|
7
7
|
include Ethon::Easies::Http::Postable
|
8
8
|
|
9
|
-
|
9
|
+
# Setup easy to make a POST request.
|
10
|
+
#
|
11
|
+
# @example Setup.
|
12
|
+
# post.setup(easy)
|
13
|
+
#
|
14
|
+
# @param [ Easy ] easy The easy to setup.
|
15
|
+
def setup(easy)
|
16
|
+
super
|
10
17
|
if form.empty?
|
11
18
|
easy.postfieldsize = 0
|
12
19
|
easy.copypostfields = ""
|
@@ -7,7 +7,14 @@ module Ethon
|
|
7
7
|
include Ethon::Easies::Http::Actionable
|
8
8
|
include Ethon::Easies::Http::Putable
|
9
9
|
|
10
|
-
|
10
|
+
# Setup easy to make a PUT request.
|
11
|
+
#
|
12
|
+
# @example Setup.
|
13
|
+
# put.setup(easy)
|
14
|
+
#
|
15
|
+
# @param [ Easy ] easy The easy to setup.
|
16
|
+
def setup(easy)
|
17
|
+
super
|
11
18
|
if form.empty?
|
12
19
|
easy.upload = true
|
13
20
|
easy.infilesize = 0
|
data/lib/ethon/easies/options.rb
CHANGED
@@ -9,8 +9,8 @@ module Ethon
|
|
9
9
|
def self.included(base)
|
10
10
|
base.extend ClassMethods
|
11
11
|
base.const_set(:AVAILABLE_OPTIONS, [
|
12
|
-
:httppost, :put, :httpget, :nobody, :upload,
|
13
|
-
:cainfo, :capath, :connecttimeout,
|
12
|
+
:dns_cache_timeout, :httppost, :put, :httpget, :nobody, :upload,
|
13
|
+
:customrequest, :cainfo, :capath, :connecttimeout,
|
14
14
|
:followlocation, :httpauth, :infilesize, :interface,
|
15
15
|
:maxredirs, :nosignal, :postfieldsize, :copypostfields, :proxy,
|
16
16
|
:proxyauth, :proxytype, :timeout, :readdata, :sslcert, :ssl_verifypeer, :ssl_verifyhost,
|
@@ -40,7 +40,7 @@ module Ethon
|
|
40
40
|
# @return [ Array ] The bool options.
|
41
41
|
def bool_options
|
42
42
|
[
|
43
|
-
:followlocation, :nosignal, :ssl_verifypeer,
|
43
|
+
:followlocation, :nosignal, :ssl_verifypeer,
|
44
44
|
:verbose, :httpget, :nobody, :upload
|
45
45
|
]
|
46
46
|
end
|
@@ -62,7 +62,10 @@ module Ethon
|
|
62
62
|
#
|
63
63
|
# @return [ Array ] The int options.
|
64
64
|
def int_options
|
65
|
-
[
|
65
|
+
[
|
66
|
+
:connecttimeout, :dns_cache_timeout, :infilesize, :maxredirs,
|
67
|
+
:postfieldsize, :ssl_verifyhost, :timeout
|
68
|
+
]
|
66
69
|
end
|
67
70
|
end
|
68
71
|
|
data/lib/ethon/easies/params.rb
CHANGED
data/lib/ethon/easies/util.rb
CHANGED
@@ -4,8 +4,16 @@ module Ethon
|
|
4
4
|
# This module contains small helpers.
|
5
5
|
module Util
|
6
6
|
|
7
|
-
# Return query pairs from hash.
|
8
|
-
|
7
|
+
# Return query pairs build from a hash.
|
8
|
+
#
|
9
|
+
# @example Build query pairs.
|
10
|
+
# action.build_query_pairs({:a => 1, :b => 2})
|
11
|
+
# #=> [[:a, 1], [:b, 2]]
|
12
|
+
#
|
13
|
+
# @param [ Hash ] hash The hash to go through.
|
14
|
+
#
|
15
|
+
# @return [ Array ] The array of query pairs.
|
16
|
+
def build_query_pairs(hash)
|
9
17
|
pairs = []
|
10
18
|
recursive = Proc.new do |h, prefix|
|
11
19
|
h.each_pair do |k,v|
|
@@ -27,6 +35,13 @@ module Ethon
|
|
27
35
|
end
|
28
36
|
|
29
37
|
# Return file info for a file.
|
38
|
+
#
|
39
|
+
# @example Return file info.
|
40
|
+
# action.file_info(File.open('fubar', 'r'))
|
41
|
+
#
|
42
|
+
# @param [ File ] file The file to handle.
|
43
|
+
#
|
44
|
+
# @return [ Array ] Array of informations.
|
30
45
|
def file_info(file)
|
31
46
|
filename = File.basename(file.path)
|
32
47
|
types = MIME::Types.type_for(filename)
|
@@ -37,6 +52,16 @@ module Ethon
|
|
37
52
|
]
|
38
53
|
end
|
39
54
|
|
55
|
+
# Escapes zero bytes in strings.
|
56
|
+
#
|
57
|
+
# @example Escape zero bytes.
|
58
|
+
# Util.escape_zero_byte("1\0")
|
59
|
+
# #=> "1\\0"
|
60
|
+
#
|
61
|
+
# @param [ Object ] value The value to escape.
|
62
|
+
#
|
63
|
+
# @return [ String, Object ] Escaped String if
|
64
|
+
# zero byte found, original object if not.
|
40
65
|
def self.escape_zero_byte(value)
|
41
66
|
return value unless value.to_s.include?(0.chr)
|
42
67
|
value.to_s.gsub(0.chr, '\\\0')
|
data/lib/ethon/easy.rb
CHANGED
@@ -22,7 +22,6 @@ module Ethon
|
|
22
22
|
include Ethon::Easies::Operations
|
23
23
|
include Ethon::Easies::ResponseCallbacks
|
24
24
|
|
25
|
-
attr_reader :response_body, :response_header
|
26
25
|
attr_accessor :return_code
|
27
26
|
|
28
27
|
class << self
|
@@ -49,6 +48,77 @@ module Ethon
|
|
49
48
|
#
|
50
49
|
# @param [ Hash ] options The options to set.
|
51
50
|
#
|
51
|
+
# @option options :cainfo [String] See
|
52
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCAINFO.
|
53
|
+
# @option options :capath [String] See
|
54
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCAPATH.
|
55
|
+
# @option options :connecttimeout [Integer] See
|
56
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCONNECTTIMEOUT.
|
57
|
+
# @option options :copypostfields [String] See
|
58
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCOPYPOSTFIELDS.
|
59
|
+
# @option options :customrequest [String] See
|
60
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCUSTOMREQUEST.
|
61
|
+
# @option options :dns_cache_timeout [Integer] See
|
62
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTDNSCACHETIMEOUT.
|
63
|
+
# @option options :followlocation [Boolean] See
|
64
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTFOLLOWLOCATION.
|
65
|
+
# @option options :httpauth [String] See
|
66
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTHTTPAUTH.
|
67
|
+
# @option options :httpget [Boolean] See
|
68
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTHTTPGET.
|
69
|
+
# @option options :httppost [String] See
|
70
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTHTTPPOST.
|
71
|
+
# @option options :infilesize [Integer] See
|
72
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTINFILESIZE.
|
73
|
+
# @option options :interface [String] See
|
74
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTINTERFACE.
|
75
|
+
# @option options :maxredirs [Integer] See
|
76
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTMAXREDIRS.
|
77
|
+
# @option options :nobody [Boolean] See
|
78
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTNOBODY.
|
79
|
+
# @option options :nosignal [Boolean] See
|
80
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTNOSIGNAL.
|
81
|
+
# @option options :postfieldsize [Integer] See
|
82
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPOSTFIELDSIZE.
|
83
|
+
# @option options :proxy [String] See
|
84
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPROXY.
|
85
|
+
# @option options :proxyauth [String] See
|
86
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPROXYAUTH.
|
87
|
+
# @option options :proxytype [String] See
|
88
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPROXYTYPE.
|
89
|
+
# @option options :put [String] See
|
90
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPUT.
|
91
|
+
# @option options :readdata [String] See
|
92
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTREADDATA.
|
93
|
+
# @option options :readfunction [String] See
|
94
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTREADFUNCTION.
|
95
|
+
# @option options :ssl_verifyhost [Integer] See
|
96
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTSSLVERIFYHOST.
|
97
|
+
# @option options :ssl_verifypeer [Boolean] See
|
98
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTSSLVERIFYPEER.
|
99
|
+
# @option options :sslcert [String] See
|
100
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTSSLCERT.
|
101
|
+
# @option options :sslcerttype [String] See
|
102
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTSSLCERTTYPE.
|
103
|
+
# @option options :sslkey [String] See
|
104
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTSSLKEY.
|
105
|
+
# @option options :sslkeytype [String] See
|
106
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTSSLKEYTYPE.
|
107
|
+
# @option options :sslversion [String] See
|
108
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTSSLVERSION.
|
109
|
+
# @option options :timeout [Integer] See
|
110
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTTIMEOUT.
|
111
|
+
# @option options :upload [Boolean] See
|
112
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTUPLOAD.
|
113
|
+
# @option options :url [String] See
|
114
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTURL.
|
115
|
+
# @option options :useragent [String] See
|
116
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTUSERAGENT.
|
117
|
+
# @option options :userpwd [String] See
|
118
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTUSERPWD.
|
119
|
+
# @option options :verbose [Boolean] See
|
120
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTVERBOSE.
|
121
|
+
#
|
52
122
|
# @return [ Easy ] A new Easy.
|
53
123
|
def initialize(options = {})
|
54
124
|
Curl.init
|
@@ -62,6 +132,8 @@ module Ethon
|
|
62
132
|
# easy.set_attributes(options)
|
63
133
|
#
|
64
134
|
# @param [ Hash ] options The options.
|
135
|
+
#
|
136
|
+
# @see initialize
|
65
137
|
def set_attributes(options)
|
66
138
|
options.each_pair do |key, value|
|
67
139
|
method("#{key}=").call(value) if respond_to?("#{key}=")
|
@@ -90,6 +162,10 @@ module Ethon
|
|
90
162
|
@handle ||= Curl.easy_init
|
91
163
|
end
|
92
164
|
|
165
|
+
# Returns the informations available through libcurl as
|
166
|
+
# a hash.
|
167
|
+
#
|
168
|
+
# @return [ Hash ] The informations hash.
|
93
169
|
def to_hash
|
94
170
|
hash = {}
|
95
171
|
hash[:return_code] = return_code
|
@@ -1,6 +1,13 @@
|
|
1
1
|
module Ethon
|
2
|
+
|
3
|
+
# This module contains all core extensions ethon
|
4
|
+
# needs.
|
2
5
|
module Extensions
|
3
|
-
module String
|
6
|
+
module String # :nodoc:
|
7
|
+
|
8
|
+
# Return part of the string.
|
9
|
+
#
|
10
|
+
# @return [ String ] Part of the string.
|
4
11
|
def byteslice(*args)
|
5
12
|
self[*args]
|
6
13
|
end
|
@@ -45,6 +45,8 @@ module Ethon
|
|
45
45
|
#
|
46
46
|
# @example Get timeout.
|
47
47
|
# multi.get_timeout
|
48
|
+
#
|
49
|
+
# @raise [Ethon::Errors::MultiTimeout] when getting the timeout failed.
|
48
50
|
def get_timeout
|
49
51
|
code = Curl.multi_timeout(handle, @timeout)
|
50
52
|
raise Errors::MultiTimeout.new(code) unless code == :ok
|
@@ -67,6 +69,9 @@ module Ethon
|
|
67
69
|
#
|
68
70
|
# @example Set fds.
|
69
71
|
# multi.set_fds
|
72
|
+
#
|
73
|
+
# @raise [Ethon::Errors::MultiFdset] when setting the file descriptors failed.
|
74
|
+
# @raise [Ethon::Errors::Select] when select failed.
|
70
75
|
def set_fds(timeout)
|
71
76
|
code = Curl.multi_fdset(handle, @fd_read, @fd_write, @fd_excep, @max_fd)
|
72
77
|
raise Errors::MultiFdset.new(code) unless code == :ok
|
data/lib/ethon/multies/stack.rb
CHANGED
@@ -20,6 +20,8 @@ module Ethon
|
|
20
20
|
# multi.add(easy)
|
21
21
|
#
|
22
22
|
# @param [ Easy ] easy The easy to add.
|
23
|
+
#
|
24
|
+
# @raise [Ethon::Errors::MultiAdd] when adding an easy failed.
|
23
25
|
def add(easy)
|
24
26
|
return nil if easy_handles.include?(easy)
|
25
27
|
code = Curl.multi_add_handle(handle, easy.handle)
|
@@ -32,6 +34,8 @@ module Ethon
|
|
32
34
|
# @example Delete easy from stack.
|
33
35
|
#
|
34
36
|
# @param [ Easy ] easy The easy to delete.
|
37
|
+
#
|
38
|
+
# @raise [Ethon::Errors::MultiRemove] when removing an easy failed.
|
35
39
|
def delete(easy)
|
36
40
|
if easy_handles.delete(easy)
|
37
41
|
code = Curl.multi_remove_handle(handle, easy.handle)
|
data/lib/ethon/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ethon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -233,7 +233,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
233
233
|
version: '0'
|
234
234
|
segments:
|
235
235
|
- 0
|
236
|
-
hash:
|
236
|
+
hash: -1256508423117646856
|
237
237
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
238
238
|
none: false
|
239
239
|
requirements:
|