Sha256: 9be2271625bcb64c9ebc569478309e0ff7f26121d4651b96070e654b180be95f

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

require "http"
require "json"
require_relative "error_handling"
require_relative "logger"

module SkinbaronApiClient
  # HTTP client for making requests to the Skinbaron API
  class HttpClient
    include ErrorHandling

    attr_reader :base_url, :headers, :debug

    def initialize(base_url:, headers: {}, debug: false)
      @base_url = base_url
      @headers = headers
      @debug = debug
    end

    with_error_handling def post(endpoint:, body: {})
      url = "#{base_url}/#{endpoint}"
      debug_log "Making POST request to: #{url}"
      debug_log "Request body: #{body.to_json}"

      Logger.instance.log({
                            type: "REQUEST",
                            url: url,
                            method: "POST",
                            headers: headers,
                            body: body
                          })

      http_response = HTTP.headers(headers).post(url, json: body)

      Logger.instance.log({
                            type: "RESPONSE",
                            url: url,
                            status: http_response.status.to_s,
                            body: http_response.body.to_s
                          })

      {
        status: http_response.status,
        headers: http_response.headers.to_h,
        body: http_response.body.to_s,
        url: url
      }
    end

    private

    def debug_log(message)
      puts message if debug
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
skinbaron_api_client-0.1.0 lib/skinbaron_api_client/http_client.rb