Mongoid::Denormalize
Helper module for denormalizing association attributes in Mongoid models.
This gem is tested on mongoid 6.x and 7.x.
Installation
Add this line to your application's Gemfile:
gem 'mongoid-denormalize'
And then execute:
$ bundle
Or install it yourself as:
$ gem install mongoid-denormalize
Usage
In your model:
# Include the helper method
include Mongoid::Denormalize
# Define your denormalized fields
denormalize :name, :email, from: :user
You need to add inverse_of
to belongs_to
side if relation name is diferent from model:
class Club
...
has_many :members, class_name: 'User'
end
class User
...
belogns_to club, inverse_of: :members
denormalize :name, from: :club
end
Example
class User
include Mongoid::Document
field :name
has_many :books
end
class Book
include Mongoid::Document
include Mongoid::Denormalize
field :title
belongs_to :author
denormalize :name, from: :author
end
>> user = User.create(name: 'User1')
>> book = Book.create(title: 'Title', author: user)
>> book.author_name
"User1"
>> user.update_attributes(name: 'User1.1')
>> book.reload.author_name
"User1.1"
>> new_user = User.create(name: 'User2')
>> book.update_attributes(author: new_user)
>> book.reload.author_name
"User2"
Options of denormalize
as
Enables to customize the final field name
denormalize :name, from: :top, as: :custom_name
It will create the field custom_name
with the content of top.name
. Also support an array:
denormalize :name, :age, from: :top, as: [:custom_name, :custom_age]
prefix
In somes cases it could be interesting to customize the prefix of the final name, instead of using the basic from_field
denormalize :color, :name, from: :top, prefix: :ancestor
It will create the fields ancestor_name
and ancestor_color
with the content of top.name
and top.color
.
child_callback
By default when a child is created the denormalization is executed into before_save
hook.
This option let you change this callback by other, for example:
denormalize :name, from: :top, child_callback: :before_validation
validate :top_name, presence: true
It will denormalize field name
into before_validation
callback so that we can validate it.
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/nosolosoftware/mongoid-denormalize.
License
The gem is available as open source under the terms of the MIT License.