Normalize Attributes
Sometimes you want to normalize data before saving it to the database like downcasing e-mails, removing spaces and so on. This Rails plugin allows you to do so in a simple way.
Usage
To install:
gem install normalize_attributes
Then on your model:
class User < ActiveRecord::Base
normalize :email, with: :downcase
end
The example above will normalize your :email
attribute on the before_save
callback.
You can specify multiple attributes
normalize :email, :username, with: :downcase
You can use a block
normalize :name do |value|
value.squish
end
You can combine both
normalize :name, with: :downcase do |value|
value.squish
end
The squish
method is the default normalizer for strings. All you need to is
specify the attribute:
normalize :content
The compact
method is the default normalizer for arrays (when using
serialize
method):
class User < ActiveRecord::Base
serialize :preferences, Array
normalize :preferences
end
The normalize
method is aliased as normalize_attributes
,
normalize_attribute
, normalize_attr
, and normalize_attrs
.
You can normalize the attribute before type casting; this is specially useful for normalizing dates and numbers.
class Product
normalize(:price, raw: true) {|v| Money.new(v).to_f }
end
You can also use it with ActiveModel::Model
classes.
class UserForm
include ActiveModel::Model
include ActiveModel::Attributes
include ActiveModel::Validations::Callbacks
include NormalizeAttributes::Callbacks
attribute :username
normalize :username
end
Maintainer
Contributors
Contributing
For more details about how to contribute, please read https://github.com/fnando/normalize_attributes/blob/main/CONTRIBUTING.md.
License
The gem is available as open source under the terms of the MIT License. A copy of the license can be found at https://github.com/fnando/normalize_attributes/blob/main/LICENSE.md.
Code of Conduct
Everyone interacting in the normalize_attributes project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.