patron 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/patron/session_ext.c +9 -1
- data/lib/patron/request.rb +52 -1
- data/lib/patron/session.rb +7 -1
- metadata +3 -3
data/ext/patron/session_ext.c
CHANGED
@@ -27,6 +27,7 @@
|
|
27
27
|
|
28
28
|
static VALUE mPatron = Qnil;
|
29
29
|
static VALUE cSession = Qnil;
|
30
|
+
static VALUE cRequest = Qnil;
|
30
31
|
static VALUE ePatronError = Qnil;
|
31
32
|
static VALUE eUnsupportedProtocol = Qnil;
|
32
33
|
static VALUE eURLFormatError = Qnil;
|
@@ -270,7 +271,7 @@ static void set_options_from_request(VALUE self, VALUE request) {
|
|
270
271
|
|
271
272
|
VALUE credentials = rb_funcall(request, rb_intern("credentials"), 0);
|
272
273
|
if (!NIL_P(credentials)) {
|
273
|
-
curl_easy_setopt(curl, CURLOPT_HTTPAUTH,
|
274
|
+
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, rb_iv_get(request, "@auth_type"));
|
274
275
|
curl_easy_setopt(curl, CURLOPT_USERPWD, StringValuePtr(credentials));
|
275
276
|
}
|
276
277
|
}
|
@@ -398,14 +399,21 @@ void Init_session_ext() {
|
|
398
399
|
ePartialFileError = rb_const_get(mPatron, rb_intern("PartialFileError"));
|
399
400
|
eTimeoutError = rb_const_get(mPatron, rb_intern("TimeoutError"));
|
400
401
|
eTooManyRedirects = rb_const_get(mPatron, rb_intern("TooManyRedirects"));
|
402
|
+
|
401
403
|
|
402
404
|
rb_define_module_function(mPatron, "libcurl_version", libcurl_version, 0);
|
403
405
|
|
404
406
|
cSession = rb_define_class_under(mPatron, "Session", rb_cObject);
|
407
|
+
cRequest = rb_define_class_under(mPatron, "Request", rb_cObject);
|
405
408
|
rb_define_alloc_func(cSession, session_alloc);
|
406
409
|
|
407
410
|
rb_define_method(cSession, "ext_initialize", session_ext_initialize, 0);
|
408
411
|
rb_define_method(cSession, "escape", session_escape, 1);
|
409
412
|
rb_define_method(cSession, "unescape", session_unescape, 1);
|
410
413
|
rb_define_method(cSession, "handle_request", session_handle_request, 1);
|
414
|
+
|
415
|
+
rb_define_const(cRequest, "AuthBasic", CURLAUTH_BASIC);
|
416
|
+
rb_define_const(cRequest, "AuthDigest", CURLAUTH_DIGEST);
|
417
|
+
rb_define_const(cRequest, "AuthAny", CURLAUTH_ANY);
|
418
|
+
|
411
419
|
}
|
data/lib/patron/request.rb
CHANGED
@@ -40,8 +40,44 @@ module Patron
|
|
40
40
|
@max_redirects = -1
|
41
41
|
end
|
42
42
|
|
43
|
-
attr_accessor :url, :username, :password, :
|
43
|
+
attr_accessor :url, :username, :password, :file_name, :proxy, :auth_type
|
44
44
|
attr_reader :action, :timeout, :connect_timeout, :max_redirects, :headers
|
45
|
+
attr_reader :auth_type
|
46
|
+
|
47
|
+
# Set the type of authentication to use for this request.
|
48
|
+
#
|
49
|
+
# @param [String, Symbol] type - The type of authentication to use for this request, can be one of
|
50
|
+
# :basic, :digest, or :any
|
51
|
+
#
|
52
|
+
# @example
|
53
|
+
# sess.username = "foo"
|
54
|
+
# sess.password = "sekrit"
|
55
|
+
# sess.auth_type = :digest
|
56
|
+
def auth_type=(type=:basic)
|
57
|
+
@auth_type = case type
|
58
|
+
when :basic, "basic"
|
59
|
+
Request::AuthBasic
|
60
|
+
when :digest, "digest"
|
61
|
+
Request::AuthDigest
|
62
|
+
when :any, "any"
|
63
|
+
Request::AuthAny
|
64
|
+
else
|
65
|
+
raise "#{type.inspect} is an unknown authentication type"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def upload_data=(data)
|
70
|
+
@upload_data = case data
|
71
|
+
when Hash:
|
72
|
+
hash_to_string(data)
|
73
|
+
else
|
74
|
+
data
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def upload_data
|
79
|
+
@upload_data
|
80
|
+
end
|
45
81
|
|
46
82
|
def action=(new_action)
|
47
83
|
if !VALID_ACTIONS.include?(new_action)
|
@@ -92,5 +128,20 @@ module Patron
|
|
92
128
|
"#{username}:#{password}"
|
93
129
|
end
|
94
130
|
|
131
|
+
private
|
132
|
+
|
133
|
+
# serialize hash for Rails-style params
|
134
|
+
def hash_to_string(hash)
|
135
|
+
pairs = []
|
136
|
+
recursive = Proc.new do |h, prefix|
|
137
|
+
h.each_pair do |k,v|
|
138
|
+
key = prefix == '' ? k : "#{prefix}[#{k}]"
|
139
|
+
v.is_a?(Hash) ? recursive.call(v, key) : pairs << "#{key}=#{v}"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
recursive.call(hash, '')
|
143
|
+
return pairs.join('&')
|
144
|
+
end
|
145
|
+
|
95
146
|
end
|
96
147
|
end
|
data/lib/patron/session.rb
CHANGED
@@ -55,6 +55,10 @@ module Patron
|
|
55
55
|
|
56
56
|
# Standard set of headers that are used in all requests.
|
57
57
|
attr_reader :headers
|
58
|
+
|
59
|
+
# Set the authentication type for the request.
|
60
|
+
# @see Patron::Request#auth_type
|
61
|
+
attr_accessor :auth_type
|
58
62
|
|
59
63
|
private :ext_initialize, :handle_request
|
60
64
|
|
@@ -65,6 +69,7 @@ module Patron
|
|
65
69
|
@timeout = 5
|
66
70
|
@connect_timeout = 1000
|
67
71
|
@max_redirects = -1
|
72
|
+
@auth_type = :basic
|
68
73
|
end
|
69
74
|
|
70
75
|
###################################################################
|
@@ -116,7 +121,7 @@ module Patron
|
|
116
121
|
# Uploads the contents of a file to the specified +url+ using HTTP POST.
|
117
122
|
def post_file(url, filename, headers = {})
|
118
123
|
request(:post, url, headers, :file => filename)
|
119
|
-
end
|
124
|
+
end
|
120
125
|
|
121
126
|
###################################################################
|
122
127
|
### WebDAV methods
|
@@ -145,6 +150,7 @@ module Patron
|
|
145
150
|
req.upload_data = options[:data]
|
146
151
|
req.file_name = options[:file]
|
147
152
|
req.proxy = proxy
|
153
|
+
req.auth_type = auth_type
|
148
154
|
|
149
155
|
req.url = self.base_url.to_s + url.to_s
|
150
156
|
raise ArgumentError, "Empty URL" if req.url.empty?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: patron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Phillip Toland
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-08-10 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -71,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements: []
|
72
72
|
|
73
73
|
rubyforge_project: patron
|
74
|
-
rubygems_version: 1.3.
|
74
|
+
rubygems_version: 1.3.5
|
75
75
|
signing_key:
|
76
76
|
specification_version: 3
|
77
77
|
summary: Patron HTTP client
|