UNPKG

tools

Version:

Install for the tools

171 lines (139 loc) 3.5 kB
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(); } }); };