Sha256: cfb3940ac074046520fe5bdcad3cf05e5767c146a273907f6da00af723916a42

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

require 'faraday'
require 'faraday_middleware'
require 'faraday-cookie_jar'

module MetaInspector

  # Makes the request to the server
  class Request
    include MetaInspector::Exceptionable

    def initialize(initial_url, options = {})
      @url                = initial_url

      @allow_redirections = options[:allow_redirections]
      @connection_timeout = options[:connection_timeout]
      @read_timeout       = options[:read_timeout]
      @retries            = options[:retries]
      @exception_log      = options[:exception_log]
      @headers            = options[:headers]

      response            # request early so we can fail early
    end

    extend Forwardable
    delegate :url => :@url

    def read
      response.body if response
    end

    def content_type
      return nil if response.headers['content-type'].nil?
      response.headers['content-type'].split(';')[0] if response
    end

    def response
      @response ||= fetch
    rescue Faraday::TimeoutError, Faraday::Error::ConnectionFailed,
           RuntimeError => e
      @exception_log << e
      nil
    end

    private

    def fetch
      session = Faraday.new(:url => url) do |faraday|
        faraday.request :retry, max: @retries

        if @allow_redirections
          faraday.use FaradayMiddleware::FollowRedirects, limit: 10
          faraday.use :cookie_jar
        end

        faraday.headers.merge!(@headers || {})
        faraday.adapter :net_http
      end

      response = session.get do |req|
        req.options.timeout      = @connection_timeout
        req.options.open_timeout = @read_timeout
      end

      @url.url = response.env.url.to_s

      response
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
metainspector-4.3.2 lib/meta_inspector/request.rb
metainspector-4.3.1 lib/meta_inspector/request.rb