{Build Status}[http://travis-ci.org/rubiety/nilify_blanks] {Dependency Status}[https://gemnasium.com/rubiety/nilify_blanks] {}[https://codeclimate.com/github/rubiety/nilify_blanks] == Nilify Blanks In Rails when saving a model from a form and values are not provided by the user, an empty string is recorded to the database instead of a NULL as many would prefer (mixing blanks and NULLs can become confusing). This plugin allows you to specify a list of attributes (or exceptions from all the attributes) that will be converted to nil if they are blank before a model is saved. By default, columns set as NOT NULL will not be nilified, since that value cannot be persisted, and it might be better to catch that with a validation. If you want to nilify those columns anyway, you can use `only:` (see below) to explicitly mention them. Only attributes responding to blank? with a value of true will be converted to nil. Therefore, this does not work with integer fields with the value of 0, for example. Usage is best shown through examples: == Requirements Rails 3.0 or later is required (ActiveRecord implementation is very different in Rails 2 and not easy to support both). Due to issues maintaining backwards compatibility, as of v1.2.0 this gem requires ruby 1.9.3 or higher. If you are still using 1.8.7 or 1.9.2, please use the v1.1.0 release. == Install Include the gem using bundler in your Gemfile: gem "nilify_blanks" == Basic Usage # Checks and converts all content fields in the model class Post < ActiveRecord::Base nilify_blanks end # Checks and converts only text fields in the model class Post < ActiveRecord::Base nilify_blanks :types => [:text] end # Checks and converts only the title and author fields class Post < ActiveRecord::Base nilify_blanks :only => [:author, :title] end # Checks and converts all fields except for title and author class Post < ActiveRecord::Base nilify_blanks :except => [:author, :title] end # Checks and converts any fields, regardless of thier null constraint class Post < ActiveRecord::Base nilify_blanks :nullables_only => false end == Global Usage You can also apply nilify_blanks to all models inheriting from ActiveRecord::Base: ActiveRecord::Base.nilify_blanks Or perhaps just a model namespace base class: Inventory::Base.nilify_blanks == Specifying a Callback Checking uses an ActiveRecord before_save filter by default, but you can specify a different filter with the :before option. Any filter will work - just first remove the "before_" prefix from the name. class Post < ActiveRecord::Base nilify_blanks :before => :create end class Post < ActiveRecord::Before nilify_blanks :before => :validation_on_update end == RSpec Matcher First, include the matchers: require "nilify_blanks/matchers" To ensure for a given column: describe City do it { should nilify_blanks_for(:name) } end To ensure for all applicable content columns: describe City do it { should nilify_blanks } end You can optionally match on options also: describe City do it { should nilify_blanks_for(:name, :before => :create) } end describe City do it { should nilify_blanks(:before => :create) } end == Running Tests This gem uses appraisal to test with different versions of the dependencies. See Appraisal first for which versions are tested, then run to test all appraisals: $ rake appraisal test