      1 var comb = require("comb"),
      2         hitch = comb.hitch,
      3         dataset = require("../dataset"),
      4         Promise = comb.Promise,
      5         PromiseList = comb.PromiseList,
      6         Hive = require("hive-cache");
      7
      8
      9 var hive;
     10 var i = 0;
     11
     12 var LOGGER = comb.logging.Logger.getLogger("moose.plugins.CachePlugin");
     13 /**
     14  * @class Adds in memory caching support for models.
     15  *
     16  * @example
     17  *
     18  * var MyModel = moose.addModel("testTable", {
     19  *     plugins : [moose.plugins.CachePlugin];
     20  * });
     21  *
     22  * //NOW IT WILL CACHE
     23  *
     24  * @name CachePlugin
     25  * @memberOf moose.plugins
     26  */
     27 exports.CachePlugin = comb.define(null, {
     28     instance : {
     29
     30         constructor : function() {
     31             if(!hive) hive = new Hive();
     32             this.super(arguments);
     33             this.post("load", this._postLoad);
     34         },
     35
     36         reload : function() {
     37             var ret = new Promise();
     38             this.super(arguments).then(hitch(this, function(m) {
     39                 cache.replace(m.table + m.primaryKeyValue, m);
     40                 ret.callback(m);
     41             }), hitch(ret, "errback"));
     42             return ret;
     43         },
     44
     45         save : function() {
     46             return this.super(arguments);
     47         },
     48
     49         _postLoad : function(next) {
     50             hive.replace(this.tableName + this.primaryKeyValue, this);
     51             next();
     52         },
     53
     54         update : function(options, errback) {
     55             var ret = new Promise();
     56             this.super(arguments).then(hitch(this, function(val) {
     57                 hive.remove(this.table + this.primaryKeyValue, val);
     58                 ret.callback(val);
     59             }), hitch(ret, "errback"));
     60             return ret;
     61         },
     62
     63         remove : function(errback) {
     64             hive.remove(this.primaryKeyValue);
     65             var ret = this.super(arguments);
     66             return ret;
     67         },
     68
     69
     70         getters : {
     71             tableName : function() {
     72                 return this.table.tableName;
     73             }
     74         }
     75
     76     },
     77
     78     static : {
     79
     80         findById : function(id) {
     81             var cached = hive.get(this.tableName + id);
     82             if (!cached) {
     83                 LOGGER.debug("not CAHCED");
     84                 return this.super(arguments);
     85             } else {
     86                 var ret = new Promise();
     87                 ret.callback(cached);
     88                 return ret;
     89             }
     90         }
     91     }
     92 });