1 var comb = require("comb"), 2 hitch = comb.hitch, 3 Promise = comb.Promise, 4 PromiseList = comb.PromiseList, 5 ManyToOne = require("./manyToOne"); 6 7 /** 8 * @class Class to define a manyToOne association. 9 * 10 * </br> 11 * <b>NOT to be instantiated directly</b> 12 * Its just documented for reference. 13 * 14 * @name MayToOne 15 * @augments ManyToOne 16 * 17 **/ 18 module.exports = exports = comb.define(ManyToOne, { 19 instance : { 20 21 //override 22 //@see _Association 23 _fetchMethod : "one", 24 25 //override 26 //@see _Association 27 _setter : function(val, self) { 28 var loadedKey = self.loadedKey, name = self.name; 29 if (!(val instanceof self.model)) { 30 val = new self.model(val); 31 } 32 if (this.isNew) { 33 this["_" + name] = val; 34 this[loadedKey] = true; 35 } else { 36 //set my foreign key 37 val[self.rightKey] = this[self.leftKey]; 38 this["_" + name] = val; 39 this[loadedKey] = true; 40 } 41 }, 42 43 //override 44 //@see _Association 45 _postSave : function(next, self) { 46 if (self.filter && self.isEager()) { 47 this[self.name].then(hitch(this, next)); 48 } else { 49 var loadedKey = self.loadedKey, name = self.name; 50 if (this[loadedKey] && this["_" + name]) { 51 var val = this["_" + name]; 52 val[self.rightKey] = this[self.leftKey]; 53 val.save().then(hitch(this, next)); 54 } else { 55 next(); 56 } 57 } 58 }, 59 60 //override 61 //@see _Association 62 _preRemove : function(next, self) { 63 if (self.filter) next(); 64 var loadedKey = self.loadedKey, name = self.name; 65 if (!this[loadedKey]) { 66 this[name].then(hitch(this, function(value) { 67 if (value) { 68 value.remove(); 69 } 70 next(); 71 })); 72 } else { 73 var value = this[name]; 74 value.remove(); 75 next(); 76 } 77 78 } 79 } 80 });