nodulator
Version:
Nodulator ============
121 lines (92 loc) • 2.98 kB
text/coffeescript
_ = require 'underscore'
async = require 'async'
Account = require './Account'
Nodulator = require '../'
module.exports = (table, config, app, routes, name) ->
class Resource
constructor: (blob) ->
= @.__proto__.constructor.table
for key, value of blob
@[key] = value
Save: (done) ->
exists = ?
.Save , (err, id) =>
return done err if err?
if !exists
= id
Nodulator.bus.emit 'new_' + name,
else
Nodulator.bus.emit 'update_' + name,
done null, @
Delete: (done) ->
.Delete , (err) =>
return done err if err?
Nodulator.bus.emit 'delete_' + name,
done()
# Send to the database
Serialize: ->
res = {}
for key, value of @ when typeof value isnt 'function' and value? and key isnt 'table'
content = value
if content?
res[key] = content
res
_content: (value) ->
# FIXME : test linked objects
if typeof value is 'object' and value.Serialize?
value.Serialize()
# else if typeof value is 'object'
# JSON.stringify value
else
value
ToJSON: ->
: (id, done) ->
.Find id, (err, blob) =>
return done err if err?
.Deserialize blob, done
: (field, value, done) ->
fieldDict = {}
fieldDict[field] = value
.FindWhere '*', fieldDict, (err, blob) =>
return done err if err?
.Deserialize blob, done
# FIXME : test
: (field, value, done) ->
fieldDict = {}
fieldDict[field] = value
.Select 'id', fieldDict, {}, (err, ids) =>
return done err if err?
async.map _(ids).pluck('id'), (item, done) =>
.Fetch item, done
, done
: (done) ->
.Select 'id', {}, {}, (err, ids) =>
return done err if err?
async.map _(ids).pluck('id'), (item, done) =>
.Fetch item, done
, done
# Fetch from database
: (blob, done) ->
res =
done null, new res blob
: (_table, _config, _app, _routes, _name) ->
= _table
= _config
= _app
= _name.toLowerCase()
= @
= _routes
@
: ->
= @
Nodulator.resources[] = @
if ? and .account?
= new Account , , @,
Nodulator.authApp = true
if ? and .abstract
= (name, routes, config) =>
Nodulator.Resource name, routes, config, @
else if ?
= new
Resource._PrepareResource(table, config, app, routes, name)