module ActiveRecord
module Validations
module ClassMethods
# Validates whether the value of the specified attribute is a valid email address
#
# class User < ActiveRecord::Base
# validates_email_format_of :email, :on => :create
# end
#
# Configuration options:
# * message - A custom error message (default is: " does not appear to be a valid e-mail address")
# * on Specifies when this validation is active (default is :save, other options :create, :update)
# * if - Specifies a method, proc or string to call to determine if the validation should
# occur (e.g. :if => :allow_validation, or :if => Proc.new { |user| user.signup_step > 2 }). The
# method, proc or string should return or evaluate to a true or false value.
def validates_email_format_of(*attr_names)
configuration = { :message => ' does not appear to be a valid e-mail address',
:on => :save,
:with => /^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/i }
configuration.update(attr_names.pop) if attr_names.last.is_a?(Hash)
validates_each(attr_names, configuration) do |record, attr_name, value|
record.errors.add(attr_name, configuration[:message]) unless value.to_s =~ configuration[:with]
end
end
end
end
end