Class: ERPC::NetHttpAdapter

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

Instance Method Summary collapse

Instance Method Details

#request(method:, url:, headers:, body: nil, timeout: DEFAULT_TIMEOUT) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/erpc_sdk/transport.rb', line 14

def request(method:, url:, headers:, body: nil, timeout: DEFAULT_TIMEOUT)
  uri = URI.parse(url)
  request = request_class(method).new(uri.request_uri, headers)
  request.body = body unless body.nil?
  response = start(uri, timeout) { |http| http.request(request) }
  HttpResponse.new(status: response.code.to_i, body: response.body.to_s)
rescue Net::OpenTimeout, Net::ReadTimeout, Net::WriteTimeout
  raise TimeoutError, timeout
rescue IOError, EOFError, SocketError, SystemCallError, OpenSSL::SSL::SSLError
  raise TransportError, "Unable to reach ERPC"
end

#stream(url:, headers:, timeout: DEFAULT_TIMEOUT) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/erpc_sdk/transport.rb', line 26

def stream(url:, headers:, timeout: DEFAULT_TIMEOUT)
  Enumerator.new do |yielder|
    uri = URI.parse(url)
    request = Net::HTTP::Get.new(uri.request_uri, headers)
    start(uri, timeout) do |http|
      http.request(request) do |response|
        status = response.code.to_i
        raise HttpError, status unless status.between?(200, 299)

        response.read_body { |chunk| yielder << chunk }
      end
    end
  rescue Net::OpenTimeout, Net::ReadTimeout, Net::WriteTimeout
    raise TimeoutError, timeout
  rescue HttpError
    raise
  rescue IOError, EOFError, SocketError, SystemCallError, OpenSSL::SSL::SSLError
    raise TransportError, "Unable to reach ERPC"
  end
end