Activity
This is a great feature.
The greatest disadvantage is, that it only works with ActiveRecord and not with ActiveModel.
This means you cannot use it for Form Objects or other, non-ActiveRecord-baked classes.
I opened a feature request. Hopefully, it will be migrated to ActiveModel some day.
See https://discuss.rubyonrails.org/t/proposal-activemodel-normalization/85405
I also wrote a small blog post about how to increase reusability and testability of this.
See https://tobiasmaier.info/posts/2024/03/24/reusability-for-active-record-normalize.html
This would lead to the introduction of normalization pipelines:
class User < ActiveRecord::Base
normalizes :email, with: PipelineNormalizer.new(StripNormalizer, BlankNormalizer, -> { _1&.downcase })
end