Module: Net::Hippie

Defined in:
lib/net/hippie.rb,
lib/net/hippie/client.rb,
lib/net/hippie/version.rb,
lib/net/hippie/dns_cache.rb,
lib/net/hippie/connection.rb,
lib/net/hippie/tls_parser.rb,
lib/net/hippie/connection_pool.rb,
lib/net/hippie/content_type_mapper.rb

Overview

High-performance HTTP client with connection pooling and DNS caching.

Defined Under Namespace

Modules: TlsParser Classes: Client, Connection, ConnectionPool, ContentTypeMapper, DnsCache

Constant Summary collapse

CONNECTION_ERRORS =
[
  EOFError,
  Errno::ECONNREFUSED,
  Errno::ECONNRESET,
  Errno::EHOSTUNREACH,
  Errno::EINVAL,
  Errno::EPIPE,
  Errno::ECONNABORTED,
  Errno::ETIMEDOUT,
  IOError,
  Net::OpenTimeout,
  Net::ProtocolError,
  Net::ReadTimeout,
  Net::WriteTimeout,
  OpenSSL::OpenSSLError,
  OpenSSL::SSL::SSLError,
  SocketError,
  Timeout::Error
].freeze
BASIC_PREFIX =
'Basic '
BEARER_PREFIX =
'Bearer '
VERSION =
'1.5.1'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject



47
48
49
# File 'lib/net/hippie.rb', line 47

def logger
  @logger ||= Logger.new(nil)
end

.verify_modeObject



51
52
53
# File 'lib/net/hippie.rb', line 51

def verify_mode
  @verify_mode ||= OpenSSL::SSL::VERIFY_PEER
end

Class Method Details

.basic_auth(username, password) ⇒ Object



55
56
57
# File 'lib/net/hippie.rb', line 55

def basic_auth(username, password)
  BASIC_PREFIX + ::Base64.strict_encode64("#{username}:#{password}")
end

.bearer_auth(token) ⇒ Object



59
60
61
# File 'lib/net/hippie.rb', line 59

def bearer_auth(token)
  BEARER_PREFIX + token
end

.default_clientObject



63
64
65
# File 'lib/net/hippie.rb', line 63

def default_client
  @default_client ||= Client.new(follow_redirects: 3, logger: logger)
end

.reset_default_client!Object



67
68
69
# File 'lib/net/hippie.rb', line 67

def reset_default_client!
  @default_client = nil
end

.resolve(hostname, timeout: 5) ⇒ Object



77
78
79
80
81
82
# File 'lib/net/hippie.rb', line 77

def resolve(hostname, timeout: 5)
  Timeout.timeout(timeout) do
    addresses = Resolv.getaddresses(hostname)
    addresses.find { |a| a.match?(/^\d+\.\d+\.\d+\.\d+$/) } || addresses.first
  end
end