Class: Donas

Inherits:
Object
  • Object
show all
Defined in:
lib/donas.rb,
lib/donas/errors.rb,
lib/donas/version.rb

Defined Under Namespace

Classes: BadFormatError

Constant Summary collapse

SEPARATOR =
".".freeze
VERSION =
"0.1.0".freeze

Class Method Summary collapse

Class Method Details

.get_address(domain) ⇒ Resolv::IPv4, Resolv::IPv6

Returns a Resolv::IPv4 or Resolv::IPv6 object for the domain.

Parameters:

  • domain (String)

Returns:

  • (Resolv::IPv4, Resolv::IPv6)

Raises:

  • (Resolv::ResolvError)


40
41
42
43
44
45
46
47
48
# File 'lib/donas.rb', line 40

def self.get_address(domain)
  record = get_record(safe(domain))

  if record.respond_to? :address
    record.address
  else
    get_address(record.name.to_s)
  end
end

.get_record(domain) ⇒ Resolv::DNS::Resource::IN::A, ...

Returns a record with DNS information.

Parameters:

  • domain (String)

Returns:

  • (Resolv::DNS::Resource::IN::A, Resolv::DNS::Resource::IN::CNAME, Resolv::DNS::Resource::IN::TXT)

Raises:

  • (Resolv::ResolvError)


31
32
33
# File 'lib/donas.rb', line 31

def self.get_record(domain)
  resolver.getresource(safe(domain), Resolv::DNS::Resource::IN::ANY)
end

.get_records(domain) ⇒ Array

Returns an Array with Resolv::DNS::Resource::IN::A, Resolv::DNS::Resource::IN::CNAME, Resolv::DNS::Resource::IN::TXT objects.

Parameters:

  • domain (String)

Returns:

  • (Array)


56
57
58
# File 'lib/donas.rb', line 56

def self.get_records(domain)
  resolver.getresources(safe(domain), Resolv::DNS::Resource::IN::ANY)
end

.mx_records(domain) ⇒ Array

Returns an Array with Resolv::DNS::Resource::IN::MX objects.

Parameters:

  • domain (String)

Returns:

  • (Array)


12
13
14
# File 'lib/donas.rb', line 12

def self.mx_records(domain)
  resolver.getresources(safe(domain), Resolv::DNS::Resource::IN::MX)
end

.nameservers(domain) ⇒ Array

Returns an Array with Resolv::DNS::Resource::IN::NS objects.

Parameters:

  • domain (String)

Returns:

  • (Array)


20
21
22
23
24
# File 'lib/donas.rb', line 20

def self.nameservers(domain)
  safe_domain = safe(domain)
  main_domain = safe_domain.split(SEPARATOR).last(2).join(SEPARATOR)
  resolver.getresources(main_domain, Resolv::DNS::Resource::IN::NS)
end

.resolverObject



71
72
73
# File 'lib/donas.rb', line 71

def self.resolver
  Resolv::DNS.new
end

.safe(domain) ⇒ Object

Raises:



75
76
77
78
79
# File 'lib/donas.rb', line 75

def self.safe(domain)
  names = domain.split(SEPARATOR)
  raise BadFormatError.new("#{domain} not valid") if names.size < 2
  domain
end

.summary(domain) ⇒ Hash

Returns a Hash with all the information about the DNS records of a domain

Parameters:

  • domain (String)

Returns:

  • (Hash)


64
65
66
67
68
69
# File 'lib/donas.rb', line 64

def self.summary(domain)
  {
    nameservers: nameservers(domain),
    mx_records: mx_records(domain)
  }
end