Class: Factorix::HTTP::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/factorix/http/client.rb,
sig/factorix/http/client.rbs

Overview

Low-level HTTP client using Net::HTTP

Responsibilities:

  • Create and configure Net::HTTP instances
  • Execute HTTP methods (GET, POST)
  • Handle redirects (up to MAX_REDIRECTS)
  • Parse response codes and raise appropriate errors
  • Stream reading/writing for large files

Does NOT handle:

  • Retry logic (delegated to RetryDecorator)
  • Progress events (delegated to EventDecorator)
  • Caching (delegated to CacheDecorator)
  • JSON parsing (handled by API clients)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(masked_params: []) ⇒ Client

Returns a new instance of Client.

Parameters:

  • masked_params (Array<String>) (defaults to: []) —

    URL parameter names to mask in logs

  • masked_params: (Array[String]) (defaults to: [])


27
28
29
30
# File 'lib/factorix/http/client.rb', line 27

def initialize(masked_params: [], **)
  super(**)
  @masked_params = masked_params.freeze
end

Instance Attribute Details

#logger ⇒ Dry::Logger::Dispatcher (readonly)

Returns the value of attribute logger.



22
23
24
# File 'sig/factorix/http/client.rbs', line 22

def logger
  @logger
end

#masked_params ⇒ Array<String> (readonly)

Returns URL parameter names to mask in logs.

Returns:

  • (Array<String>) —

    URL parameter names to mask in logs



24
25
26
# File 'lib/factorix/http/client.rb', line 24

def masked_params
  @masked_params
end

Instance Method Details

#get(uri, headers: {}) {|Net::HTTPResponse| ... } ⇒ Response

Execute a GET request

Parameters:

  • uri (URI::HTTPS) —

    target URI

  • headers (Hash<String, String>) (defaults to: {}) —

    request headers

  • headers: (Hash[String, String]) (defaults to: {})

Yields:

  • (Net::HTTPResponse) —

    for streaming responses

Returns:



59
# File 'lib/factorix/http/client.rb', line 59

def get(uri, headers: {}, &) = request(:get, uri, headers:, &)

#head(uri, headers: {}) ⇒ Response

Execute a HEAD request

Parameters:

  • uri (URI::HTTPS) —

    target URI

  • headers (Hash<String, String>) (defaults to: {}) —

    request headers

Returns:



66
# File 'lib/factorix/http/client.rb', line 66

def head(uri, headers: {}) = request(:head, uri, headers:)

#post(uri, body:, headers: {}, content_type: nil) ⇒ Response

Execute a POST request

Parameters:

  • uri (URI::HTTPS) —

    target URI

  • body (String, IO) —

    request body

  • headers (Hash<String, String>) (defaults to: {}) —

    request headers

  • content_type (String, nil) (defaults to: nil) —

    Content-Type header

  • body: (String, IO)
  • headers: (Hash[String, String]) (defaults to: {})
  • content_type: (String, nil) (defaults to: nil)

Returns:



75
76
77
78
# File 'lib/factorix/http/client.rb', line 75

def post(uri, body:, headers: {}, content_type: nil)
  headers = headers.merge("Content-Type" => content_type) if content_type
  request(:post, uri, body:, headers:)
end

#request(method, uri, headers: {}, body: nil) {|Net::HTTPResponse| ... } ⇒ Response

Execute an HTTP request

Parameters:

  • method (Symbol) —

    HTTP method (:get, :post, :put, :delete)

  • uri (URI::HTTPS) —

    target URI

  • headers (Hash<String, String>) (defaults to: {}) —

    request headers

  • body (String, IO, nil) (defaults to: nil) —

    request body

  • headers: (Hash[String, String]) (defaults to: {})
  • body: (String, IO, nil) (defaults to: nil)

Yields:

  • (Net::HTTPResponse) —

    for streaming responses

Returns:



46
47
48
49
50
51
# File 'lib/factorix/http/client.rb', line 46

def request(method, uri, headers: {}, body: nil, &)
  raise URLError, "URL must be HTTPS" unless uri.is_a?(URI::HTTPS)

  logger.info("HTTP request", method: method.upcase, url: mask_credentials(uri))
  perform_request(method, uri, redirect_count: 0, headers:, body:, &)
end