-
Notifications
You must be signed in to change notification settings - Fork 29
/
rest.js
82 lines (67 loc) · 1.55 KB
/
rest.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// (c) 2012 Tom Blobaum
// MIT Licensed
// For all details and documentation:
// https://github.com/tblobaum/mongoose-troop
// REST
// ----
var dataToObjects = require(__dirname +'/../helpers').dataToObjects
function rest (schema, options) {
options = options || {}
// Options
var pagination = options.pagination || {}
schema.static({
get: get
, post: update
, put: update
, del: del
, search: search
, bulk: search
})
if (!schema.statics.paginate) {
schema.plugin(require(__dirname +'/pagination'), pagination)
}
function get (id, fn) {
this.findById(id, function (err, doc) {
fn(err, dataToObjects(doc))
})
return this
}
function update (data, fn) {
var query = {}
data._id && (query._id = data._id)
delete data._id
this.update(query, data, {
upsert: true
}, function (err, count) {
if (err || !count) return fn(err, false)
fn(null, true)
})
return this
}
function del (id, fn) {
this.findById(id, function (err, doc) {
if (err || !doc) return fn(err, false)
doc.remove(function (err, doc) {
if (err) return fn(err, false)
fn(null, true)
})
})
return this
}
function search (query, fn) {
var query = query || {}
, limit = query.limit
, page = query.page
delete query.limit
delete query.page
this.paginate({
query: query
, limit: limit
, page: page
}, function (err, docs) {
fn(err, dataToObjects(docs))
})
return this
}
}
module.exports = rest