Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Adds the ability to normalize and format attributes cleanly with code blocks

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 rails
Octocat-spinner-32 spec
Octocat-spinner-32 MIT-LICENSE
Octocat-spinner-32 README.textile
Octocat-spinner-32 Rakefile
Octocat-spinner-32 install.rb
Octocat-spinner-32 uninstall.rb
Octocat-spinner-32 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.