code.dunae.ca

validates_email_format_of Rails plugin and Ruby gem

Validate e-mail addreses against RFC 2822 and RFC 3696.

Updated January 3, 2009 to work independent of Active Record courtesy of Denis Ahearn at Riverock Technologies.

Updates to plugins, gems and other code will be announced at http://twitter.com/TheCHANGELOG. Follow along so you can receive updates without having to check back. You can also subscribe to the Atom feed.

You may want to browse the source on Github.

Installation

Installing as a gem:

  gem sources -a http://gems.github.com
  gem install alexdunae-validates_email_format_of

Installing as a Ruby on Rails plugin:

  ./script/plugin install http://github.com/alexdunae/validates_email_format_of.git

Options

:message
String. A custom error message (default is: " does not appear to be a valid e-mail address").
:on
Symbol. Specifies when this validation is active (default is :save, other options :create, :update).
:allow_nil
Boolean. Allow nil values (default is false).
:check_mx
Boolean. Check for a valid MX record (default is false).
:allow_blank
Boolean. Allow blank values (default is false).
: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.
:unless
Just like :if.

Usage

 class Person < ActiveRecord::Base
   validates_email_format_of :email
 end

As of version 1.4, it’s possible to run e-mail validation tests (including MX checks) without using ActiveRecord or even touching a database. The validate_email_format method will return nil on a valid e-mail address or an array of error messages for invalid addresses.

  results = ValidatesEmailFormatOf::validate_email_format(email, options)

  if results.nil?
    # success!
  else
    puts results.join(', ')
  end

Testing

To execute the unit tests run:

rake test

The unit tests for this plugin use an in-memory sqlite3 database.

Contact

Written by Alex Dunae (dunae.ca, e-mail 'code' at the same domain), 2006-08.

Thanks to Francis Hwang at Diversion Media for creating the 1.1 update.

Thanks to Travis Sinnott for creating the 1.3 update.

Thanks to Denis Ahearn at Riverock Technologies for creating the 1.4 update.