Class: Factorix::HTTP::Client

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

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

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



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

#masked_paramsArray<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

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

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

Yields:

  • (Net::HTTPResponse)

    for streaming responses

Returns:

Raises:



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