Files
RootPanel/core/model/Model.coffee
2014-02-19 20:19:36 +08:00

66 lines
1.7 KiB
CoffeeScript

MongoClient = require('mongodb').MongoClient
ObjectID = require('mongodb').ObjectID;
_ = require 'underscore'
assert = require 'assert'
db = require '../db'
module.exports = class Model
constructor: (@data) ->
@create : ->
throw 'this function must be overrided'
@table : ->
"#{@name.toLowerCase()}s"
@collection: (db)->
db.collection @table()
set : (key, value = null) ->
if (_.isObject key) is 'object' then attrs = key else attrs[key] = value
@data[k] = v for k, v of attrs
@
get : (attr)->
@data[attr]
save : (data,callback)->
db.open (err,db) =>
@collection(db).insert data,{},(err,docs) =>
assert.equal null,err
db.close()
if callback
results = []
if docs.length is 1
for doc in doc
results.push @create doc
else
results = @create docs[0]
callback err,results
@find : (data,opts = {},callback = null)->
if _.isFunction data
callback = data
data = {}
else if _.isFunction opts
callback = opts
opts = {}
db.open (err,db) =>
@collection(db).find(data,opts).toArray (err,docs)=>
assert.equal null,err
db.close()
if callback
results = []
if docs.length is 1
results = @create docs[0]
else
for doc in docs
results.push @create doc
callback err,results
@findById: (id, callback = null) ->
throw 'id must be string' if !_.isString id
db.open (err,db) =>
@collection().findOne {_id: new ObjectID id}, (err, result) =>
throw err if err
db.close()
result = @create result
if callback
callback err,result