Sha256: 157de622099295e5a77eb51a6c70162dd14e6f8bc29a3bf148b73578c7d0865b

Contents?: true

Size: 1.2 KB

Versions: 12

Compression:

Stored size: 1.2 KB

Contents

require 'net/http'

module AddressFinder
  class HTTP
    attr_reader :config

    def initialize(config)
      @config = config
      @connection_is_bad = false
    end

    def start(&block)
      net_http.start do
        block.call(self)
      end
    end

    def request(args)
      retries = 0
      begin
        re_establish_connection if @connection_is_bad
        net_http.request(args)
      rescue Net::ReadTimeout, Net::OpenTimeout, SocketError => error
        if retries < config.retries
          retries += 1
          sleep(config.retry_delay)
          @connection_is_bad = true if net_http.started?
          retry
        else
          raise error
        end
      end
    end

    private

    def re_establish_connection
      @connection_is_bad = false
      net_http.finish
      net_http.start
    end

    def net_http
      @net_http ||= begin
        http = Net::HTTP.new(config.hostname, config.port, config.proxy_host,
                             config.proxy_port, config.proxy_user,
                             config.proxy_password)
        http.open_timeout = config.timeout
        http.read_timeout = config.timeout
        http.use_ssl = true
        http
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
addressfinder-1.11.0 lib/addressfinder/http.rb
addressfinder-1.10.1 lib/addressfinder/http.rb
addressfinder-1.10.0 lib/addressfinder/http.rb
addressfinder-1.9.1 lib/addressfinder/http.rb
addressfinder-1.9.0 lib/addressfinder/http.rb
addressfinder-1.8.1 lib/addressfinder/http.rb
addressfinder-1.8.0 lib/addressfinder/http.rb
addressfinder-1.7.1 lib/addressfinder/http.rb
addressfinder-1.7.0 lib/addressfinder/http.rb
addressfinder-1.6.2 lib/addressfinder/http.rb
addressfinder-1.6.1 lib/addressfinder/http.rb
addressfinder-1.6.0 lib/addressfinder/http.rb