Class: Net::DNS::RR::Classes

Inherits:
Object
  • Object
show all
Defined in:
lib/net/dns/rr/classes.rb

Overview

Net::DNS::Classes

This is an auxiliary class to handle Net::DNS::RR class field in a DNS packet.

Constant Summary collapse

CLASSES =

Hash with the values of each RR class stored with the respective id number.

{
  'IN'        => 1,       # RFC 1035
  'CH'        => 3,       # RFC 1035
  'HS'        => 4,       # RFC 1035
  'NONE'      => 254,     # RFC 2136
  'ANY'       => 255,     # RFC 1035
}
@@default =

The default value when class is nil in Resource Records

CLASSES["IN"]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cls) ⇒ Classes

Creates a new object representing an RR class. Performs some checks on the argument validity too. Il cls is nil, the default value is ANY or the one set with Classes.default=



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/net/dns/rr/classes.rb', line 31

def initialize(cls)
  case cls
    when String
      initialize_from_str(cls)
    when Fixnum
      initialize_from_num(cls)
    when nil
      initialize_from_num(@@default)
  end

  if @str.nil? || @num.nil?
    raise ArgumentError, "Unable to create a `Classes' from `#{cls}'"
  end
end

Class Method Details

.default=(str) ⇒ Object

Be able to control the default class to assign when cls argument is nil. Default to IN



71
72
73
74
75
76
77
# File 'lib/net/dns/rr/classes.rb', line 71

def self.default=(str)
  if CLASSES[str]
    @@default = CLASSES[str]
  else
    raise ArgumentError, "Unknown class `#{str}'"
  end
end

.regexpObject

Gives in output the keys from the Classes hash in a format suited for regexps



110
111
112
# File 'lib/net/dns/rr/classes.rb', line 110

def self.regexp
  CLASSES.keys.sort.join("|")
end

.valid?(cls) ⇒ Boolean

Returns whether cls is a valid RR class.

Net::DNS::RR::Classes.valid?("IN")
# => true
Net::DNS::RR::Classes.valid?(1)
# => true
Net::DNS::RR::Classes.valid?("Q")
# => false
Net::DNS::RR::Classes.valid?(256)
# => false
Net::DNS::RR::Classes.valid?(Hash.new)
# => ArgumentError

FIXME: valid? should never raise.

Raises

ArgumentError

if cls isn’t either a String or a Fixnum

Returns:

  • (Boolean)


97
98
99
100
101
102
103
104
105
106
# File 'lib/net/dns/rr/classes.rb', line 97

def self.valid?(cls)
  case cls
    when String
      CLASSES.has_key?(cls)
    when Fixnum
      CLASSES.invert.has_key?(cls)
    else
      raise ArgumentError, "Wrong cls class: #{cls.class}"
  end
end

Instance Method Details

#inspectObject

Returns the class in number format (default for normal use)

FIXME: inspect must return a String.



51
52
53
# File 'lib/net/dns/rr/classes.rb', line 51

def inspect
  @num
end

#to_iObject

Returns the class in numeric format, usable by the pack methods for data transfers.



63
64
65
# File 'lib/net/dns/rr/classes.rb', line 63

def to_i
  @num.to_i
end

#to_sObject

Returns the class in string format, ex. “IN” or “CH” or such a string.



57
58
59
# File 'lib/net/dns/rr/classes.rb', line 57

def to_s
  @str.to_s
end