Skip to content

Instantly share code, notes, and snippets.

@dmastag
Created November 5, 2016 04:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmastag/8e8e22d95c7cb3ef15a4301285bba128 to your computer and use it in GitHub Desktop.
Save dmastag/8e8e22d95c7cb3ef15a4301285bba128 to your computer and use it in GitHub Desktop.
Move ModelRegister and Model into the todo.ts file
// 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