Source: lib/cache.js

/*jshint laxcomma:true, smarttabs: true, node: true */
'use strict';
/**
 * Provides a simple caching interface to resources
 * @module tastypie/lib/cache
 * @author Eric Satterwhite
 * @since 0.4.0
 * @requires module:tastypie/class
 * @requires module:tastypie/class/options
 * @requires module:tastypie/class/parent
 **/
var Class     = require('./class')
  , Options   = require('./class/options')               // Options
  , Parentize = require('./class/parent')
  , catbox    = require('catbox')
  , Cache
  ;

/**
 * A no op cache type
 * @constructor
 * @alias module:tastypie/lib/cache
 * @param {Object} [options]
 * @param {Number} [options.timeout=60]
 * @param {String} [options.engine=catbox-noop]
 * @param {String} [options.segment=tastypie]
 * @param {String} [options.partition=tastypie]
 * @param {String[]} [options.varies]
 * @param {Object} [options.opts] additional options for the catbox backend
 * @param {object} [options.control]
 */
Cache = new Class({
    mixin:[Options, Parentize]
    ,options:{
        timeout:60
        ,engine: 'catbox-noop'
        ,segment:'tastypie'
        ,partition:'tastypie'
        ,varies:[ 'Accept' ]
        ,opts:{
            expiresIn: 1000 * 60 * 5
        }
        ,control: {
            no_cache:true
        }
    }
    , constructor: function( options ){
        var policy, client;

        this.setOptions( options );
        client = new catbox.Client( require( this.options.engine ),this.options );
        client.start(() => {
            policy = new catbox.Policy(
                this.options.opts
              , client
              , this.options.segment + '-' + (+ new Date()).toString( 32 )
            );
        });

        Object.defineProperty(this, 'client', {
            enumerable: false,
            get:function( ){
                return policy;
            }
        });
    }

    /**
     * Sets a value at a given cache key
     * @method module:tastypie/lib/cache#get
     * @param {String} key A unique key to retrieve a value from
     * @param {Function} [callback] A callback function to be called once the cache key has been set
     */
    , get: function get( key, callback ){
        return this.client.get( key, callback );
    }

    /**
     * Sets a value at a given cache key
     * @method module:tastypie/lib/cache#set
     * @param {String} key A unique ket to set a value at
     * @param {Mixed} value The value to set at the given key
     * @param {Function} [callback] A callback function to be called once the cache key has been set
     */
    , set: function set( key, value, callback ){
        return this.client.set( key, value, 0, callback);
    }
    , cacheable: function cacheable( req ){
        return req.method.toLowerCase() === 'get';
    }

});

Object.defineProperties( Cache.prototype, {
    control: {
        enumerable:false
      , configurable: false
      , get: function(){
            return this.options.control;
        }
    }

});

module.exports = Cache;