0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Adds repositories and wraps Mongoid methods for Hanami.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0

Runtime

 Project Readme

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.