Class: ApimaticCalculator::FaradayClient

Inherits:
HttpClient
  • Object
show all
Defined in:
lib/apimatic_calculator/http/faraday_client.rb

Overview

An implementation of HttpClient.

Instance Method Summary collapse

Methods inherited from HttpClient

#delete, #get, #head, #patch, #post, #put

Constructor Details

#initialize(timeout:, max_retries:, retry_interval:, backoff_factor:, retry_statuses:, retry_methods:, http_client_instance: nil, cache: false, verify: true) ⇒ FaradayClient

The constructor.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/apimatic_calculator/http/faraday_client.rb', line 13

def initialize(timeout:, max_retries:, retry_interval:,
               backoff_factor:, retry_statuses:, retry_methods:,
               http_client_instance: nil, cache: false, verify: true)
  if http_client_instance.nil?
    create_connection(timeout: timeout, max_retries: max_retries,
                      retry_interval: retry_interval, backoff_factor: backoff_factor,
                      retry_statuses: retry_statuses, retry_methods: retry_methods,
                      cache: cache, verify: verify)
  else
    if http_client_instance.instance_variable_get('@connection').nil?
      raise ArgumentError,
            "`connection` cannot be nil in `#{self.class}`. Please specify a valid value."
    end
    @connection = http_client_instance.instance_variable_get('@connection')
  end
end

Instance Method Details

#convert_response(response, http_request) ⇒ Object

Method overridden from HttpClient.



84
85
86
87
# File 'lib/apimatic_calculator/http/faraday_client.rb', line 84

def convert_response(response, http_request)
  HttpResponse.new(response.status, response.reason_phrase,
                   response.headers, response.body, http_request)
end

#create_connection(timeout:, max_retries:, retry_interval:, backoff_factor:, retry_statuses:, retry_methods:, cache: false, verify: true) ⇒ Object

Method to initialize connection.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/apimatic_calculator/http/faraday_client.rb', line 31

def create_connection(timeout:, max_retries:, retry_interval:,
                      backoff_factor:, retry_statuses:, retry_methods:,
                      cache: false, verify: true)
  @connection = Faraday.new do |faraday|
    faraday.use Faraday::HttpCache, serializer: Marshal if cache
    faraday.use FaradayMiddleware::FollowRedirects
    faraday.use :gzip
    faraday.request :multipart
    faraday.request :url_encoded
    faraday.ssl[:ca_file] = Certifi.where
    faraday.ssl[:verify] = verify
    faraday.request :retry, max: max_retries, interval: retry_interval,
                            backoff_factor: backoff_factor,
                            retry_statuses: retry_statuses,
                            methods: retry_methods
    faraday.adapter Faraday.default_adapter
    faraday.options[:params_encoder] = Faraday::FlatParamsEncoder
    faraday.options[:timeout] = timeout if timeout.positive?
  end
  @connection
end

#execute_as_binary(http_request) ⇒ Object

Method overridden from HttpClient.



69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/apimatic_calculator/http/faraday_client.rb', line 69

def execute_as_binary(http_request)
  response = @connection.send(
    http_request.http_method.downcase,
    http_request.query_url
  ) do |request|
    request.headers = http_request.headers
    unless http_request.http_method == HttpMethodEnum::GET &&
           http_request.parameters.empty?
      request.body = http_request.parameters
    end
  end
  convert_response(response, http_request)
end

#execute_as_string(http_request) ⇒ Object

Method overridden from HttpClient.



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/apimatic_calculator/http/faraday_client.rb', line 54

def execute_as_string(http_request)
  response = @connection.send(
    http_request.http_method.downcase,
    http_request.query_url
  ) do |request|
    request.headers = http_request.headers
    unless http_request.http_method == HttpMethodEnum::GET &&
           http_request.parameters.empty?
      request.body = http_request.parameters
    end
  end
  convert_response(response, http_request)
end