class DNS::ResolveHost

Constants

ResolutionError

Attributes

nameserver_address[RW]
nameserver_port[W]

Public Class Methods

build(address: nil, port: nil, hosts_file: nil) click to toggle source
# File lib/dns/resolve_host/resolve_host.rb, line 12
def self.build(address: nil, port: nil, hosts_file: nil)
  if address.nil? and not port.nil?
    raise ArgumentError, "Cannot specify port without address"
  end

  instance = new

  StaticResolver.configure instance, hosts_file, attr_name: :hosts_resolver

  instance.nameserver_address = address if address
  instance.nameserver_port = port if port

  instance
end
call(hostname, &block) click to toggle source
# File lib/dns/resolve_host/resolve_host.rb, line 27
def self.call(hostname, &block)
  instance = new
  instance.(hostname, &block)
end

Public Instance Methods

call(hostname, &block) click to toggle source
# File lib/dns/resolve_host/resolve_host.rb, line 32
def call(hostname, &block)
  logger.trace { "Resolving host (#{LogAttributes.get self, hostname})" }

  Resolv::DNS.open dns_resolver_options do |dns_resolver|
    resolver = Resolv.new [hosts_resolver, dns_resolver]

    block.(dns_resolver) if block

    addresses = resolver.getaddresses hostname

    addresses.map! &:to_s

    if addresses.empty?
      error_message = "Could not resolve host (#{LogAttributes.get self, hostname})"
      logger.error { error_message }
      raise ResolutionError, error_message
    end

    logger.info { "Resolved host (#{LogAttributes.get self, hostname}, Address#{'es' unless addresses.count == 1}: #{addresses * ', '})" }

    return addresses
  end
end
dns_resolver_options() click to toggle source
# File lib/dns/resolve_host/resolve_host.rb, line 56
def dns_resolver_options
  if nameserver_address
    { :nameserver_port => [nameserver] }
  else
    # Resolv::DNS.new expects the options argument to be *nil* when the
    # system nameservers are meant to be used [Nathan Ladd, Mon 2 Jan 2017]
    nil
  end
end
nameserver() click to toggle source
# File lib/dns/resolve_host/resolve_host.rb, line 66
def nameserver
  [nameserver_address, nameserver_port]
end
nameserver_port() click to toggle source
# File lib/dns/resolve_host/resolve_host.rb, line 70
def nameserver_port
  @nameserver_port ||= Defaults.port
end