class GitHubPages::HealthCheck::Resolver

Constants

DEFAULT_RESOLVER_OPTIONS
PUBLIC_NAMESERVERS

Attributes

domain[R]
nameservers[R]

Public Class Methods

default_resolver() click to toggle source
# File lib/github-pages-health-check/resolver.rb, line 18
def default_resolver
  @default_resolver ||= Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS)
end
new(domain, nameservers: :default) click to toggle source

Create a new resolver.

domain - the domain we’re getting answers for nameserver - (optional) a case

# File lib/github-pages-health-check/resolver.rb, line 29
def initialize(domain, nameservers: :default)
  @domain = domain
  @nameservers = nameservers
end

Public Instance Methods

query(type) click to toggle source
# File lib/github-pages-health-check/resolver.rb, line 34
def query(type)
  resolver.query(Addressable::IDNA.to_ascii(domain), type).answer
end

Private Instance Methods

authoritative_nameservers() click to toggle source
# File lib/github-pages-health-check/resolver.rb, line 61
def authoritative_nameservers
  @authoritative_nameservers ||= begin
    self.class.default_resolver.query(domain, Dnsruby::Types::NS).answer.map do |rr|
      next rr.nsdname.to_s if rr.type == Dnsruby::Types::NS
    end.compact
  end
end
resolver() click to toggle source
# File lib/github-pages-health-check/resolver.rb, line 40
def resolver
  @resolver ||= case nameservers
                when :default
                  self.class.default_resolver
                when :authoritative
                  Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS.merge(
                                          :nameservers => authoritative_nameservers
                                        ))
                when :public
                  Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS.merge(
                                          :nameservers => PUBLIC_NAMESERVERS
                                        ))
                when Array
                  Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS.merge(
                                          :nameservers => nameservers
                                        ))
                else
                  raise "Invalid nameserver type: #{nameservers.inspect}"
                end
end