Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Adds the ability to normalize and format attributes cleanly with code blocks
Ruby
branch: master

This branch is 2 commits ahead, 121 commits behind mdeering:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
rails
spec
MIT-LICENSE
README.textile
Rakefile
install.rb
uninstall.rb
version.yml

README.textile

Attribute Normalizer

I like to keep my Active Record models as strict as possible but I also like the further layer of protection/restriction setting database columns to not allow NULL adds. Normalizing to nil helps enforce this better by not letting ’’ slip through the cracks and I can still prevent those who insist on direct DB access from entering in shitty data as much as possible.

Install as a Ruby gem

TODO: gem-er-a-size this!

Install as a Ruby on Rails Plugin

The traditional way.

./script/plugin install git://github.com/mdeering/attribute_normalizer.git

or the old-school but still c00l way!

piston import git://github.com/mdeering/attribute_normalizer.git vendor/plugins/attribute_normalizer

or for all you hip gitsters.

git submodule add git://github.com/mdeering/attribute_normalizer.git vendor/plugins/attribute_normalizer git submodule init

Usage

This is eager loaded into Active Record.


class Klass < ActiveRecord::Base
  
  # Can take an array of attributes if you want
  normalize_attributes :first_name, :last_name
  
  normalize_attributes :home_phone_number, :office_phone_number_ do |value|
    return nil unless value.is_a?(String)
    value.gsub(/\W/, '').gsub(/^1/, '')
  end
  
end

object = Klass.new
# Blank normalizes to nil
object.first_name = ''
object.first_name # => nil

# Whitespace is cleaned up 
object.last_name = "\tDeering\n"
object.last_name # => 'Deering'

# Your given block will be executed to normalize
object.home_phone_number = '+1 (555) 123.4567'
object.home_phone_number # => '5551234567'

Credits

Original module code and concept was taken from Dan Kubb during a project we worked on together. I found that I was consistently using this across all my projects so I wanted to plugin-er-size and gem this up for easy reuse.

Something went wrong with that request. Please try again.