Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rubiety/nilify_blanks
Provides a framework for saving incoming blank values as nil in the database in instances where you'd rather use DB NULL than simply a blank string.
https://github.com/rubiety/nilify_blanks
Last synced: 13 days ago
JSON representation
Provides a framework for saving incoming blank values as nil in the database in instances where you'd rather use DB NULL than simply a blank string.
- Host: GitHub
- URL: https://github.com/rubiety/nilify_blanks
- Owner: rubiety
- License: mit
- Created: 2008-08-16T17:35:46.000Z (over 16 years ago)
- Default Branch: master
- Last Pushed: 2023-03-31T13:53:11.000Z (over 1 year ago)
- Last Synced: 2024-08-10T23:18:19.416Z (3 months ago)
- Language: Ruby
- Homepage: http://benhughes.name/
- Size: 117 KB
- Stars: 326
- Watchers: 6
- Forks: 34
- Open Issues: 12
-
Metadata Files:
- Readme: README.rdoc
- Changelog: CHANGELOG.rdoc
- License: LICENSE
Awesome Lists containing this project
README
{}[http://travis-ci.org/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
As of v1.4.0, this gem requires Rails 4 and Ruby 2.2 or higher.
== 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 their 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_validation callback by default, but you can specify a different callback with the :before option. Any callback will work - just first remove the "before_" prefix from the name.
class Post < ActiveRecord::Base
nilify_blanks before: :create
endclass Post < ActiveRecord::Base
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) }
endTo ensure for all applicable content columns:
describe City do
it { should nilify_blanks }
endYou can optionally match on options also:
describe City do
it { should nilify_blanks_for(:name, before: :create) }
enddescribe 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 install
$ rake appraisal test