inspired-server
Version:
A RESTful entity server
74 lines (58 loc) • 1.7 kB
text/coffeescript
Field = require './field'
hal = require 'hal'
Q = require 'q'
class _Base
: {}
constructor: (data) ->
# DB
._db = new App.DB unless ._db?
# Instantiate fields as static property
unless ._fields[.name]?
._fields[.name] = {}
for prop of @ when @[prop] instanceof Field._Base
._fields[.name][prop] = @[prop]
@[prop] = ._fields[.name][prop].default()
# Set key/values
data
_setProperties: (data) ->
@[key] = val for key, val of data
_tableName: ->
unless ._tableName?
._tableName = (name for name, entityClass of ._db.registry() when entityClass is )
._tableName
class Default extends _Base
uuid: new Field.Uuid()
fields: ->
._fields[.name]
load: (uuid) ->
._db.adapter().getOne(, uuid)
.then (result) =>
@._setProperties result
validate: ->
errors = (column for column, field of when not field.isValid(@[column]))
{
errors: errors
isValid: !errors.length
}
save: ->
deferred = Q.defer()
validation =
if validation.isValid is true
._db.adapter().saveOne(, , @)
.then (result) =>
= result.uuid if result.uuid
deferred.resolve result
.catch (e) =>
deferred.reject e
else
deferred.reject validation
return deferred.promise
delete: ->
._db.adapter().deleteOne(, )
.then ->
delete @
module.exports = {
_Base: _Base
Default: Default
}