Skip to content

Instantly share code, notes, and snippets.

@artcommacode
Created April 23, 2014 16:45
Show Gist options
  • Save artcommacode/11223027 to your computer and use it in GitHub Desktop.
Save artcommacode/11223027 to your computer and use it in GitHub Desktop.
var _ = require('underscore')
, path = require('path');
var Restify = function(options) {
if (!options) return new Error('Options must be provided');
if (!options.Model) {
return new Error('Options must contain \'Model\'');
} else {
this.Model = options.Model;
}
if (!options.controller) {
return new Error('Options must contain \'controller\'');
} else {
this.controller = options.controller;
}
if (!options.single) {
return new Error('Options must contain \'single\'');
} else {
this.single = options.single;
}
this.views = path.join(this.controller, 'views');
this.render = {
controller: this.controller,
action: ''
};
};
Restify.prototype.index = function (req, res, next, self) {
self.render.action = 'index';
self.Model.find({}).exec(function (error, collection) {
if (error) req.flash('error', error.message);
if (!error && !collection.length) req.flash('warn', self.Model.modelName + 's is empty');
self.render[self.single + 's'] = collection;
res.render(path.join(self.views, 'index'), self.render);
});
};
Restify.prototype.new = function (req, res, next, self) {
self.render.action = 'new';
res.render(path.join(self.views, 'new'), self.render);
};
Restify.prototype.create = function (req, res, next, self) {
var single = new self.Model(req.body[self.single]);
single.save(function (error, single) {
if (error) {
req.flash('error', error.message);
} else {
req.flash('info', self.Model.modelName + ' successfully created.');
}
res.redirect(path.join('/', self.controller));
});
};
Restify.prototype.edit = function (req, res, next, self) {
self.render.action = 'edit';
self.Model.findOne({_id: req.params.id}, function (error, single) {
if (error || !single) {
req.flash('error', error ? error.message : self.Model.modelName + ' not found.');
res.redirect(path.join('/', self.controller));
} else {
self.render[self.single] = single;
res.render(path.join(self.views, 'edit'), self.render);
}
});
};
Restify.prototype.update = function (req, res, next, self) {
self.Model.findOne({_id: req.params.id}, function (error, single) {
if (error || !single) {
req.flash('error', error ? error.message : self.Model.modelName + ' not found.');
res.redirect(path.join('/', self.controller));
} else {
single = _.extend(
single,
req.body[self.single],
{password: req.body[self.single].password || single.password}
);
single.save(function (error, single) {
if (error) {
console.log(error);
req.flash('error', error.message);
} else {
req.flash('info', self.Model.modelName + ' successfully updated.');
}
res.redirect('back');
});
}
});
};
Restify.prototype.delete = function (req, res, next, self) {
self.Model.findOne({_id: req.params.id}, function (error, single) {
if (error || !single) {
req.flash('error', error ? error.message : self.Model.modelName + ' not found.');
res.redirect(path.join('/', self.controller));
} else {
single.remove(function (error, single) {
if (error) {
req.flash('error', error.message);
} else {
req.flash('info', self.Model.modelName + ' successfully deleted.');
}
res.redirect(path.join('/', self.controller));
});
}
});
};
module.exports = Restify;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment