Class: DPay::HTTP::NetHTTPClient
- Defined in:
- lib/dpay/http/net_http_client.rb,
sig/dpay/http/net_http_client.rbs
Constant Summary collapse
- CONNECT_TIMEOUT =
10- NETWORK_ERRORS =
[ Timeout::Error, SocketError, IOError, SystemCallError, OpenSSL::SSL::SSLError, Net::HTTPBadResponse ].freeze
Instance Method Summary collapse
- #build_request(uri, api_request) ⇒ Object
-
#initialize(timeout = 30) ⇒ NetHTTPClient
constructor
A new instance of NetHTTPClient.
- #request(api_request) ⇒ Response
Constructor Details
#initialize(timeout = 30) ⇒ NetHTTPClient
Returns a new instance of NetHTTPClient.
16 17 18 19 |
# File 'lib/dpay/http/net_http_client.rb', line 16 def initialize(timeout = 30) super() @timeout = timeout end |
Instance Method Details
#build_request(uri, api_request) ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/dpay/http/net_http_client.rb', line 43 def build_request(uri, api_request) klass = Net::HTTP.const_get(api_request.method.to_s.capitalize) request = klass.new(uri.request_uri) api_request.headers.each { |name, value| request[name] = value } request.body = api_request.body unless api_request.body.nil? request end |
#request(api_request) ⇒ Response
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/dpay/http/net_http_client.rb', line 21 def request(api_request) uri = URI.parse(api_request.url) raise TransportError, "Unsupported URL scheme: #{api_request.url}" unless uri.is_a?(URI::HTTP) host = uri.host raise TransportError, "URL has no host: #{api_request.url}" if host.nil? http = Net::HTTP.new(host, uri.port) http.use_ssl = uri.scheme == "https" http.open_timeout = CONNECT_TIMEOUT http.read_timeout = @timeout http.write_timeout = @timeout response = http.request(build_request(uri, api_request)) Response.new(response.code.to_i, response.each_header.to_h, response.body.to_s) rescue *NETWORK_ERRORS => e raise TransportError, "HTTP transport error: #{e.class}: #{e.}" end |