Class: CoreLibrary::FaradayClient

Inherits:
HttpClient
  • Object
show all
Defined in:
lib/apimatic-faraday-client-adapter/faraday_client.rb

Overview

An implementation of HttpClient.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client_configuration) ⇒ FaradayClient

The constructor.

Parameters:

  • client_configuration (ClientConfiguration)

    The configurations for the Faraday client.



16
17
18
19
20
21
22
23
# File 'lib/apimatic-faraday-client-adapter/faraday_client.rb', line 16

def initialize(client_configuration)
  @response_factory = client_configuration.response_factory
  @connection = if client_configuration.connection.nil?
                  create_connection(client_configuration)
                else
                  client_configuration.connection
                end
end

Instance Attribute Details

#connectionObject (readonly)

The attribute readers for properties.



12
13
14
# File 'lib/apimatic-faraday-client-adapter/faraday_client.rb', line 12

def connection
  @connection
end

#response_factoryObject (readonly)

The attribute readers for properties.



12
13
14
# File 'lib/apimatic-faraday-client-adapter/faraday_client.rb', line 12

def response_factory
  @response_factory
end

Instance Method Details

#convert_response(response, http_request) ⇒ Object

Method overridden from HttpClient.

Parameters:

  • response (Dynamic)

    The response object received from the client.

  • http_request (HttpRequest)

    The HttpRequest which was executed.



69
70
71
72
# File 'lib/apimatic-faraday-client-adapter/faraday_client.rb', line 69

def convert_response(response, http_request)
  @response_factory.create(response.status, response.reason_phrase,
                           response.headers, response.body, http_request)
end

#create_connection(client_configuration) ⇒ Object

Method to initialize connection.

Parameters:

  • client_configuration (ClientConfiguration)

    The configurations for the Faraday client.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/apimatic-faraday-client-adapter/faraday_client.rb', line 27

def create_connection(client_configuration)
  Faraday.new do |faraday|
    faraday.use Faraday::HttpCache, serializer: Marshal if client_configuration.cache
    faraday.use Faraday::FollowRedirects::Middleware
    faraday.request :gzip
    faraday.request :multipart
    faraday.request :url_encoded
    faraday.ssl[:ca_file] = Certifi.where
    faraday.ssl[:verify] = client_configuration.verify
    faraday.request :retry,
                    max: client_configuration.max_retries,
                    interval: client_configuration.retry_interval,
                    backoff_factor: client_configuration.backoff_factor,
                    retry_statuses: client_configuration.retry_statuses,
                    methods: client_configuration.retry_methods,
                    retry_if: proc { |env, _exc|
                      env.request.context['forced_retry'] ||= false
                    }
    faraday.adapter client_configuration.adapter
    faraday.options[:params_encoder] = Faraday::FlatParamsEncoder
    faraday.options[:timeout] = client_configuration.timeout if client_configuration.timeout.positive?
  end
end

#execute(http_request) ⇒ Object

Method overridden from HttpClient.

Parameters:

  • http_request (HttpRequest)

    The HttpRequest to be executed.



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/apimatic-faraday-client-adapter/faraday_client.rb', line 53

def execute(http_request)
  response = @connection.send(
    http_request.http_method.downcase,
    http_request.query_url
  ) do |request|
    request.headers = http_request.headers.map { |k, v| [k.to_s, v.to_s] }
    request.options.context ||= {}
    request.options.context.merge!(http_request.context)
    request.body = http_request.parameters
  end
  convert_response(response, http_request)
end