code.chingr.com

Collection of my Open Source projects

Download .zip Download .tar.gz View on GitHub

EmailAttribute

ActiveModel attribute serialization using the mail gem.

Usage

Assuming you have a column named address on the email_addresses table, you can easily add email address handling with:

class EmailAddresses < ActiveRecord::Base
  email_address_attribute :address
end

email = EmailAddress.new({
  address: "Jeff Ching <ching.jeff@gmail.com>"
})

email.address
=> "Jeff Ching <ching.jeff@gmail.com>"

email.address = "ching.jeff@gmail.com"
email.address
=> "ching.jeff@gmail.com"

email.address = "some bad email address"
email.address
=> "some bad email address"

You can also specify a column as a email address list type, which is a serialized array of email addresses.

class Email < ActiveRecord::Base
  email_address_list_attribute :to
end

email = Email.new({
  to: "Jeff Ching <ching.jeff@gmail.com>; email@foo.com"
})
email.to
=> "Jeff Ching <ching.jeff@gmail.com>; email@foo.com"

email.to.length 
=> 2

Validating

EmailAttribute provides validation to ActiveModel. To use:

class EmailAddresses < ActiveRecord::Base
  email_address_attribute :address
  validates :address, email: { 
    allow_blank: true,
    message: "is invalid"
  }
end

email = EmailAddress.new({
  address: "some bad email address"
})
email.save
=> false

email.errors.full_messages
=> ["Address is invalid"]

Formatting

PhonyAttribute comes built with a few named formats. You can add your own by adding to the PhonyAttribute::PhoneNumber.named_formats hash. The value can be either an options hash (passed directly to Phony's format) or a callable Proc/lambda that yields the phone number object.

License

This project rocks and uses MIT-LICENSE.