Class: ApiBrasil::Core::Transport::FaradayTransport

Inherits:
Base
  • Object
show all
Defined in:
lib/api_brasil/core/transport/faraday_transport.rb

Overview

Transporte opcional baseado no Faraday. Usado automaticamente quando o faraday ja esta carregado no processo; tambem pode ser injetado:

require "faraday"
ApiBrasil.new(transport: ApiBrasil::Core::Transport::FaradayTransport.new)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection = nil) ⇒ FaradayTransport

Returns a new instance of FaradayTransport.

Parameters:

  • connection (Faraday::Connection, nil) (defaults to: nil)

    conexao pronta (proxies, middlewares...)



18
19
20
21
22
23
24
25
26
27
# File 'lib/api_brasil/core/transport/faraday_transport.rb', line 18

def initialize(connection = nil)
  super()

  unless self.class.available?
    raise Errors::NetworkError, "Faraday nao esta carregado. Adicione `require \"faraday\"` ou " \
                                "use ApiBrasil::Core::Transport::NetHttpTransport."
  end

  @connection = connection || ::Faraday.new
end

Class Method Details

.available?Boolean

Returns true quando o Faraday esta disponivel.

Returns:

  • (Boolean)

    true quando o Faraday esta disponivel.



13
14
15
# File 'lib/api_brasil/core/transport/faraday_transport.rb', line 13

def self.available?
  defined?(::Faraday) ? true : false
end

Instance Method Details

#request(request) ⇒ Response

Parameters:

Returns:



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/api_brasil/core/transport/faraday_transport.rb', line 31

def request(request)
  response = @connection.run_request(
    request.method.downcase.to_sym,
    request.url,
    request.body,
    request.headers
  ) do |req|
    apply_timeout(req, request.timeout_ms)
  end

  Response.new(
    response.status,
    normalize_headers(response.headers),
    Transport.decode_body(request, response.body)
  )
rescue ::Faraday::TimeoutError => e
  raise Errors::TimeoutError.new(
    "Tempo limite de #{request.timeout_ms.to_i}ms excedido em #{request.method} #{request.url}.",
    previous: e
  )
rescue ::Faraday::Error => e
  raise Errors::NetworkError.new(
    "Falha de rede em #{request.method} #{request.url}: #{e.message}",
    previous: e
  )
end