├── .gitignore ├── History.md ├── Makefile ├── Readme.md ├── index.js ├── package.json └── test └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /History.md: -------------------------------------------------------------------------------- 1 | 2 | 1.0.0 / 2014-03-14 3 | ================== 4 | 5 | * change monk as a dev dep 6 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | test: 3 | @./node_modules/.bin/mocha \ 4 | --require should \ 5 | --reporter dot \ 6 | --harmony \ 7 | --bail 8 | 9 | .PHONY: test -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # co-monk 3 | 4 | MongoDB with generator goodness. 5 | 6 | ## Installation 7 | 8 | ``` 9 | $ npm install co-monk 10 | ``` 11 | 12 | ## Setup 13 | 14 | Call `wrap()` on collections to make them generator friendly: 15 | 16 | ```js 17 | var monk = require('monk'); 18 | var wrap = require('co-monk'); 19 | var db = monk('localhost/test'); 20 | 21 | var users = wrap(db.get('users')); 22 | ``` 23 | 24 | ## Example 25 | 26 | Simple example: 27 | 28 | ```js 29 | yield users.remove({}); 30 | 31 | yield users.insert({ name: 'Tobi', species: 'ferret' }); 32 | yield users.insert({ name: 'Loki', species: 'ferret' }); 33 | yield users.insert({ name: 'Jane', species: 'ferret' }); 34 | 35 | var res = yield users.findOne({ name: 'Tobi' }); 36 | res.name.should.equal('Tobi'); 37 | 38 | var res = yield users.find({ species: 'ferret' }); 39 | res.should.have.length(3); 40 | ``` 41 | 42 | Parallel inserts: 43 | 44 | ```js 45 | yield users.remove({}); 46 | 47 | yield [ 48 | users.insert({ name: 'Tobi', species: 'ferret' }), 49 | users.insert({ name: 'Loki', species: 'ferret' }), 50 | users.insert({ name: 'Jane', species: 'ferret' }) 51 | ]; 52 | 53 | var res = yield users.findOne({ name: 'Tobi' }); 54 | res.name.should.equal('Tobi'); 55 | 56 | var res = yield users.find({ species: 'ferret' }); 57 | res.should.have.length(3); 58 | ``` 59 | 60 | # License 61 | 62 | MIT -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var thunkify = require('thunkify'); 7 | 8 | /** 9 | * Methods to wrap. 10 | */ 11 | 12 | var methods = [ 13 | 'drop', 14 | 'update', 15 | 'updateById', 16 | 'remove', 17 | 'count', 18 | 'find', 19 | 'findOne', 20 | 'findById', 21 | 'findAndModify', 22 | 'insert' 23 | ]; 24 | 25 | /** 26 | * Wrap `col`. 27 | * 28 | * @param {Collection} col 29 | * @return {Collection} 30 | * @api public 31 | */ 32 | 33 | module.exports = function(col){ 34 | methods.forEach(function(method){ 35 | col[method] = thunkify(col[method]); 36 | }); 37 | 38 | return col; 39 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "co-monk", 3 | "version": "1.0.0", 4 | "repository": "visionmedia/co-monk", 5 | "description": "mongodb generator goodness for co", 6 | "keywords": ["co", "monk", "generators", "mongo", "mongodb"], 7 | "dependencies": { 8 | "thunkify": "0.0.1" 9 | }, 10 | "devDependencies": { 11 | "mocha": "*", 12 | "should": "*", 13 | "co": "~2.3.0", 14 | "monk": "~0.7.1" 15 | }, 16 | "files": ["index.js"], 17 | "license": "MIT" 18 | } 19 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var monk = require('monk'); 7 | var wrap = require('..'); 8 | var co = require('co'); 9 | var db = monk('localhost/test'); 10 | 11 | var users = wrap(db.get('users')); 12 | 13 | describe('queries', function(){ 14 | it('should work', function(done){ 15 | co(function *(){ 16 | yield users.remove({}); 17 | 18 | yield [ 19 | users.insert({ name: 'Tobi', species: 'ferret' }), 20 | users.insert({ name: 'Loki', species: 'ferret' }), 21 | users.insert({ name: 'Jane', species: 'ferret' }) 22 | ]; 23 | 24 | var res = yield users.findOne({ name: 'Tobi' }); 25 | res.name.should.equal('Tobi'); 26 | 27 | var res = yield users.find({ species: 'ferret' }); 28 | res.should.have.length(3); 29 | 30 | })(done); 31 | }) 32 | }) --------------------------------------------------------------------------------