forked from lostisland/faraday
/
patron.rb
35 lines (29 loc) · 933 Bytes
/
patron.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
module Faraday
class Adapter
class Patron < Faraday::Adapter
begin
require 'patron'
rescue LoadError, NameError => e
self.load_error = e
end
def call(env)
super
# TODO: support streaming requests
env[:body] = env[:body].read if env[:body].respond_to? :read
session = ::Patron::Session.new
response = begin
if Connection::METHODS_WITH_BODIES.include? env[:method]
session.send(env[:method], env[:url].to_s, env[:body].to_s, env[:request_headers])
else
session.send(env[:method], env[:url].to_s, env[:request_headers])
end
rescue Errno::ECONNREFUSED
raise Error::ConnectionFailed, $!
end
env.update :status => response.status, :body => response.body
env[:response_headers].update response.headers
@app.call env
end
end
end
end