Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/coin8086/mongo-document
A helper for defining model class for MongoDB Ruby Driver
https://github.com/coin8086/mongo-document
Last synced: 9 days ago
JSON representation
A helper for defining model class for MongoDB Ruby Driver
- Host: GitHub
- URL: https://github.com/coin8086/mongo-document
- Owner: coin8086
- Created: 2015-03-24T06:54:00.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-10-09T04:11:02.000Z (about 8 years ago)
- Last Synced: 2024-10-09T09:18:31.881Z (29 days ago)
- Language: Ruby
- Homepage: http://huiming.io/2016/10/07/mongo-document.html
- Size: 14.6 KB
- Stars: 1
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Mongo Document
A helper for defining model class for MongoDB Ruby Driver.Blog post for it: http://huiming.io/2016/10/07/mongo-document.html
# Why do I need it?
1. You want something simple yet powerfull - The `mongo` Gem seems fit, but you can't build model class like `Mongoid` does with it.
2. However you don't want to turn to Mongoid since it's far away from the simple `mongo`.`mongo-document` is just such a tiny helper for `mongo` that enables you to build model class like `Mongoid` does.
# Installation
```
gem install mongo-document
```# Usage
```ruby
require 'mongo/document'Mongo::Document.establish_connection(
:hosts => ["localhost:27017"],
:database => "mongo-document-test",
)class User
include Mongo::Document
indexes.create_many([
{ :key => { :email => 1 }, :unique => true, :sparse => true },
{ :key => { :type => 1 }},
])
endUser.insert_one(:email => '[email protected]', :type => 'dev', :name => 'Bob')
users = User.find(:email => '[email protected]')
...```
The model class `User` defines a collection named `users`. The mapping from class name to collection name conforms to the behaviour of ActiveRecord. You can override this by explicitly naming the collection like:
```ruby
class User
include Mongo::Document
self.collection_name = 'old_users'
end```
The model class `User` has all public methods defined in `Mongo::Collection` by `mongo` Gem. In fact the former forwards those method calls to the latter. You use the model class just as a `Mongo::Collection` object!
Before you call any methods of a `Mongo::Collection` object, you need to call `Mongo::Document.establish_connection` first. It takes a singel hash parameter, in which a `hosts` or a `uri` field must be provided. The `uri` conforms to the MongoDB document: https://docs.mongodb.com/manual/reference/connection-string/. The other fields of the `spec` hash are optional and documented in: https://docs.mongodb.com/ruby-driver/v2.2/tutorials/ruby-driver-create-client/#ruby-driver-client-options
What's more, if you have a config file `config/database.yml` under the current working directory, it will be read for a call to `Mongo::Document.establish_connection` automatically. That's a Rails/Rack convention. You can disable this behaviour by setting environment variable `MD_NO_AUTO_CONFIG=1`. The format of the file is like:
```yaml
development:
hosts:
-- localhost:27017
database: dev-db
test:
hosts:
-- localhost:27017
database: test-db
```The parameters are documented as mentioned above for `Mongo::Document.establish_connection`.
# Very Light Footprint
You're encouraged to open the single source file to see how slim the implementation is! Total code is less than 100 lines!