Created
November 5, 2016 04:41
-
-
Save dmastag/8e8e22d95c7cb3ef15a4301285bba128 to your computer and use it in GitHub Desktop.
Move ModelRegister and Model into the todo.ts file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// import { Model } from '@mean-expert/model/index'; | |
/** | |
* @module Todo | |
* @description | |
* Write a useful Todo Model description | |
**/ | |
export class ModelRegister { | |
constructor(Model: any, reference: any) { | |
// Register reference | |
Model.model = reference; | |
// Register Hooks | |
Object.keys(Model.hooks).forEach((hook: string) => { | |
switch(Model.hooks[hook].type) { | |
case 'operation': | |
reference.observe(Model.hooks[hook].name, Model[hook]); | |
break; | |
case 'beforeRemote': | |
case 'afterRemote': | |
reference[Model.hooks[hook].type](Model.hooks[hook].name, Model[hook]); | |
break; | |
default: | |
throw new Error('FireLoop: Unexpected hook type'); | |
} | |
}); | |
// Register Remote Methods | |
Object.keys(Model.remotes).forEach( | |
(remote: string) => { | |
reference[remote] = Model[remote]; | |
reference.remoteMethod(remote, Model.remotes[remote]); | |
} | |
); | |
} | |
} | |
export function Model(arg: { hooks: {}, remotes: {} }) { | |
function f(target: any) | |
{ | |
function ff(reference: any) | |
{ | |
target = Object.assign(target, arg); | |
new ModelRegister(target, reference); | |
return new target(reference.app) | |
} | |
return <any>ff; | |
} | |
return f | |
} | |
@Model({ | |
hooks: { | |
beforeSave: { name: 'before save', type: 'operation' } | |
}, | |
remotes: { | |
myRemote: { | |
accepts : { arg: 'id', type: 'string', required: true }, | |
returns : { arg: 'result', type: 'object' }, | |
http : { path: '/:id/my-remote', verb: 'get' } | |
} | |
} | |
}) | |
class Todo { | |
/** | |
* @method constructor | |
* @description | |
* Register model hooks and methods. | |
*/ | |
constructor(app: any) {} | |
// Example Operation Hook | |
static beforeSave(ctx: any, next: Function): void { | |
console.log('Todo: Before Save'); | |
next(); | |
} | |
// Example Remote Method | |
static myRemote(id: string, next: Function): void { | |
next(null, `My Remote Example: ${id}`); | |
} | |
} | |
module.exports = Todo; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment