KimNorgaard / validates_hostname

Extension to ActiveRecord::Base for validating hostnames and domain names
MIT License
38 stars 12 forks source link

= ValidatesHostname

== Description

Extension to ActiveRecord::Base for validating hostnames and domain names.

== Features

== Installation

As plugin (from master)

rails plugin install git://github.com/KimNorgaard/validates_hostname.git

As gem

in Gemfile

gem 'validates_hostname', '~> 1.0'

Run bundler

$ bundle install

== Validations performed

== Options

See also http://www.zytrax.com/books/dns/apa/names.html

== How to use

Simple usage

class Record < ActiveRecord::Base validates :name, :hostname => true end

With options

class Record < ActiveRecord::Base validates :name, :hostname => { OPTIONS } end

== Options and their defaults:

== Examples

Without options

class Record < ActiveRecord::Base validates :host, :hostname => true end

@record = Record.new :name => 'horse' @record.save => true

@record2 = Record.new :name => '_horse' @record2.save => false

With :allow_underscore

class Record < ActiveRecord::Base validates :name, :hostname => { :allow_underscore => true } end

@record3 = Record.new :name => '_horse' @record3.save => true

With :require_valid_tld

class Record < ActiveRecord::Base validates :name, :hostname => { :require_valid_tld => true } end

@record4 = Record.new :name => 'horse' @record4.save => false

@record5 = Record.new :name => 'horse.com' @record5.save => true

With :valid_tlds

class Record < ActiveRecord::Base validates :name, :hostname => { :require_valid_tld, :valid_tlds => %w(com org net) } end

@record6 = Record.new :name => 'horse.info' @record6.save => false

With :allow_numeric_hostname

class Record < ActiveRecord::Base validates :name, :hostname => { :allow_numeric_hostname => false } end

@record7 = Record.new :name => '123.info' @record7.save => false

With :allow_wildcard_hostname

class Record < ActiveRecord::Base validates :name, :hostname => { :allow_wildcard_hostname => true } end

@record8 = Record.new :name => '*.123.info' @record8.save => true

== Extra validators

A few extra validators are included.

=== domainname

=== fqdn

=== wildcard

== Error messages

Using the I18n system to define new defaults:

en: errors: messages: invalid_label_length: "label must be between 1 and 63 characters long" label_begins_or_ends_with_hyphen: "label begins or ends with a hyphen" hostname_label_is_numeric: "unqualified hostname part cannot consist of numeric values only" single_numeric_hostname_label: "hostnames cannot consist of a single numeric label" label_contains_invalid_characters: "label contains invalid characters (valid characters: [%{valid_chars}])" invalid_hostname_length: "hostname must be between 1 and 255 characters long" tld_is_invalid: "tld of hostname is invalid"

The %{valid_chars} signifies the range of valid characters allowed in labels.

It is highly recommended you use the I18n system for error messages.

== Maintainers

== License

Copyright (c) 2009-2011 Kim Norgaard, released under the MIT license