Louche adds common validators for ActiveModel/ActiveRecord classes.
Add this line to your application's Gemfile:
gem 'louche'
Louche provides a few validators to use in your ActiveModel/ActiveRecord classes. You can use all validators with a lowercase
symbolized version of their prefix as the key and true
as the value. For example, for EmailValidator
:
class User < ApplicationRecord
validates :email, email: true
end
Optionally, if you wish to customize the default options, you can pass a hash as the value:
class User < ApplicationRecord
validates :email, email: { regex: /^.*@.*$/, message: :blank }
end
Here are the validators that Louche provides along with their respective options:
EmailValidator
class User < ApplicationRecord
validates :email, email: true
end
User.new(email: '[email protected]').valid? # => true
User.new(email: 'foo@example').valid? # => false
Option | Description |
---|---|
:regex |
The regex used to validate the email (default: /A([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})z/i ) |
:message |
The ActiveRecord message added to the record errors (default: :invalid_email ) |
URLValidator
class User < ApplicationRecord
validates :website, url: true
end
User.new(website: 'http://example.com').valid? # => true
User.new(website: 'example.$$$').valid? # => false
Option | Description |
---|---|
:schemes |
The URI schemes to allow (default: %w(http https) ) |
:message |
The ActiveRecord message added to the record errors (default: :invalid_url ) |
PhoneNumberValidator
class User < ApplicationRecord
validates :phone_number, phone_number: true
end
user = User.new(phone_number: '514 555-2525')
user.valid? # => true
user.phone_number # => '5145552525'
user = User.new(phone_number: '555-2525')
user.valid? # => false
user.phone_number # '5552525'
Option | Description |
---|---|
:regex |
The regex used to validate the number (default: /Ad{10,}z/ ) |
:cleanup_regex |
The regex used to validate clean the input before validating/saving it (default: /[^d]/ ) |
:message |
The ActiveRecord message added to the record errors (default: :invalid_phone_number ) |
PostalCodeValidator
class User < ApplicationRecord
validates :postal_code, postal_code: true
end
user = User.new(postal_code: 'G0R 2T0')
user.valid? # => true
user.postal_code # => 'G0R2T0'
user = User.new(postal_code: 'L -0- L')
user.valid? # => false
user.postal_code # => 'L0L'
Option | Description |
---|---|
:regex |
The regex used to validate the code (default: /A[a-z]d[a-z]d[a-z]dz/i ) |
:cleanup_regex |
The regex used to validate clean the input before validating/saving it (default: /[^a-z0-9]/i ) |
:message |
The ActiveRecord message added to the record errors (default: :invalid_postal_code ) |
ArrayValidator
class Tag < Struct.new(:name)
def valid?
name.present?
end
end
class User < ApplicationRecord
validates :tags, array: true
def tags=(tags)
super tags.map { |tag| Tag.new(tag) }
end
end
User.new(tags: ['food', 'beer', 'code']).valid? # => true
User.new(tags: ['food', '', 'code']).valid? # => false
Option | Description |
---|---|
:message |
The ActiveRecord message added to the record errors (default: :invalid_array ) |
:validity_method |
The method that will be sent to each array item (default: :valid? ) |
RgbHexValidator
class Flag < ApplicationRecord
validates :color, rgb_hex: true
end
flag = Flag.new(color: '#ff0000')
flag.valid? # => true
flag.color # => '#ff0000'
flag = Flag.new(color: '#zzzzzz')
flag.valid? # => false
flag.color # => '#'
Option | Description |
---|---|
:regex |
The regex used to validate the code (default: `/A#([a-f0-9]{6} |
:cleanup_regex |
The regex used to validate clean the input before validating/saving it (default: /[^#a-f0-9]/i ) |
:message |
The ActiveRecord message added to the record errors (default: :invalid_rgb_hex ) |
Louche uses standard ActiveRecord messages. Here’s what your
config/locales/activerecord.en.yml
file could look like:
en:
errors:
messages:
invalid_email: is not a valid email address
invalid_url: is not a valid URL
invalid_phone_number: is not a valid phone number
invalid_postal_code: is not a valid postal code
invalid_array: contains invalid items
invalid_rgb_hex: is not a valid color
Louche
is © 2014-2015 Mirego and may be freely distributed under the New BSD license. See the LICENSE.md
file.
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We're a team of talented people who imagine and build beautiful Web and mobile applications. We come together to share ideas and change the world.
We also love open-source software and we try to give back to the community as much as we can.