Sha256: f44aaf5d2ac2f8fbd9cec2981a835ebe4abc1209d60a643a7a9170b701a691cd

Contents?: true

Size: 1 KB

Versions: 6

Compression:

Stored size: 1 KB

Contents

class Agilibox::GetHTTP < Agilibox::Service
  class Error < StandardError
  end

  EXCEPTIONS_TO_RERAISE = [
    IOError,
    Net::HTTPBadResponse,
    Net::HTTPExceptions,
    Net::HTTPHeaderSyntaxError,
    OpenSSL::SSL::SSLError,
    SocketError,
    SystemCallError,
    Timeout::Error,
    Zlib::Error,
  ]

  TIMEOUT = 10

  initialize_with :url

  def uri
    uri = URI(url.to_s)
    raise Error, "invalid URI type : #{uri.class}" unless uri.is_a?(URI::HTTP)
    uri
  end

  def response
    @response ||= fetch_response
  end

  def call
    response.body
  end

  private

  def fetch_response
    http_response = Timeout.timeout(TIMEOUT) do
      Net::HTTP.get_response(uri)
    end

    if http_response.code.start_with?("3")
      @url = http_response["Location"]
      return fetch_response
    end

    unless http_response.code.start_with?("2")
      raise Error, "invalid response code : #{http_response.code}"
    end

    http_response
  rescue *EXCEPTIONS_TO_RERAISE => e
    raise Error, e.message
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
agilibox-1.5.13 app/libs/agilibox/get_http.rb
agilibox-1.5.12 app/libs/agilibox/get_http.rb
agilibox-1.5.11 app/libs/agilibox/get_http.rb
agilibox-1.5.10 app/libs/agilibox/get_http.rb
agilibox-1.5.9 app/libs/agilibox/get_http.rb
agilibox-1.5.8 app/libs/agilibox/get_http.rb