Class: Fopost::HTTP::NetHTTPTransport

Inherits:
Object
  • Object
show all
Includes:
Transport
Defined in:
lib/fopost/http/net_http_transport.rb

Overview

The default transport: Ruby's own net/http, so the gem needs no dependency of its own.

Constant Summary collapse

METHODS =
{
  'GET' => Net::HTTP::Get,
  'POST' => Net::HTTP::Post,
  'PUT' => Net::HTTP::Put,
  'PATCH' => Net::HTTP::Patch,
  'DELETE' => Net::HTTP::Delete
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(timeout: 30.0, open_timeout: nil) ⇒ NetHTTPTransport

Returns a new instance of NetHTTPTransport.



23
24
25
26
# File 'lib/fopost/http/net_http_transport.rb', line 23

def initialize(timeout: 30.0, open_timeout: nil)
  @timeout = timeout
  @open_timeout = open_timeout || timeout
end

Instance Method Details

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



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/fopost/http/net_http_transport.rb', line 28

def call(method:, url:, headers:, body:)
  uri = url.is_a?(URI) ? url : URI.parse(url)
  klass = METHODS.fetch(method.to_s.upcase) do
    raise ArgumentError, "fopost: unsupported HTTP method #{method}"
  end

  request = klass.new(uri)
  headers.each { |name, value| request[name] = value }
  request.body = body if body

  response = http_for(uri).request(request)
  Response.new(status: response.code.to_i, body: response.body || '',
               headers: response.to_hash.transform_values(&:first))
end