ethon 0.2.0 → 0.3.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/CHANGELOG.md +14 -1
- data/lib/ethon/curl.rb +6 -13
- data/lib/ethon/easies/options.rb +9 -10
- data/lib/ethon/easy.rb +2 -0
- data/lib/ethon/errors.rb +1 -0
- data/lib/ethon/errors/invalid_value.rb +12 -0
- data/lib/ethon/extensions.rb +1 -1
- data/lib/ethon/extensions/string.rb +26 -4
- data/lib/ethon/multies/stack.rb +1 -0
- data/lib/ethon/version.rb +1 -1
- metadata +4 -3
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,20 @@
|
|
2
2
|
|
3
3
|
## Master
|
4
4
|
|
5
|
-
[Full Changelog](http://github.com/typhoeus/ethon/compare/v0.
|
5
|
+
[Full Changelog](http://github.com/typhoeus/ethon/compare/v0.3.0...master)
|
6
|
+
|
7
|
+
## 0.3.0
|
8
|
+
|
9
|
+
[Full Changelog](http://github.com/typhoeus/ethon/compare/v0.2.0...v0.3.0)
|
10
|
+
|
11
|
+
Enhancements:
|
12
|
+
|
13
|
+
* New libcurl option proxyport
|
14
|
+
* Raise invalid value error when providing a wrong key for sslversion or httpauth
|
15
|
+
|
16
|
+
Bugfixes:
|
17
|
+
|
18
|
+
* Libcurl option sslversion is handled correct
|
6
19
|
|
7
20
|
## 0.2.0
|
8
21
|
|
data/lib/ethon/curl.rb
CHANGED
@@ -434,9 +434,12 @@ module Ethon
|
|
434
434
|
attach_function :easy_cleanup, :curl_easy_cleanup, [:pointer], :void
|
435
435
|
attach_function :easy_getinfo, :curl_easy_getinfo, [:pointer, :info, :pointer], :easy_code
|
436
436
|
attach_function :easy_setopt, :curl_easy_setopt, [:pointer, :option, :pointer], :easy_code
|
437
|
+
attach_function :easy_setopt_ffi_pointer, :curl_easy_setopt, [:pointer, :option, :pointer], :easy_code
|
437
438
|
attach_function :easy_setopt_string, :curl_easy_setopt, [:pointer, :option, :string], :easy_code
|
438
439
|
attach_function :easy_setopt_long, :curl_easy_setopt, [:pointer, :option, :long], :easy_code
|
440
|
+
attach_function :easy_setopt_fixnum, :curl_easy_setopt, [:pointer, :option, :long], :easy_code
|
439
441
|
attach_function :easy_setopt_callback, :curl_easy_setopt, [:pointer, :option, :callback], :easy_code
|
442
|
+
attach_function :easy_setopt_proc, :curl_easy_setopt, [:pointer, :option, :callback], :easy_code
|
440
443
|
attach_function :easy_perform, :curl_easy_perform, [:pointer], :easy_code
|
441
444
|
attach_function :easy_strerror, :curl_easy_strerror, [:int], :string
|
442
445
|
attach_function :easy_escape, :curl_easy_escape, [:pointer, :pointer, :int], :string
|
@@ -498,16 +501,9 @@ module Ethon
|
|
498
501
|
|
499
502
|
# Sets appropriate option for easy, depending on value type.
|
500
503
|
def set_option(option, value, handle)
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
when Integer
|
505
|
-
easy_setopt_long(handle, option, value)
|
506
|
-
when Proc, FFI::Function
|
507
|
-
easy_setopt_callback(handle, option, value)
|
508
|
-
else
|
509
|
-
easy_setopt(handle, option, value) if value
|
510
|
-
end
|
504
|
+
return unless value
|
505
|
+
|
506
|
+
method("easy_setopt_#{value.class.to_s.underscr}").call(handle, option, value)
|
511
507
|
end
|
512
508
|
|
513
509
|
# Return info as string.
|
@@ -522,7 +518,6 @@ module Ethon
|
|
522
518
|
def get_info_string(option, handle)
|
523
519
|
if easy_getinfo(handle, option, string_ptr) == :ok
|
524
520
|
string_ptr.read_pointer.read_string
|
525
|
-
else nil
|
526
521
|
end
|
527
522
|
end
|
528
523
|
|
@@ -538,7 +533,6 @@ module Ethon
|
|
538
533
|
def get_info_long(option, handle)
|
539
534
|
if easy_getinfo(handle, option, long_ptr) == :ok
|
540
535
|
long_ptr.read_long
|
541
|
-
else nil
|
542
536
|
end
|
543
537
|
end
|
544
538
|
|
@@ -554,7 +548,6 @@ module Ethon
|
|
554
548
|
def get_info_double(option, handle)
|
555
549
|
if easy_getinfo(handle, option, double_ptr) == :ok
|
556
550
|
double_ptr.read_double
|
557
|
-
else nil
|
558
551
|
end
|
559
552
|
end
|
560
553
|
|
data/lib/ethon/easies/options.rb
CHANGED
@@ -13,9 +13,9 @@ module Ethon
|
|
13
13
|
:customrequest, :cainfo, :capath, :connecttimeout,
|
14
14
|
:followlocation, :httpauth, :infilesize, :interface,
|
15
15
|
:maxredirs, :nosignal, :postfieldsize, :copypostfields, :proxy,
|
16
|
-
:proxyauth, :proxytype, :timeout, :readdata, :sslcert,
|
17
|
-
:sslcerttype, :sslkey, :sslkeytype,
|
18
|
-
:url, :useragent, :userpwd, :verbose, :readfunction
|
16
|
+
:proxyauth, :proxyport, :proxytype, :timeout, :readdata, :sslcert,
|
17
|
+
:ssl_verifypeer, :ssl_verifyhost, :sslcerttype, :sslkey, :sslkeytype,
|
18
|
+
:sslversion, :url, :useragent, :userpwd, :verbose, :readfunction
|
19
19
|
])
|
20
20
|
base.send(:attr_accessor, *Ethon::Easy::AVAILABLE_OPTIONS)
|
21
21
|
end
|
@@ -52,7 +52,7 @@ module Ethon
|
|
52
52
|
#
|
53
53
|
# @return [ Hash ] The enum options.
|
54
54
|
def enum_options
|
55
|
-
{ :httpauth => Curl::Auth }
|
55
|
+
{ :httpauth => Curl::Auth, :sslversion => Curl::SSLVersion }
|
56
56
|
end
|
57
57
|
|
58
58
|
# Return the options which need to set as an integer for easy.
|
@@ -64,7 +64,7 @@ module Ethon
|
|
64
64
|
def int_options
|
65
65
|
[
|
66
66
|
:connecttimeout, :dns_cache_timeout, :infilesize, :maxredirs,
|
67
|
-
:postfieldsize, :ssl_verifyhost, :timeout
|
67
|
+
:postfieldsize, :proxyport, :ssl_verifyhost, :timeout
|
68
68
|
]
|
69
69
|
end
|
70
70
|
end
|
@@ -75,10 +75,7 @@ module Ethon
|
|
75
75
|
# easy.set_options
|
76
76
|
def set_options
|
77
77
|
self.class.available_options.each do |option|
|
78
|
-
|
79
|
-
next if value.nil?
|
80
|
-
|
81
|
-
Curl.set_option(option, value, handle)
|
78
|
+
Curl.set_option(option, value_for(option), handle)
|
82
79
|
end
|
83
80
|
end
|
84
81
|
|
@@ -96,7 +93,9 @@ module Ethon
|
|
96
93
|
if self.class.bool_options.include?(option)
|
97
94
|
value ? 1 : 0
|
98
95
|
elsif self.class.enum_options.key?(option)
|
99
|
-
self.class.enum_options[option]
|
96
|
+
self.class.enum_options[option].to_h.fetch(value) do
|
97
|
+
raise Errors::InvalidValue.new(option, value)
|
98
|
+
end
|
100
99
|
elsif self.class.int_options.include?(option)
|
101
100
|
value.to_i
|
102
101
|
elsif value.is_a?(::String)
|
data/lib/ethon/easy.rb
CHANGED
@@ -104,6 +104,8 @@ module Ethon
|
|
104
104
|
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPROXYAUTH.
|
105
105
|
# @option options :proxytype [String] See
|
106
106
|
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPROXYTYPE.
|
107
|
+
# @option options :proxyport [Integer] See
|
108
|
+
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPROXYPORT.
|
107
109
|
# @option options :put [String] See
|
108
110
|
# http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPUT.
|
109
111
|
# @option options :readdata [String] See
|
data/lib/ethon/errors.rb
CHANGED
data/lib/ethon/extensions.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require 'ethon/extensions/string.rb'
|
1
|
+
require 'ethon/extensions/string.rb'
|
@@ -5,11 +5,33 @@ module Ethon
|
|
5
5
|
module Extensions
|
6
6
|
module String # :nodoc:
|
7
7
|
|
8
|
-
|
8
|
+
unless ''.respond_to?(:byteslice)
|
9
|
+
# Return part of the string.
|
10
|
+
#
|
11
|
+
# @return [ String ] Part of the string.
|
12
|
+
def byteslice(*args)
|
13
|
+
self[*args]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Convert string to underscore. Taken from
|
18
|
+
# activesupport, renamed in order to no collide
|
19
|
+
# with it.
|
20
|
+
#
|
21
|
+
# @example Underscore.
|
22
|
+
# "ClassName".underscr
|
23
|
+
# #=> "class_name"
|
9
24
|
#
|
10
|
-
# @return [ String ]
|
11
|
-
def
|
12
|
-
self
|
25
|
+
# @return [ String ] Underscore string.
|
26
|
+
def underscr
|
27
|
+
word = self.dup
|
28
|
+
word.gsub!('::', '_')
|
29
|
+
word.gsub!(/(?:([A-Za-z\d])|^)(#{/(?=a)b/})(?=\b|[^a-z])/) { "#{$1}#{$1 && '_'}#{$2.downcase}" }
|
30
|
+
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
31
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
32
|
+
word.tr!("-", "_")
|
33
|
+
word.downcase!
|
34
|
+
word
|
13
35
|
end
|
14
36
|
end
|
15
37
|
end
|
data/lib/ethon/multies/stack.rb
CHANGED
@@ -24,6 +24,7 @@ module Ethon
|
|
24
24
|
# @raise [Ethon::Errors::MultiAdd] when adding an easy failed.
|
25
25
|
def add(easy)
|
26
26
|
return nil if easy_handles.include?(easy)
|
27
|
+
|
27
28
|
code = Curl.multi_add_handle(handle, easy.handle)
|
28
29
|
raise Errors::MultiAdd.new(code, easy) unless code == :ok
|
29
30
|
easy_handles << easy
|
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.
|
4
|
+
version: 0.3.0
|
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-
|
12
|
+
date: 2012-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -219,6 +219,7 @@ files:
|
|
219
219
|
- lib/ethon/errors/ethon_error.rb
|
220
220
|
- lib/ethon/errors/global_init.rb
|
221
221
|
- lib/ethon/errors/invalid_option.rb
|
222
|
+
- lib/ethon/errors/invalid_value.rb
|
222
223
|
- lib/ethon/errors/multi_add.rb
|
223
224
|
- lib/ethon/errors/multi_fdset.rb
|
224
225
|
- lib/ethon/errors/multi_remove.rb
|
@@ -251,7 +252,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
251
252
|
version: '0'
|
252
253
|
segments:
|
253
254
|
- 0
|
254
|
-
hash:
|
255
|
+
hash: 1054475577707452411
|
255
256
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
257
|
none: false
|
257
258
|
requirements:
|