No release in over a year
Normalize your ActiveRecord models' attributes
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 5.2, < 8
>= 5.2, < 8
 Project Readme

ActiveRecord::Normalizations

ActiveRecord::Normalizations gives you the possibility to transform, or normalize, your attributes before they are saved in your database. It behaves mostly like validations, applying normalizations in methods like save or update but being totally skipped when methods touching directly the database like update_columns.

Compatibility

Ruby

Currently supported Ruby versions: MRI 2.5, 2.6, 2.7, 3.0. JRuby hasn't been tested but since it's purely Ruby, it should work fine with it.

Rails

Any version of ActiveRecord >= 4.2. It is tested against AR 5.2, 6.0, 6.1

Installation

gem 'activerecord-normalizations'

Usage

ActiveRecord::Normalizations is included in ActiveRecord::Base by default so you can directly use the normalize method in your models:

class User
  normalizes :firstname, spaces: true, text_transform: :capitalize
end

The first argument is the attribute you want to normalize, and each subsequent option are the normalizers that are going to me applied to it, each with their option (much like ActiveRecord'd validations).

Normalizers

The gem comes with the following normalizers:

Spaces

Available mode: :leading, :trailing, :both (default)

This normalizer removes leading, trailing or both spaces from your attribute. It uses Ruby's strip methods family under the hood.

TextTransform

Available mode: :capitalize, :lowercase, :uppercase, :word_capitalize

This normalizer transforms your string attribute per the given mode:

  • capitalize, lowercase and uppercase are pretty straight-forward and use Ruby's equivalent methods
  • word_capitalize will capitalize every word of a string, a word being 1 or more alpha characters. Useful when dealing with foreign names like Jean-Michel or O'Connor.

Custom Normalizer

You can also define your own normalizers. They should be classes following the naming format <option_name>Normalizer, initialized with an options hash and responding to the call method with a single argument, the attribute to normalize.

For example, if you wanted to reverse your attribute you could do create the following class

# app/normalizers/reverse_normalizer.rb
class ReverseNormalizer
  def initialize(*args)
  end

  def call(attr)
    attr.reverse
  end
end

then use it in your model like any other normalizer

# app/models/user.rb
class User < ApplicationRecord
  normalizes :name, reverse: true
end

You can check the normalizers folder to see how included normalizers are done.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/ccocchi/activerecord-normalizations. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the ActiveRecord::Normalizations project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.