Validates
Collection of useful custom validators for Rails applications, including:
- EmailValidator
- UrlValidator
- SlugValidator
- MoneyValidator
- IpValidator
- AssociationLengthValidator
- AbsolutePathValidator
- UriComponentValidator
- ColorValidator
Note InnValidator and other Russian specific validators could be found at validates_russian gem
Installation
Add this line to your application's Gemfile:
gem 'validates'
Or install it yourself as:
$ gem install 'validates'
Usage
For most of the validators you just want to add this line to your model:
validates :attribute, <validator_underscore>: true
where <validator_underscore>
is an underscored, lowercase form from the validator's name (see the examples section below).
AssociationLengthValidator
Because this is the successor of ActiveModel::Validations::LengthValidator
validator, it inherits all the options of the latter, such as :is
, :minimum
,
:maximum
, etc. Another option, which you may be interested in is :select
option,
which allows you to filter the collection of the associated objects.
Examples
class User < ActiveRecord::Base
validates :email, :email => true
validates :site, :url => true, :allow_blank => true
end
class Company < ActiveRecord::Base
validates :employees,
:association_length => {
:minimum => 1,
:select => ->(employee) { employee.name.in? ["Mike", "John"] }
}
validates :employees, :association_length => { :minimum => 1, :select => :employees_filter }
def employees_filter(employees)
employees.select { |employee| employee.name.in? ["Mike", "John"] }
end
end
class Page < ActiveRecord::Base
validates :slug, :slug => true
end
class Content < ActiveRecord::Base
validates :path, :uri_component => { :component => :ABS_PATH }
end
Contributing
Please see CONTRIBUTING.md for details.
Credits
Originally written by Mikhail Stolbov. Maintained by kaize.
Thank you to all our amazing contributors!
License
validates is Copyright © 2012-2014 Mikhail Stolbov and kaize. It is free
software, and may be redistributed under the terms specified in the LICENSE
file.