Hanami::Mongoid
This simple gem aims to replicate Hanami concept of repositories when using MongoDB as database.
It adds a class Hanami::Mongoid::Repository
which is a substitute for the original Hanami::Repository
class.
Installation
Use thi line to your application's Gemfile instead of hanami-model
:
gem 'hanami-mongoid'
And then execute:
$ bundle install
Usage
When generating a new model, i.e. with
$ hanami generate model book
Simpy delete the db
folder (since MongoDB doesn't care for migrations) and change the following generated files:
# lib/bookshelf/entities/book.rb
class Book < Hanami::Entity
end
# lib/bookshelf/entities/book.rb
class Book
include Mongoid::Document
end
And:
# lib/bookshelf/repositories/book_repository.rb
class BookRepository < Hanami::Repository
end
# lib/bookshelf/repositories/book_repository.rb
class BookRepository < Hanami::Mongoid::Repository
end
This way you can keep separated the repository and entity logic as Hanami suggests. You can call the usual database related methods using the repository:
BookRepository.new.first # #<Book:0x00007fd8b6bea578>
BookRepository.new.find('5af4c697699bbdaad') # #<Book id: 5af4c697699bbdaad>
Or even collection specific methods, for example insert_many
or aggregate
.
And of course you can add custom queries in the repository:
# lib/bookshelf/repositories/book_repository.rb
class BookRepository < Hanami::Mongoid::Repository
def most_recent_for_author(author, limit = 8)
self.where(author: author).order_by(created_at: :desc).limit(limit)
end
end
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/Pluvie/hanami-mongoid.