|
|
|
# = Services Record (SRV)
|
|
|
|
#
|
|
|
|
# Defines services available in the zone, for example, ldap, http etc..
|
|
|
|
#
|
|
|
|
# @see http://www.ietf.org/rfc/rfc2872.txt
|
|
|
|
# @see http://www.zytrax.com/books/dns/ch8/srv.html
|
|
|
|
class SRV < Record
|
|
|
|
has_paper_trail
|
|
|
|
|
|
|
|
validates :name, :hostname => {:allow_underscore => true, :allow_wildcard_hostname => true}
|
|
|
|
validates :content, :format => /\A\d+ \d+ [A-Za-z0-9\-_.]+\z/
|
|
|
|
# RFC 2872
|
|
|
|
validates :prio, :presence => true, :numericality => {
|
|
|
|
:greater_than_or_equal_to => 0,
|
|
|
|
:less_than_or_equal_to => 65535,
|
|
|
|
:only_integer => true
|
|
|
|
}
|
|
|
|
validates :weight, :presence => true, :numericality => {
|
|
|
|
:greater_than_or_equal_to => 0,
|
|
|
|
:less_than_or_equal_to => 65535,
|
|
|
|
:only_integer => true
|
|
|
|
}
|
|
|
|
validates :port, :presence => true, :numericality => {
|
|
|
|
:greater_than_or_equal_to => 0,
|
|
|
|
:less_than_or_equal_to => 65535,
|
|
|
|
:only_integer => true
|
|
|
|
}
|
|
|
|
validates :host, :presence => true, :hostname => {
|
|
|
|
:allow_underscore => true,
|
|
|
|
:allow_wildcard_hostname => true
|
|
|
|
}
|
|
|
|
|
|
|
|
attr_accessor :weight, :port, :host
|
|
|
|
|
|
|
|
before_validation :assemble_content
|
|
|
|
after_initialize :disassemble_content
|
|
|
|
|
|
|
|
def supports_priority?; true end
|
|
|
|
|
|
|
|
protected
|
|
|
|
|
|
|
|
def assemble_content
|
|
|
|
self.content = "#{@weight} #{@port} #{@host}".strip
|
|
|
|
end
|
|
|
|
|
|
|
|
# Update our convenience accessors when the object has changed
|
|
|
|
def disassemble_content
|
|
|
|
@weight, @port, @host = content.split(/\s+/) unless content.blank?
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
Srv = SRV
|