# See #A # = IPv4 Address Record (A) # # Defined in RFC 1035. Forward maps a host name to IPv4 address. The only # parameter is an IP address in dotted decimal format. The IP address in not # terminated with a '.' (dot). Valid host name format (a.k.a 'label' in DNS # jargon). If host name is BLANK (or space) then the last valid name (or label) # is substituted. # # Obtained from http://www.zytrax.com/books/dns/ch8/a.html # class A < Record has_paper_trail ignore: [:content, :updated_at] validates :name, :hostname => {:allow_underscore => true, :allow_wildcard_hostname => true} validates :content, :presence => true, :ip => {:ip_type => :v4} # Only accept valid IPv4 addresses attr_accessor :host_domain validates :host_domain, :inclusion => {:in => Settings.host_domains}, :allow_blank => true validates :name, :length => {:minimum => 4}, :uniqueness => {:scope => [:domain_id, :type]}, :if => :host? validate do if host? && Settings.protected_hostnames.any? {|hn| name =~ /^#{hn}/i} errors[:name] << "cannot be used, please try another" end end before_validation do if host_domain.present? && Settings.host_domains.include?(host_domain) self.domain_id = Domain.find_by_name(host_domain).try(:id) end end def host?; domain.present? && Settings.host_domains.include?(domain.name) end end