Sha256: 91c601d87d07d919a4251e9d50c7872d7a7008c6485e513d6417edf4b36b9f38

Contents?: true

Size: 1.79 KB

Versions: 2

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

require 'faraday'
require 'faraday_throttler'

module MetalArchives
  ##
  # HTTP request client
  #
  class HTTPClient # :nodoc:
    class << self
      ##
      # Retrieve a HTTP resource
      #
      # [Raises]
      # - rdoc-ref:MetalArchives::Errors::InvalidIDError when receiving a status code == 404n
      # - rdoc-ref:MetalArchives::Errors::APIError when receiving a status code >= 400 (except 404)
      #
      def get(*params)
        response = client.get(*params)

        raise Errors::InvalidIDError, response.status if response.status == 404
        raise Errors::APIError, response.status if response.status >= 400

        response
      rescue Faraday::Error::ClientError => e
        MetalArchives.config.logger.error e.response
        raise Errors::APIError, e
      end

      private

      ##
      # Retrieve a HTTP client
      #
      #
      def client
        raise Errors::InvalidConfigurationError, 'Not configured yet' unless MetalArchives.config

        @faraday ||= Faraday.new do |f|
          f.request   :url_encoded # form-encode POST params
          f.response  :logger, MetalArchives.config.logger

          f.use       MetalArchives::Middleware::Headers
          f.use       MetalArchives::Middleware::CacheCheck
          f.use       MetalArchives::Middleware::RewriteEndpoint
          f.use       MetalArchives::Middleware::Encoding

          MetalArchives.config.middleware.each { |m| f.use m } if MetalArchives.config.middleware

          f.use       :throttler,
                      :rate => MetalArchives.config.request_rate,
                      :wait => MetalArchives.config.request_timeout,
                      :logger => MetalArchives.config.logger

          f.adapter   Faraday.default_adapter
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
metal_archives-2.2.0 lib/metal_archives/http_client.rb
metal_archives-2.1.1 lib/metal_archives/http_client.rb