tools
Version:
Install for the tools
171 lines (139 loc) • 3.5 kB
JavaScript
var recline = require("recline"),
_ = require("underscore");
exports.dbName = function(db) {
this.dbname = db;
}
exports.get = function(id, cb){
var members = this.members(id, cb);
this._setup(members,"get",null,null,cb);
return members;
}
exports.save = function(id,body,cb){
var members = this.members(id, cb);
this._setup(members,"save",body,members.validateFields,cb);
return members;
}
exports.create = function(id,body,cb){
var members = this.members(id,cb);
this._setup(members,"create",body,members.validateFormSchema,cb);
return members;
}
exports.update = function(id,body,cb){
var members = this.members(id,cb);
this._setup(members,"update",body,members.validateFormSchema,cb);
return members;
}
exports.delete = function(id,body,cb){
var members = this.members(id,cb);
this._setup(members,"delete",body,members.validateFormSchema,cb);
return members;
}
exports._setup = function(members,type,body,next,cb){
var dbname = this.dbname || "members";
if(body){
if(typeof body === "object"){
members.body = body;
}else{
members.body = JSON.parse(body);
}
}
if(cb){
members.cb = cb;
}else{
members.cb = null;
}
members.db = recline[dbname];
members.type = type;
members.getOr404(process);
}
exports.members = function(id){
var self = this;
if(typeof id != "string") {
throw new Error("id must be string");
}
var
client = new Members();
client.__defineGetter__("id", function(){
return id;
});
return client;
}
var Members = exports.Members = function(){
}
Members.prototype.addResponseData = function(data){
var self = this;
if(typeof data.id == "string" || typeof data._id == "string"){
if (data.id != self.id || data._id != self.id){
//throw new Error("The ids don't match.");
}
}
if(typeof data.rev == "string" || typeof data._rev == "string"){
self.rev = data.rev || data._rev;
}
self.data = data;
}
Members.prototype.getOr404 = function(next){
var self = this;
self.db.getDoc(self.id, function(err,res){
if(err){
self.registerMember();
}else{
// Response to the response with the Member object
self.addResponseData(res);
self.response();
}
});
};
/**
* Registers a members from a primary field
*/
Members.prototype.registerMember = function() {
var self = this;
self.db.saveDoc(self.id, {}, function(er,res){
if(er){
self.error = er;
self.response();
}else{
self.addResponseData(res);
self.response();
}
});
};
Members.prototype.response = function(){
var self = this;
if(self.error){
self.cb && _.bind(self.cb, self, self.error, null)();
}else{
self.cb && _.bind(self.cb,self, null, self.data)();
}
};
Members.prototype.registerFormSubmission = function(formID,formKey){
//console.log("in registerForm Submission");
var self = this;
// if(typeof self.data.forms === "undefined"){
// self.data.forms = [];
// }
// self.data.forms.push( { "formID" : formID, "formKey" : formKey });
//console.log(self);
if(typeof self.data.forms === "object"){
var forms = self.data.forms;
// Adding the count for the amount of times that the user has
// completed this form
if(forms[formID]){
forms[formID] += 1;
}else{
forms[formID] = 1;
}
}else{
self.data.forms = { };
self.data.forms[formID]=1;
}
self.db.saveDoc(self.id,{"_rev":self.rev, "forms" : self.data.forms } ,function(er,res){
if(er){
self.error = er;
self.response();
}else{
self.response();
}
});
};