Class: ActiveModel::Validations::HostnameValidator
- Inherits:
-
EachValidator
- Object
- EachValidator
- ActiveModel::Validations::HostnameValidator
- Defined in:
- lib/validators/validates_hostname_format_of.rb
Instance Method Summary collapse
- #valid_hostname?(host) ⇒ Boolean
- #valid_label?(label) ⇒ Boolean
- #valid_tld?(host) ⇒ Boolean
-
#validate_each(record, attribute, value) ⇒ Object
Rules taken from www.zytrax.com/books/dns/apa/names.html.
Instance Method Details
#valid_hostname?(host) ⇒ Boolean
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/validators/validates_hostname_format_of.rb', line 14 def valid_hostname?(host) host = host.to_s uri = URI(host) uri.host.nil? && uri.scheme.nil? && uri.fragment.nil? && uri.query.nil? && uri.path == host && host.split('.').all? {|label| valid_label?(label) } && host.size <= 255 && valid_tld?(host) rescue URI::InvalidURIError false end |
#valid_label?(label) ⇒ Boolean
30 31 32 33 34 |
# File 'lib/validators/validates_hostname_format_of.rb', line 30 def valid_label?(label) !label.start_with?('-') && !label.match(/\A\d+\z/) && label.match(/\A[a-z0-9-]{1,63}\z/i) end |
#valid_tld?(host) ⇒ Boolean
36 37 38 39 40 41 42 |
# File 'lib/validators/validates_hostname_format_of.rb', line 36 def valid_tld?(host) return true unless [:tld] return false if host.split('.').size == 1 tld = host[/\.(.*?)$/, 1].to_s.downcase UrlValidator.tlds.include?(tld) end |
#validate_each(record, attribute, value) ⇒ Object
Rules taken from www.zytrax.com/books/dns/apa/names.html
5 6 7 8 9 10 11 12 |
# File 'lib/validators/validates_hostname_format_of.rb', line 5 def validate_each(record, attribute, value) return if valid_hostname?(value.to_s) record.errors.add(attribute, :invalid_hostname, :message => [:message], :value => value ) end |