# File lib/webmock/http_lib_adapters/patron.rb, line 77
77: def build_patron_response(webmock_response)
78: raise Patron::TimeoutError if webmock_response.should_timeout
79: webmock_response.raise_error_if_any
80: res = Patron::Response.new
81: res.instance_variable_set(:@body, webmock_response.body)
82: res.instance_variable_set(:@status, webmock_response.status[0])
83: res.instance_variable_set(:@status_line, webmock_response.status[1])
84: res.instance_variable_set(:@headers, webmock_response.headers)
85: res
86: end
# File lib/webmock/http_lib_adapters/patron.rb, line 49
49: def build_request_signature(req)
50: uri = WebMock::Util::URI.heuristic_parse(req.url)
51: uri.path = uri.normalized_path.gsub("[^:]//","/")
52: uri.user = req.username
53: uri.password = req.password
54:
55: if [:put, :post].include?(req.action)
56: if req.file_name
57: if !File.exist?(req.file_name) || !File.readable?(req.file_name)
58: raise ArgumentError.new("Unable to open specified file.")
59: end
60: request_body = File.read(req.file_name)
61: elsif req.upload_data
62: request_body = req.upload_data
63: else
64: raise ArgumentError.new("Must provide either data or a filename when doing a PUT or POST")
65: end
66: end
67:
68: request_signature = WebMock::RequestSignature.new(
69: req.action,
70: uri.to_s,
71: :body => request_body,
72: :headers => req.headers
73: )
74: request_signature
75: end
# File lib/webmock/http_lib_adapters/patron.rb, line 88
88: def build_webmock_response(patron_response)
89: webmock_response = WebMock::Response.new
90: reason = patron_response.status_line.scan(%(\AHTTP/(\d+\.\d+)\s+(\d\d\d)\s*([^\r\n]+)?\r?\z))[0][2]
91: webmock_response.status = [patron_response.status, reason]
92: webmock_response.body = patron_response.body
93: webmock_response.headers = patron_response.headers
94: webmock_response
95: end
# File lib/webmock/http_lib_adapters/patron.rb, line 37
37: def handle_file_name(req, webmock_response)
38: if req.action == :get && req.file_name
39: begin
40: File.open(req.file_name, "w") do |f|
41: f.write webmock_response.body
42: end
43: rescue Errno::EACCES
44: raise ArgumentError.new("Unable to open specified file.")
45: end
46: end
47: end
# File lib/webmock/http_lib_adapters/patron.rb, line 6
6: def handle_request_with_webmock(req)
7: request_signature = build_request_signature(req)
8:
9: WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
10:
11: if WebMock.registered_request?(request_signature)
12: webmock_response = WebMock.response_for_request(request_signature)
13: handle_file_name(req, webmock_response)
14: res = build_patron_response(webmock_response)
15: WebMock::CallbackRegistry.invoke_callbacks(
16: {:lib => :patron}, request_signature, webmock_response)
17: res
18: elsif WebMock.net_connect_allowed?(request_signature.uri)
19: res = handle_request_without_webmock(req)
20: if WebMock::CallbackRegistry.any_callbacks?
21: webmock_response = build_webmock_response(res)
22: WebMock::CallbackRegistry.invoke_callbacks(
23: {:lib => :patron, :real_request => true}, request_signature,
24: webmock_response)
25: end
26: res
27: else
28: raise WebMock::NetConnectNotAllowedError.new(request_signature)
29: end
30: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.