change Model, non-test

This commit is contained in:
jysperm
2014-03-02 05:34:57 +08:00
parent f9bd3c9cd8
commit f06227d95f
2 changed files with 89 additions and 124 deletions

View File

@@ -10,99 +10,101 @@ module.exports = class Model
throw 'this function must be overrided'
@createModels: (docs) ->
if not _.isArray docs
docs = [].push docs
results = []
if docs.length is 1
results = @create docs[0]
else
for doc in docs
results.push @create doc
results
result = []
for doc in docs
result.push @create doc
@table: ->
"#{@name.toLowerCase()}s"
return result
@collection: ->
db.mongo.collection @table()
return db.mongo.collection "#{@name.toLowerCase()}s"
set: (key, value = null) ->
attrs = {}
if (_.isObject key) is 'object' then attrs = key else attrs[key] = value
@data[k] = v for k, v of attrs
return @
@find: (selector, options, callback) ->
arguments[arguments.length] = null
get: (attr) ->
@data[attr]
@insert: (data, callback = null) ->
@collection().insert data, {w: 1}, (err, docs) =>
@collection().find.apply(this, arguments).toArray (err, result) ->
throw err if err
if callback
results = @createModels docs
callback err, results
@removeById: (id, callback = null)->
@collection().remove {_id: id}, {w: 1},(err,numberOfRemovedDocs)=>
callback @createModels result
@findOne: (selector, options, callback) ->
arguments[arguments.length] = (err, result) ->
throw err if err
if callback
if numberOfRemovedDocs is 1
callback null,numberOfRemovedDocs
else
callback 'there is more then 1 documents with the same id'
callback @create result
remove: (callback = null)->
@constructor.removeById @data._id, callback
@collection().find.apply this, arguments
@update: (selector, documents,opts = {w: 1, multi: true}, callback = null) ->
if _.isFunction opts
callback = opts
opts = {w: 1, multi: true}
throw 'arguments wrong' if not ((_.isObject selector) and (_.isObject documents))
@collection().update selector, documents, opts, (err, numberUpdated) =>
throw err if err
if callback
@find selector, (err, results) =>
throw err if err
results = @createModels doc
callback err, results
@findById: (id, callback) ->
@findOne {_id: id}, callback
update: (documents, callback = null) ->
if _.isFunction documents
callback = documents
documents = @data
@constructor.collection().update {_id: @data._id}, documents, {w: 1}, (err, docs)=>
throw err if err
if callback
@constructor.findById @data._id, (err, results) ->
throw err if err
callback err, results
@insert: (data, options, callback = null) ->
if _.isFunction arguments[arguments.length]
arguments[arguments.length] = (err, result) ->
throw err if err
@find: (selector, options = {}, callback = null) ->
if _.isFunction selector
callback = selector
selector = {}
else if _.isFunction options
callback = options
options = {}
@collection().find(selector, options).toArray (err, docs)=>
throw err if err
if callback
results = @createModels docs
callback err, results
#
# 例:
# User.findone {name: 'wangzi'},(err,result)->
# console.log result
@findOne: (selector, opts = {}, callback) ->
if _.isFunction opts
callback = opts
opts = {}
@collection().findOne selector, opts, (err, doc) ->
throw err if err
result = @create doc
callback err, result
if callback
if _.isArray data
callback @createModels result
else
callback @create result[0]
# id为string
@findById: (id, opts = {}, callback) ->
@findOne {_id: id},opts,callback
@collection().insert.apply this, arguments
@update: (selector, documents, options, callback = null) ->
if _.isFunction arguments[arguments.length]
arguments[arguments.length] = (err, result) ->
throw err if err
if callback
callback result
@collection().update.apply this, arguments
save: (options, callback = null) ->
args = Array.prototype.slice.call arguments, 0
args.unshift @data
if _.isFunction args[args.length]
args[args.length] = (err, result) ->
throw err if err
if callback
callback result
@collection().save.apply this, args
update: (modifiers, options, callback = null) ->
args = Array.prototype.slice.call arguments, 0
args.unshift {_id: @data._id}
if _.isFunction args[args.length]
args[args.length] = (err, result) ->
throw err if err
if callback
callback result
@collection().update.apply this, args
@remove: (selector, options, callback = null) ->
if _.isFunction arguments[arguments.length]
arguments[arguments.length] = (err, result) ->
throw err if err
if callback
callback result
@collection().remove.apply this, arguments
remove: (options, callback = null) ->
args = Array.prototype.slice.call arguments, 0
args.unshift {_id: @data._id}
if _.isFunction args[args.length]
args[args.length] = (err, result) ->
throw err if err
if callback
callback result
@collection().remove.apply this, args

View File

@@ -6,11 +6,7 @@ _ = require 'underscore'
module.exports = class User extends Model
@create: (data) ->
new User data
# 注册新用户
# @callback的第二个参数是新注册的model
# 用法:
# User.register 'wangzi','wangzi@gmail','wangzi',(err,result)->
# console.log result
@register: (username, email, passwd, callback = null) ->
passwd_salt = auth.randomSalt()
@@ -34,8 +30,7 @@ module.exports = class User extends Model
User.findOne
'tokens.token': token
, (err, result) ->
throw err if err
, (result) ->
if result
generateToken callback
else
@@ -68,43 +63,11 @@ module.exports = class User extends Model
@byUsername: (username, callback) ->
@findOne
username: username
, (err, result) ->
throw err if err
, (result) ->
callback result
@byEmail: (email, callback) ->
@findOne
email: email
, (err, result) ->
throw err if err
, (result) ->
callback result
# 添加分组的功能
# @group 可以是数组,也可以是字符串,但是必须在['admin','user','trial']中
# @callback 第一个参数是err,第二个参数是添加分组后的model
# 用法:
# user.addToGroup ['admin','user'],(err,result)->
# console.log result
# 或
# user.addToGroup 'admin',(err,result)->
# console.log result
addToGroup: (group,callback) ->
group = [].push group if not _.isArray group
# for i in group
# throw 'unknown group' if i not in @constructor.validateData['group']
@update $addToSet:
group:
$each:group
,callback
#从分组中移除
# @group [string],必须在['admin','user','trial']中
# @callback 第一个参数是err,第二个参数是移除分组后的model
# 用法:
# user.removeFromGroup 'user',(err,result)->
# console.log result
removeFromGroup: (group,callback) ->
# throw 'group must be string' if not _.isString group
# throw 'unknown group' if group not in @constructor.validateData['group']
@update $pull:
group: group
,callback