Rails: ActiveRecord::Validations para validar o formato e a veracidade dos e-mail 1

Postado por Herminio em agosto 20, 2009

Todos nós sabemos que o Rails tem validações prontas para serem utilizadas. Isso se dá ao fato da sua classe de herdar do ActiveRecord.

Uma maneira bastante utilizada é validar o formato de um email utilizando expressões regulares e tem o rubular para fazer testes desses matchers. Assim:

class Person < ActiveRecord::Base
    validates_format_of :email,
                        :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
end

Bem, com isso conseguimos nossa validação de um formato mas não está 100% perfeita, pois permite que o usuário possa digitar um email não valido passando apenas no format, por exemplo:

#
# email invalido pois não tem nenhum servidor de email que responda por gmail.com em vez de gmail.com
#
alguma_coisa@gmaio.com

Por isso iremos utilizar o plugin Email-Veracity. E vamos melhorar a nossa validação, basta ir na pagina do Email-Veracity e fazer o download do plugin para a pasta vendor/plugins/ no seu projeto.

require 'email_veracity'

class Person < ActiveRecord::Base
    validates_format_of :email,
                        :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
                        :if => :is_a_valid_email?

    def is_a_valid_email?
        address = EmailVeracity::Address.new("#{self.email}")
        address.valid?
    end
end

Bem, agora podemos verificar se é um email 100% validado, onde fazemos um require no modulo de email_veracity e incluimos um if no validates_format_of que faz uma chamada ao método is_a_valid_email? se esse método retorna true faz a validação se retorna false não valida, podemos notar que o método implicitamente da um return em address.valid? bem é isso espero que tenham gostado.