fnando/normalize_attributes

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Normalize Attributes

[![Tests](https://github.com/fnando/normalize_attributes/workflows/ruby-tests/badge.svg)](https://github.com/fnando/normalize_attributes)
[![Code Climate](https://codeclimate.com/github/fnando/normalize_attributes/badges/gpa.svg)](https://codeclimate.com/github/fnando/normalize_attributes)
[![Gem](https://img.shields.io/gem/v/normalize_attributes.svg)](https://rubygems.org/gems/normalize_attributes)
[![Gem](https://img.shields.io/gem/dt/normalize_attributes.svg)](https://rubygems.org/gems/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:

```ruby
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

```ruby
normalize :email, :username, with: :downcase
```

You can use a block

```ruby
normalize :name do |value|
  value.squish
end
```

You can combine both

```ruby
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:

```ruby
normalize :content
```

The `compact` method is the default normalizer for arrays (when using
`serialize` method):

```ruby
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.

```ruby
class Product
  normalize(:price, raw: true) {|v| Money.new(v).to_f }
end
```

You can also use it with `ActiveModel::Model` classes.

```ruby
class UserForm
  include ActiveModel::Model
  include ActiveModel::Attributes
  include ActiveModel::Validations::Callbacks
  include NormalizeAttributes::Callbacks

  attribute :username
  normalize :username
end
```

## Maintainer

- [Nando Vieira](https://github.com/fnando)

## Contributors

- https://github.com/fnando/normalize_attributes/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](https://opensource.org/licenses/MIT). 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](https://github.com/fnando/normalize_attributes/blob/main/CODE_OF_CONDUCT.md).