curl_wrapper 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +1 -0
- data/MIT-LICENSE +20 -0
- data/lib/curl_wrapper.rb +41 -0
- data/lib/curl_wrapper/config_options.rb +48 -0
- data/lib/curl_wrapper/version.rb +3 -0
- data/test/units/curl_wrapper_test.rb +115 -0
- data/test/units/curl_wrapper_test/config_options_test.rb +306 -0
- metadata +65 -0
data/CHANGELOG.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
## 0.0.0 Nothing
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2005-2012 David Heinemeier Hansson
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/lib/curl_wrapper.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'curl_wrapper/version'
|
2
|
+
require 'curl_wrapper/config_options'
|
3
|
+
require 'open3'
|
4
|
+
|
5
|
+
class CurlWrapper
|
6
|
+
include CurlWrapper::ConfigOptions
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def method_missing(method, *args, &block)
|
10
|
+
new.send(method, *args, &block)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
def initialize(&block)
|
14
|
+
yield self if block_given?
|
15
|
+
end
|
16
|
+
|
17
|
+
def command
|
18
|
+
['curl', options].join(' ')
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
@stdin, @stdout, @stderr, @wait_thr = Open3.popen3(command)
|
23
|
+
end
|
24
|
+
|
25
|
+
def out
|
26
|
+
run if @stdout.nil?
|
27
|
+
@stdout.collect(&:to_s).join('')
|
28
|
+
end
|
29
|
+
alias :body :out
|
30
|
+
alias :to_s :out
|
31
|
+
|
32
|
+
def err
|
33
|
+
run if @stdout.nil?
|
34
|
+
@stderr.collect(&:to_s).join('')
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_ary
|
38
|
+
[to_s]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'pp'
|
2
|
+
class CurlWrapper
|
3
|
+
module ConfigOptions
|
4
|
+
def method_missing(method, *args, &block)
|
5
|
+
method = method.to_s
|
6
|
+
if method.length == 1
|
7
|
+
option = "-#{method}"
|
8
|
+
else
|
9
|
+
option = "--#{method.gsub('_', '-')}"
|
10
|
+
end
|
11
|
+
append_option option, args.first
|
12
|
+
end
|
13
|
+
|
14
|
+
def options
|
15
|
+
@options
|
16
|
+
end
|
17
|
+
|
18
|
+
def append_option option, value = nil
|
19
|
+
option = "#{option} '#{value}'" unless value.nil?
|
20
|
+
if @options.nil?
|
21
|
+
@options = option
|
22
|
+
else
|
23
|
+
@options = "#{@options} #{option}"
|
24
|
+
end
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def fail
|
29
|
+
append_option '--fail'
|
30
|
+
end
|
31
|
+
|
32
|
+
def http1_0
|
33
|
+
append_option '--http1.0'
|
34
|
+
end
|
35
|
+
|
36
|
+
def proxy1_0 value
|
37
|
+
append_option '--proxy1.0', value
|
38
|
+
end
|
39
|
+
|
40
|
+
def p
|
41
|
+
append_option '-p'
|
42
|
+
end
|
43
|
+
|
44
|
+
def verbose
|
45
|
+
append_option '--verbose'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/pride'
|
3
|
+
require 'curl_wrapper'
|
4
|
+
|
5
|
+
class CurlWrapperTest < MiniTest::Unit::TestCase
|
6
|
+
|
7
|
+
def test_curl_basic
|
8
|
+
curl = CurlWrapper.new
|
9
|
+
assert_equal 'curl ', curl.command
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_curl_with_block
|
13
|
+
curl = CurlWrapper.new do |config|
|
14
|
+
|
15
|
+
end
|
16
|
+
assert_equal 'curl ', curl.command
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_collin_curl
|
20
|
+
curl_result = `curl 2>/dev/null`
|
21
|
+
curl = CurlWrapper.new
|
22
|
+
curl.run
|
23
|
+
assert_equal curl_result, curl.out, ":out should return culr help message #{curl_result}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_collin_curl
|
27
|
+
curl_result = `curl 2>&1`
|
28
|
+
curl = CurlWrapper.new
|
29
|
+
curl.run
|
30
|
+
assert_equal curl_result, curl.err, ":err should return culr help message #{curl_result}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_command_after_help_option
|
34
|
+
expected_command = 'curl --help'
|
35
|
+
curl = CurlWrapper.new
|
36
|
+
curl.help
|
37
|
+
|
38
|
+
assert_equal expected_command, curl.command, ":command should be #{expected_command}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_called_with_help_option
|
42
|
+
expected_out = `curl --help`
|
43
|
+
curl = CurlWrapper.new
|
44
|
+
curl.help
|
45
|
+
curl.run
|
46
|
+
|
47
|
+
assert_equal expected_out, curl.out, ":out should return the help screen"
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_excepts_config_in_a_block
|
51
|
+
expected_out = `curl --help`
|
52
|
+
curl = CurlWrapper.new do |config|
|
53
|
+
config.help
|
54
|
+
end
|
55
|
+
curl.run
|
56
|
+
|
57
|
+
assert_equal expected_out, curl.out, ":out should return the help screen"
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_autoruns_on_calling_out
|
61
|
+
expected_out = `curl --help`
|
62
|
+
curl = CurlWrapper.new do |config|
|
63
|
+
config.help
|
64
|
+
end
|
65
|
+
|
66
|
+
assert_equal expected_out, curl.out, ":out should return the help screen"
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_autoruns_on_calling_err
|
70
|
+
expected_out = ''
|
71
|
+
curl = CurlWrapper.new do |config|
|
72
|
+
config.help
|
73
|
+
end
|
74
|
+
|
75
|
+
assert_equal expected_out, curl.err, ":out should return the help screen"
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_options_should_return_self
|
79
|
+
expected_out = `curl --help`
|
80
|
+
curl = CurlWrapper.new
|
81
|
+
assert_equal curl, curl.help, "Should be returning it self"
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_is_chanable
|
85
|
+
expected_out = `curl --help`
|
86
|
+
assert_equal expected_out, CurlWrapper.new.help.out, "Should be returning it self"
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_get_new_out_of_the_way
|
90
|
+
expected_out = `curl --help`
|
91
|
+
assert_equal expected_out, CurlWrapper.help.out, "Should be returning it self"
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_body_should_be_aliast_to_out
|
95
|
+
expected_out = `curl --help`
|
96
|
+
assert_equal expected_out, CurlWrapper.help.body, "Should be returning it self"
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_to_s_should_be_aliast_to_out
|
100
|
+
expected_out = `curl --help`
|
101
|
+
assert_equal expected_out, CurlWrapper.help.to_s, "Should be returning it self"
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_skiping_out_should_just_work
|
105
|
+
expected_out = `curl --help`
|
106
|
+
assert_equal expected_out, "#{CurlWrapper.help}", "Should be returning it self"
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_should_convert_to_array_to_work_with_puts
|
110
|
+
expected_out = `curl --help`
|
111
|
+
assert_equal expected_out, CurlWrapper.help.to_ary.first, "Should be returning it self"
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
end
|
@@ -0,0 +1,306 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/pride'
|
3
|
+
require 'curl_wrapper/config_options'
|
4
|
+
|
5
|
+
class CurlWrapperTest < MiniTest::Unit::TestCase
|
6
|
+
class ConfigOptionsTest < MiniTest::Unit::TestCase
|
7
|
+
KNOWN_LONG_CURL_OPTIONS = [
|
8
|
+
{ :method => :anyauth, :option => '--anyauth', :description => %q[Pick "any" authentication method (H)] },
|
9
|
+
{ :method => :append, :option => '--append', :description => %q[Append to target file when uploading (F/SFTP)] },
|
10
|
+
{ :method => :basic, :option => '--basic', :description => %q[Use HTTP Basic Authentication (H)] },
|
11
|
+
{ :method => :cacert, :option => '--cacert', :param => 'FILE', :description => %q[CA certificate to verify peer against (SSL)] },
|
12
|
+
{ :method => :capath, :option => '--capath', :param => 'DIR', :description => %q[CA directory to verify peer against (SSL)] },
|
13
|
+
{ :method => :cert, :option => '--cert', :param => 'CERT[:PASSWD]', :description => %q[Client certificate file and password (SSL)] },
|
14
|
+
{ :method => :cert_type, :option => '--cert-type', :param => 'TYPE', :description => %q[Certificate file type (DER/PEM/ENG) (SSL)] },
|
15
|
+
{ :method => :ciphers, :option => '--ciphers', :param => 'LIST', :description => %q[SSL ciphers to use (SSL)] },
|
16
|
+
{ :method => :compressed, :option => '--compressed', :description => %q[Request compressed response (using deflate or gzip)] },
|
17
|
+
{ :method => :config, :option => '--config', :param => 'FILE', :description => %q[Specify which config file to read] },
|
18
|
+
{ :method => :connect_timeout, :option => '--connect-timeout', :param => 'SECONDS', :description => %q[Maximum time allowed for connection] },
|
19
|
+
{ :method => :continue_at, :option => '--continue-at', :param => 'OFFSET', :description => %q[Resumed transfer offset] },
|
20
|
+
{ :method => :cookie, :option => '--cookie', :param => 'STRING/FILE', :description => %q[String or file to read cookies from (H)] },
|
21
|
+
{ :method => :cookie_jar, :option => '--cookie-jar', :param => 'FILE', :description => %q[Write cookies to this file after operation (H)] },
|
22
|
+
{ :method => :create_dirs, :option => '--create-dirs', :description => %q[Create necessary local directory hierarchy] },
|
23
|
+
{ :method => :crlf, :option => '--crlf', :description => %q[Convert LF to CRLF in upload] },
|
24
|
+
{ :method => :crlfile, :option => '--crlfile', :param => 'FILE', :description => %q[Get a CRL list in PEM format from the given file] },
|
25
|
+
{ :method => :data, :option => '--data', :param => 'DATA', :description => %q[HTTP POST data (H)] },
|
26
|
+
{ :method => :data_ascii, :option => '--data-ascii', :param => 'DATA', :description => %q[HTTP POST ASCII data (H)] },
|
27
|
+
{ :method => :data_binary, :option => '--data-binary', :param => 'DATA', :description => %q[HTTP POST binary data (H)] },
|
28
|
+
{ :method => :data_urlencode, :option => '--data-urlencode', :param => 'DATA', :description => %q[HTTP POST data url encoded (H)] },
|
29
|
+
{ :method => :delegation, :option => '--delegation', :param => 'STRING', :description => %q[GSS-API delegation permission] },
|
30
|
+
{ :method => :digest, :option => '--digest', :description => %q[Use HTTP Digest Authentication (H)] },
|
31
|
+
{ :method => :disable_eprt, :option => '--disable-eprt', :description => %q[Inhibit using EPRT or LPRT (F)] },
|
32
|
+
{ :method => :disable_epsv, :option => '--disable-epsv', :description => %q[Inhibit using EPSV (F)] },
|
33
|
+
{ :method => :dump_header, :option => '--dump-header', :param => 'FILE', :description => %q[Write the headers to this file] },
|
34
|
+
{ :method => :egd_file, :option => '--egd-file', :param => 'FILE', :description => %q[EGD socket path for random data (SSL)] },
|
35
|
+
{ :method => :engine, :option => '--engine', :param => 'ENGINGE', :description => %q[Crypto engine (SSL). "--engine list" for list] },
|
36
|
+
{ :method => :fail, :option => '--fail', :description => %q[Fail silently (no output at all) on HTTP errors (H)] },
|
37
|
+
{ :method => :form, :option => '--form', :param => 'CONTENT', :description => %q[Specify HTTP multipart POST data (H)] },
|
38
|
+
{ :method => :form_string, :option => '--form-string', :param => 'STRING', :description => %q[Specify HTTP multipart POST data (H)] },
|
39
|
+
{ :method => :ftp_account, :option => '--ftp-account', :param => 'DATA', :description => %q[Account data string (F)] },
|
40
|
+
{ :method => :ftp_alternative_to_user, :option => '--ftp-alternative-to-user', :param => 'COMMAND', :description => %q[String to replace "USER [name]" (F)] },
|
41
|
+
{ :method => :ftp_create_dirs, :option => '--ftp-create-dirs', :description => %q[Create the remote dirs if not present (F)] },
|
42
|
+
{ :method => :ftp_method, :option => '--ftp-method', :param => '[MULTICWD/NOCWD/SINGLECWD]', :description => %q[Control CWD usage (F)] },
|
43
|
+
{ :method => :ftp_pasv, :option => '--ftp-pasv', :description => %q[Use PASV/EPSV instead of PORT (F)] },
|
44
|
+
{ :method => :ftp_port, :option => '--ftp-port', :param => 'ADR', :description => %q[Use PORT with given address instead of PASV (F)] },
|
45
|
+
{ :method => :ftp_skip_pasv_ip, :option => '--ftp-skip-pasv-ip', :description => %q[Skip the IP address for PASV (F)] },
|
46
|
+
{ :method => :ftp_pret, :option => '--ftp-pret', :description => %q[Send PRET before PASV (for drftpd) (F)] },
|
47
|
+
{ :method => :ftp_ssl_ccc, :option => '--ftp-ssl-ccc', :description => %q[Send CCC after authenticating (F)] },
|
48
|
+
{ :method => :ftp_ssl_ccc_mode, :option => '--ftp-ssl-ccc-mode', :param => 'ACTIVE/PASSIVE', :description => %q[Set CCC mode (F)] },
|
49
|
+
{ :method => :ftp_ssl_control, :option => '--ftp-ssl-control', :description => %q[Require SSL/TLS for ftp login, clear for transfer (F)] },
|
50
|
+
{ :method => :get, :option => '--get', :description => %q[Send the -d data with a HTTP GET (H)] },
|
51
|
+
{ :method => :globoff, :option => '--globoff', :description => %q[Disable URL sequences and ranges using {} and []] },
|
52
|
+
{ :method => :header, :option => '--header', :param => 'LINE', :description => %q[Custom header to pass to server (H)] },
|
53
|
+
{ :method => :head, :option => '--head', :description => %q[Show document info only] },
|
54
|
+
{ :method => :help, :option => '--help', :description => %q[This help text] },
|
55
|
+
{ :method => :hostpubmd5, :option => '--hostpubmd5', :param => 'MD5', :description => %q[Hex encoded MD5 string of the host public key. (SSH)] },
|
56
|
+
{ :method => :http1_0, :option => '--http1.0', :description => %q[Use HTTP 1.0 (H)] },
|
57
|
+
{ :method => :ignore_content_length, :option => '--ignore-content-length', :description => %q[Ignore the HTTP Content-Length header] },
|
58
|
+
{ :method => :include, :option => '--include', :description => %q[Include protocol headers in the output (H/F)] },
|
59
|
+
{ :method => :insecure, :option => '--insecure', :description => %q[Allow connections to SSL sites without certs (H)] },
|
60
|
+
{ :method => :interface, :option => '--interface', :param => 'INTERFACE', :description => %q[Specify network interface/address to use] },
|
61
|
+
{ :method => :ipv4, :option => '--ipv4', :description => %q[Resolve name to IPv4 address] },
|
62
|
+
{ :method => :ipv6, :option => '--ipv6', :description => %q[Resolve name to IPv6 address] },
|
63
|
+
{ :method => :junk_session_cookies, :option => '--junk-session-cookies', :description => %q[Ignore session cookies read from file (H)] },
|
64
|
+
{ :method => :keepalive_time, :option => '--keepalive-time', :param => 'SECONDS', :description => %q[Interval between keepalive probes] },
|
65
|
+
{ :method => :key, :option => '--key', :param => 'KEY', :description => %q[Private key file name (SSL/SSH)] },
|
66
|
+
{ :method => :key_type, :option => '--key-type', :param => 'TYPE', :description => %q[Private key file type (DER/PEM/ENG) (SSL)] },
|
67
|
+
{ :method => :krb, :option => '--krb', :param => 'LEVEL', :description => %q[Enable Kerberos with specified security level (F)] },
|
68
|
+
{ :method => :libcurl, :option => '--libcurl', :param => 'FILE', :description => %q[Dump libcurl equivalent code of this command line] },
|
69
|
+
{ :method => :limit_rate, :option => '--limit-rate', :param => 'RATE', :description => %q[Limit transfer speed to this rate] },
|
70
|
+
{ :method => :list_only, :option => '--list-only', :description => %q[List only names of an FTP directory (F)] },
|
71
|
+
{ :method => :local_port, :option => '--local-port', :param => 'RANGE', :description => %q[Force use of these local port numbers] },
|
72
|
+
{ :method => :location, :option => '--location', :description => %q[Follow redirects (H)] },
|
73
|
+
{ :method => :location_trusted, :option => '--location-trusted', :description => %q[like --location and send auth to other hosts (H)] },
|
74
|
+
{ :method => :manual, :option => '--manual', :description => %q[Display the full manual] },
|
75
|
+
{ :method => :mail_from, :option => '--mail-from', :param => 'FROM', :description => %q[Mail from this address] },
|
76
|
+
{ :method => :mail_rcpt, :option => '--mail-rcpt', :param => 'TO', :description => %q[Mail to this receiver(s)] },
|
77
|
+
{ :method => :max_filesize, :option => '--max-filesize', :param => 'BYTES', :description => %q[Maximum file size to download (H/F)] },
|
78
|
+
{ :method => :max_redirs, :option => '--max-redirs', :param => 'NUM', :description => %q[Maximum number of redirects allowed (H)] },
|
79
|
+
{ :method => :max_time, :option => '--max-time', :param => 'SECONDS', :description => %q[Maximum time allowed for the transfer] },
|
80
|
+
{ :method => :negotiate, :option => '--negotiate', :description => %q[Use HTTP Negotiate Authentication (H)] },
|
81
|
+
{ :method => :netrc, :option => '--netrc', :description => %q[Must read .netrc for user name and password] },
|
82
|
+
{ :method => :netrc_optional, :option => '--netrc-optional', :description => %q[Use either .netrc or URL; overrides -n] },
|
83
|
+
{ :method => :netrc_file, :option => '--netrc-file', :param => 'FILE', :description => %q[Set up the netrc filename to use] },
|
84
|
+
{ :method => :no_buffer, :option => '--no-buffer', :description => %q[Disable buffering of the output stream] },
|
85
|
+
{ :method => :no_keepalive, :option => '--no-keepalive', :description => %q[Disable keepalive use on the connection] },
|
86
|
+
{ :method => :no_sessionid, :option => '--no-sessionid', :description => %q[Disable SSL session-ID reusing (SSL)] },
|
87
|
+
{ :method => :noproxy, :option => '--noproxy', :description => %q[List of hosts which do not use proxy] },
|
88
|
+
{ :method => :ntlm, :option => '--ntlm', :description => %q[Use HTTP NTLM authentication (H)] },
|
89
|
+
{ :method => :output, :option => '--output', :param => 'FILE', :description => %q[Write output to <file> instead of stdout] },
|
90
|
+
{ :method => :pass, :option => '--pass', :param => 'PASS', :description => %q[Pass phrase for the private key (SSL/SSH)] },
|
91
|
+
{ :method => :post301, :option => '--post301', :description => %q[Do not switch to GET after following a 301 redirect (H)] },
|
92
|
+
{ :method => :post302, :option => '--post302', :description => %q[Do not switch to GET after following a 302 redirect (H)] },
|
93
|
+
{ :method => :progress_bar, :option => '--progress-bar', :description => %q[Display transfer progress as a progress bar] },
|
94
|
+
{ :method => :proto, :option => '--proto', :param => 'PROTOCOLS', :description => %q[Enable/disable specified protocols] },
|
95
|
+
{ :method => :proto_redir, :option => '--proto-redir', :param => 'PROTOCOLS', :description => %q[Enable/disable specified protocols on redirect] },
|
96
|
+
{ :method => :proxy, :option => '--proxy', :param => '[PROTOCOL://]HOST[:PORT]', :description => %q[Use proxy on given port] },
|
97
|
+
{ :method => :proxy_anyauth, :option => '--proxy-anyauth', :description => %q[Pick "any" proxy authentication method (H)] },
|
98
|
+
{ :method => :proxy_basic, :option => '--proxy-basic', :description => %q[Use Basic authentication on the proxy (H)] },
|
99
|
+
{ :method => :proxy_digest, :option => '--proxy-digest', :description => %q[Use Digest authentication on the proxy (H)] },
|
100
|
+
{ :method => :proxy_negotiate, :option => '--proxy-negotiate', :description => %q[Use Negotiate authentication on the proxy (H)] },
|
101
|
+
{ :method => :proxy_ntlm, :option => '--proxy-ntlm', :description => %q[Use NTLM authentication on the proxy (H)] },
|
102
|
+
{ :method => :proxy_user, :option => '--proxy-user', :param => 'USER[:PASSWORD]', :description => %q[Proxy user and password] },
|
103
|
+
{ :method => :proxy1_0, :option => '--proxy1.0', :param => 'HOST[:PORT]', :description => %q[Use HTTP/1.0 proxy on given port] },
|
104
|
+
{ :method => :proxytunnel, :option => '--proxytunnel', :description => %q[Operate through a HTTP proxy tunnel (using CONNECT)] },
|
105
|
+
{ :method => :pubkey, :option => '--pubkey', :param => 'KEY', :description => %q[Public key file name (SSH)] },
|
106
|
+
{ :method => :quote, :option => '--quote', :param => 'CMD', :description => %q[Send command(s) to server before transfer (F/SFTP)] },
|
107
|
+
{ :method => :random_file, :option => '--random-file', :param => 'FILE', :description => %q[File for reading random data from (SSL)] },
|
108
|
+
{ :method => :range, :option => '--range', :param => 'RANGE', :description => %q[Retrieve only the bytes within a range] },
|
109
|
+
{ :method => :raw, :option => '--raw', :description => %q[Do HTTP "raw", without any transfer decoding (H)] },
|
110
|
+
{ :method => :referer, :option => '--referer', :description => %q[Referer URL (H)] },
|
111
|
+
{ :method => :remote_header_name, :option => '--remote-header-name', :description => %q[Use the header-provided filename (H)] },
|
112
|
+
{ :method => :remote_name, :option => '--remote-name', :description => %q[Write output to a file named as the remote file] },
|
113
|
+
{ :method => :remote_name_all, :option => '--remote-name-all', :description => %q[Use the remote file name for all URLs] },
|
114
|
+
{ :method => :remote_time, :option => '--remote-time', :description => %q[Set the remote file's time on the local output] },
|
115
|
+
{ :method => :request, :option => '--request', :param => 'COMMAND', :description => %q[Specify request command to use] },
|
116
|
+
{ :method => :resolve, :option => '--resolve', :param => 'HOST:PORT:ADDRESS', :description => %q[Force resolve of HOST:PORT to ADDRESS] },
|
117
|
+
{ :method => :retry, :option => '--retry', :param => 'NUM', :description => %q[Retry request NUM times if transient problems occur] },
|
118
|
+
{ :method => :retry_delay, :option => '--retry-delay', :param => 'SECONDS', :description => %q[When retrying, wait this many seconds between each] },
|
119
|
+
{ :method => :retry_max_time, :option => '--retry-max-time', :param => 'SECONDS', :description => %q[Retry only within this period] },
|
120
|
+
{ :method => :show_error, :option => '--show-error', :description => %q[Show error. With -s, make curl show errors when they occur] },
|
121
|
+
{ :method => :silent, :option => '--silent', :description => %q[Silent mode. Don't output anything] },
|
122
|
+
{ :method => :socks4, :option => '--socks4', :param => 'HOST[:PORT]', :description => %q[SOCKS4 proxy on given host + port] },
|
123
|
+
{ :method => :socks4a, :option => '--socks4a', :param => 'HOST[:PORT]', :description => %q[SOCKS4a proxy on given host + port] },
|
124
|
+
{ :method => :socks5, :option => '--socks5', :param => 'HOST[:PORT]', :description => %q[SOCKS5 proxy on given host + port] },
|
125
|
+
{ :method => :socks5_hostname, :option => '--socks5-hostname', :param => 'HOST[:PORT]', :description => %q[SOCKS5 proxy, pass host name to proxy] },
|
126
|
+
{ :method => :speed_limit, :option => '--speed-limit', :param => 'RATE', :description => %q[Stop transfers below speed-limit for 'speed-time' secs] },
|
127
|
+
{ :method => :speed_time, :option => '--speed-time', :param => 'SECONDS', :description => %q[Time for trig speed-limit abort. Defaults to 30] },
|
128
|
+
{ :method => :ssl, :option => '--ssl', :description => %q[Try SSL/TLS (FTP, IMAP, POP3, SMTP)] },
|
129
|
+
{ :method => :ssl_reqd, :option => '--ssl-reqd', :description => %q[Require SSL/TLS (FTP, IMAP, POP3, SMTP)] },
|
130
|
+
{ :method => :sslv2, :option => '--sslv2', :description => %q[Use SSLv2 (SSL)] },
|
131
|
+
{ :method => :sslv3, :option => '--sslv3', :description => %q[Use SSLv3 (SSL)] },
|
132
|
+
{ :method => :stderr, :option => '--stderr', :param => 'FILE', :description => %q[Where to redirect stderr. - means stdout] },
|
133
|
+
{ :method => :tcp_nodelay, :option => '--tcp-nodelay', :description => %q[Use the TCP_NODELAY option] },
|
134
|
+
{ :method => :telnet_option, :option => '--telnet-option', :param => 'OPT=VAL', :description => %q[Set telnet option] },
|
135
|
+
{ :method => :tftp_blksize, :option => '--tftp-blksize', :param => 'VALUE', :description => %q[Set TFTP BLKSIZE option (must be >512)] },
|
136
|
+
{ :method => :time_cond, :option => '--time-cond', :param => 'TIME', :description => %q[Transfer based on a time condition] },
|
137
|
+
{ :method => :tlsv1, :option => '--tlsv1', :description => %q[Use TLSv1 (SSL)] },
|
138
|
+
{ :method => :trace, :option => '--trace', :param => 'FILE', :description => %q[Write a debug trace to the given file] },
|
139
|
+
{ :method => :trace_ascii, :option => '--trace-ascii', :param => 'FILE', :description => %q[Like --trace but without the hex output] },
|
140
|
+
{ :method => :trace_time, :option => '--trace-time', :description => %q[Add time stamps to trace/verbose output] },
|
141
|
+
{ :method => :tr_encoding, :option => '--tr-encoding', :description => %q[Request compressed transfer encoding (H)] },
|
142
|
+
{ :method => :upload_file, :option => '--upload-file', :param => 'FILE', :description => %q[Transfer FILE to destination] },
|
143
|
+
{ :method => :url, :option => '--url', :param => 'URL', :description => %q[URL to work with] },
|
144
|
+
{ :method => :use_ascii, :option => '--use-ascii', :description => %q[Use ASCII/text transfer] },
|
145
|
+
{ :method => :user, :option => '--user', :param => 'USER[:PASSWORD]', :description => %q[Server user and password] },
|
146
|
+
{ :method => :tlsuser, :option => '--tlsuser', :param => 'USER', :description => %q[TLS username] },
|
147
|
+
{ :method => :tlspassword, :option => '--tlspassword', :param => 'STRING', :description => %q[TLS password] },
|
148
|
+
{ :method => :tlsauthtype, :option => '--tlsauthtype', :param => 'STRING', :description => %q[TLS authentication type (default SRP)] },
|
149
|
+
{ :method => :user_agent, :option => '--user-agent', :param => 'STRING', :description => %q[User-Agent to send to server (H)] },
|
150
|
+
{ :method => :verbose, :option => '--verbose', :description => %q[Make the operation more talkative] },
|
151
|
+
{ :method => :version, :option => '--version', :description => %q[Show version number and quit] },
|
152
|
+
{ :method => :write_out, :option => '--write-out', :param => 'FORMAT', :description => %q[What to output after completion] },
|
153
|
+
{ :method => :xattr, :option => '--xattr', :description => %q[Store metadata in extended file attributes] },
|
154
|
+
]
|
155
|
+
|
156
|
+
KNOWN_SHORT_CURL_OPTIONS = [
|
157
|
+
{ :method => :a, :option => '-a', :description => %q[Append to target file when uploading (F/SFTP)] },
|
158
|
+
{ :method => :E, :option => '-E', :param => 'CERT[:PASSWD]', :description => %q[Client certificate file and password (SSL)] },
|
159
|
+
{ :method => :K, :option => '-K', :param => 'FILE', :description => %q[Specify which config file to read] },
|
160
|
+
{ :method => :C, :option => '-C', :param => 'OFFSET', :description => %q[Resumed transfer offset] },
|
161
|
+
{ :method => :b, :option => '-b', :param => 'STRING/FILE', :description => %q[String or file to read cookies from (H)] },
|
162
|
+
{ :method => :c, :option => '-c', :param => 'FILE', :description => %q[Write cookies to this file after operation (H)] },
|
163
|
+
{ :method => :d, :option => '-d', :param => 'DATA', :description => %q[HTTP POST data (H)] },
|
164
|
+
{ :method => :D, :option => '-D', :param => 'FILE', :description => %q[Write the headers to this file] },
|
165
|
+
{ :method => :f, :option => '-f', :description => %q[Fail silently (no output at all) on HTTP errors (H)] },
|
166
|
+
{ :method => :F, :option => '-F', :param => 'CONTENT', :description => %q[Specify HTTP multipart POST data (H)] },
|
167
|
+
{ :method => :P, :option => '-P', :param => 'ADR', :description => %q[Use PORT with given address instead of PASV (F)] },
|
168
|
+
{ :method => :G, :option => '-G', :description => %q[Send the -d data with a HTTP GET (H)] },
|
169
|
+
{ :method => :g, :option => '-g', :description => %q[Disable URL sequences and ranges using {} and []] },
|
170
|
+
{ :method => :H, :option => '-H', :param => 'LINE', :description => %q[Custom header to pass to server (H)] },
|
171
|
+
{ :method => :I, :option => '-I', :description => %q[Show document info only] },
|
172
|
+
{ :method => :h, :option => '-h', :description => %q[This help text] },
|
173
|
+
{ :method => :'0', :option => '-0', :description => %q[Use HTTP 1.0 (H)] },
|
174
|
+
{ :method => :i, :option => '-i', :description => %q[Include protocol headers in the output (H/F)] },
|
175
|
+
{ :method => :k, :option => '-k', :description => %q[Allow connections to SSL sites without certs (H)] },
|
176
|
+
{ :method => :'4', :option => '-4', :description => %q[Resolve name to IPv4 address] },
|
177
|
+
{ :method => :'6', :option => '-6', :description => %q[Resolve name to IPv6 address] },
|
178
|
+
{ :method => :j, :option => '-j', :description => %q[Ignore session cookies read from file (H)] },
|
179
|
+
{ :method => :l, :option => '-l', :description => %q[List only names of an FTP directory (F)] },
|
180
|
+
{ :method => :L, :option => '-L', :description => %q[Follow redirects (H)] },
|
181
|
+
{ :method => :M, :option => '-M', :description => %q[Display the full manual] },
|
182
|
+
{ :method => :m, :option => '-m', :param => 'SECONDS', :description => %q[Maximum time allowed for the transfer] },
|
183
|
+
{ :method => :n, :option => '-n', :description => %q[Must read .netrc for user name and password] },
|
184
|
+
{ :method => :N, :option => '-N', :description => %q[Disable buffering of the output stream] },
|
185
|
+
{ :method => :o, :option => '-o', :param => 'FILE', :description => %q[Write output to <file> instead of stdout] },
|
186
|
+
{ :method => :'#', :option => '-#', :description => %q[Display transfer progress as a progress bar] },
|
187
|
+
{ :method => :x, :option => '-x', :param => '[PROTOCOL://]HOST[:PORT]', :description => %q[Use proxy on given port] },
|
188
|
+
{ :method => :U, :option => '-U', :param => 'USER[:PASSWORD]', :description => %q[Proxy user and password] },
|
189
|
+
{ :method => :p, :option => '-p', :description => %q[Operate through a HTTP proxy tunnel (using CONNECT)] },
|
190
|
+
{ :method => :Q, :option => '-Q', :param => 'CMD', :description => %q[Send command(s) to server before transfer (F/SFTP)] },
|
191
|
+
{ :method => :r, :option => '-r', :param => 'RANGE', :description => %q[Retrieve only the bytes within a range] },
|
192
|
+
{ :method => :e, :option => '-e', :description => %q[Referer URL (H)] },
|
193
|
+
{ :method => :J, :option => '-J', :description => %q[Use the header-provided filename (H)] },
|
194
|
+
{ :method => :O, :option => '-O', :description => %q[Write output to a file named as the remote file] },
|
195
|
+
{ :method => :R, :option => '-R', :description => %q[Set the remote file's time on the local output] },
|
196
|
+
{ :method => :X, :option => '-X', :param => 'COMMAND', :description => %q[Specify request command to use] },
|
197
|
+
{ :method => :S, :option => '-S', :description => %q[Show error. With -s, make curl show errors when they occur] },
|
198
|
+
{ :method => :s, :option => '-s', :description => %q[Silent mode. Don't output anything] },
|
199
|
+
{ :method => :Y, :option => '-Y', :param => 'RATE', :description => %q[Stop transfers below speed-limit for 'speed-time' secs] },
|
200
|
+
{ :method => :y, :option => '-y', :param => 'SECONDS', :description => %q[Time for trig speed-limit abort. Defaults to 30] },
|
201
|
+
{ :method => :'2', :option => '-2', :description => %q[Use SSLv2 (SSL)] },
|
202
|
+
{ :method => :'3', :option => '-3', :description => %q[Use SSLv3 (SSL)] },
|
203
|
+
{ :method => :t, :option => '-t', :param => 'OPT=VAL', :description => %q[Set telnet option] },
|
204
|
+
{ :method => :z, :option => '-z', :param => 'TIME', :description => %q[Transfer based on a time condition] },
|
205
|
+
{ :method => :'1', :option => '-1', :description => %q[Use TLSv1 (SSL)] },
|
206
|
+
{ :method => :T, :option => '-T', :param => 'FILE', :description => %q[Transfer FILE to destination] },
|
207
|
+
{ :method => :B, :option => '-B', :description => %q[Use ASCII/text transfer] },
|
208
|
+
{ :method => :u, :option => '-u', :param => 'USER[:PASSWORD]', :description => %q[Server user and password] },
|
209
|
+
{ :method => :A, :option => '-A', :param => 'STRING', :description => %q[User-Agent to send to server (H)] },
|
210
|
+
{ :method => :v, :option => '-v', :description => %q[Make the operation more talkative] },
|
211
|
+
{ :method => :V, :option => '-V', :description => %q[Show version number and quit] },
|
212
|
+
{ :method => :w, :option => '-w', :param => 'FORMAT', :description => %q[What to output after completion] },
|
213
|
+
{ :method => :q, :option => '-q', :description => %q[If used as the first parameter disables .curlrc] },
|
214
|
+
]
|
215
|
+
|
216
|
+
class CurlWrapperFack
|
217
|
+
include CurlWrapper::ConfigOptions
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_known_long_curl_options
|
221
|
+
KNOWN_LONG_CURL_OPTIONS.each do |long_option|
|
222
|
+
curl = CurlWrapperFack.new
|
223
|
+
if long_option[:param].nil?
|
224
|
+
curl.send long_option[:method]
|
225
|
+
expected = "#{long_option[:option]}"
|
226
|
+
assert_equal expected, curl.options, "Should have worked for #{expected} => '#{long_option[:description]}'"
|
227
|
+
else
|
228
|
+
curl.send long_option[:method], long_option[:param]
|
229
|
+
expected = "#{long_option[:option]} '#{long_option[:param]}'"
|
230
|
+
assert_equal expected, curl.options, "Should have worked for #{expected} => '#{long_option[:description]}'"
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_known_short_curl_options
|
236
|
+
KNOWN_SHORT_CURL_OPTIONS.each do |short_option|
|
237
|
+
curl = CurlWrapperFack.new
|
238
|
+
if short_option[:param].nil?
|
239
|
+
curl.send short_option[:method]
|
240
|
+
expected = "#{short_option[:option]}"
|
241
|
+
assert_equal expected, curl.options, "Should have worked for #{expected} => '#{short_option[:description]}'"
|
242
|
+
else
|
243
|
+
curl.send short_option[:method], short_option[:param]
|
244
|
+
expected = "#{short_option[:option]} '#{short_option[:param]}'"
|
245
|
+
assert_equal expected, curl.options, "Should have worked for #{expected} => '#{short_option[:description]}'"
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def test_combinde_options
|
251
|
+
long_option = KNOWN_LONG_CURL_OPTIONS[30]
|
252
|
+
short_option = KNOWN_SHORT_CURL_OPTIONS[9]
|
253
|
+
|
254
|
+
curl = CurlWrapperFack.new
|
255
|
+
|
256
|
+
if short_option[:param].nil?
|
257
|
+
curl.send short_option[:method]
|
258
|
+
expected_short = "#{short_option[:option]}"
|
259
|
+
else
|
260
|
+
curl.send short_option[:method], short_option[:param]
|
261
|
+
expected_short = "#{short_option[:option]} '#{short_option[:param]}'"
|
262
|
+
end
|
263
|
+
|
264
|
+
if long_option[:param].nil?
|
265
|
+
curl.send long_option[:method]
|
266
|
+
expected_long = "#{long_option[:option]}"
|
267
|
+
else
|
268
|
+
curl.send long_option[:method], long_option[:param]
|
269
|
+
expected_long = "#{long_option[:option]} '#{long_option[:param]}'"
|
270
|
+
end
|
271
|
+
expected = [expected_short, expected_long].join(' ')
|
272
|
+
|
273
|
+
assert_equal expected, curl.options, "Should have worked for #{expected} => '#{short_option[:description]}' and '#{long_option[:description]}'"
|
274
|
+
end
|
275
|
+
|
276
|
+
|
277
|
+
def test_known_long_curl_options_returns_self
|
278
|
+
KNOWN_LONG_CURL_OPTIONS.each do |long_option|
|
279
|
+
actual_return_value = nil
|
280
|
+
curl = CurlWrapperFack.new
|
281
|
+
if long_option[:param].nil?
|
282
|
+
actual_return_value = curl.send long_option[:method]
|
283
|
+
else
|
284
|
+
actual_return_value = curl.send long_option[:method], long_option[:param]
|
285
|
+
end
|
286
|
+
|
287
|
+
assert_equal curl, actual_return_value, "Should be returning self to enable changing."
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_known_short_curl_options_returns_self
|
292
|
+
KNOWN_SHORT_CURL_OPTIONS.each do |short_option|
|
293
|
+
actual_return_value = nil
|
294
|
+
curl = CurlWrapperFack.new
|
295
|
+
if short_option[:param].nil?
|
296
|
+
actual_return_value = curl.send short_option[:method]
|
297
|
+
else
|
298
|
+
actual_return_value = curl.send short_option[:method], short_option[:param]
|
299
|
+
end
|
300
|
+
|
301
|
+
assert_equal curl, actual_return_value, "Should be returning self to enable changing."
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
end
|
306
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: curl_wrapper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ægir Örn Símonarson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: minitest
|
16
|
+
requirement: &2156158340 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2156158340
|
25
|
+
description: Makes it easy to take you curl hacking from bash to ruby
|
26
|
+
email:
|
27
|
+
- agirorn@gmail.com
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- CHANGELOG.md
|
33
|
+
- MIT-LICENSE
|
34
|
+
- lib/curl_wrapper/config_options.rb
|
35
|
+
- lib/curl_wrapper/version.rb
|
36
|
+
- lib/curl_wrapper.rb
|
37
|
+
- test/units/curl_wrapper_test.rb
|
38
|
+
- test/units/curl_wrapper_test/config_options_test.rb
|
39
|
+
homepage: ''
|
40
|
+
licenses: []
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
requirements: []
|
58
|
+
rubyforge_project: curl_wrapper
|
59
|
+
rubygems_version: 1.8.15
|
60
|
+
signing_key:
|
61
|
+
specification_version: 3
|
62
|
+
summary: DSL wraper for the curl command.
|
63
|
+
test_files:
|
64
|
+
- test/units/curl_wrapper_test.rb
|
65
|
+
- test/units/curl_wrapper_test/config_options_test.rb
|