Class: RideBuilder::Affiliate::NetHttpTransport

Inherits:
Object
  • Object
show all
Defined in:
lib/ridebuilder/affiliate/transport.rb

Overview

Default transport, backed by the stdlib Net::HTTP — zero third-party dependencies. Inject any object that responds to #call(method, url, headers, body) to route through your own HTTP client.

Instance Method Summary collapse

Constructor Details

#initialize(timeout_ms = 10_000) ⇒ NetHttpTransport

Returns a new instance of NetHttpTransport.



26
27
28
# File 'lib/ridebuilder/affiliate/transport.rb', line 26

def initialize(timeout_ms = 10_000)
  @timeout = timeout_ms / 1000.0
end

Instance Method Details

#call(method, url, headers, body) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/ridebuilder/affiliate/transport.rb', line 30

def call(method, url, headers, body)
  uri = URI(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == "https"
  http.open_timeout = @timeout
  http.read_timeout = @timeout

  request = build_request(method, uri)
  headers.each { |k, v| request[k] = v }
  request.body = body if body

  response = http.request(request)
  Response.new(response.code.to_i, response.body)
rescue SocketError, SystemCallError, IOError, Timeout::Error => e
  raise TransportError, e.message
end