Skip to content

Commit

Permalink
REF: load a cache file using the full filepath
Browse files Browse the repository at this point in the history
  • Loading branch information
royriojas committed Aug 30, 2015
1 parent 13947c1 commit b8f68c2
Show file tree
Hide file tree
Showing 3 changed files with 244 additions and 103 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,6 @@ node_modules
# Users Environment Variables
.lock-wscript

test/fixtures/
test/fixtures/
.cache
.cache2
84 changes: 70 additions & 14 deletions cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ var path = require( 'path' );
var fs = require( 'graceful-fs' );
var readJSON = require( 'read-json-sync' );
var write = require( 'write' );
var del = require('del').sync;
var del = require( 'del' ).sync;

var cache = {
/**
Expand All @@ -19,14 +19,28 @@ var cache = {

me._visited = {};
me._persisted = {};
me._pathToFile = cacheDir ? path.resolve(cacheDir, docId) : path.resolve( __dirname, './.cache/', docId );
me._pathToFile = cacheDir ? path.resolve( cacheDir, docId ) : path.resolve( __dirname, './.cache/', docId );

if ( fs.existsSync( me._pathToFile ) ) {
this._persisted = readJSON( me._pathToFile );
me._persisted = readJSON( me._pathToFile );
}
},

/**
* Load the cache from the provided file
* @method loadFile
* @param {String} pathToFile the path to the file containing the info for the cache
*/
loadFile: function ( pathToFile ) {
var me = this;
var dir = path.dirname( pathToFile );
var fName = path.basename( pathToFile );

me.load( fName, dir );
},

keys: function () {
return Object.keys(this._persisted);
return Object.keys( this._persisted );
},
/**
* sets a key to a given value
Expand Down Expand Up @@ -92,45 +106,87 @@ var cache = {
var me = this;

me._prune();
write.sync( me._pathToFile, JSON.stringify( me._persisted) );
write.sync( me._pathToFile, JSON.stringify( me._persisted ) );
},

/**
* remove the file where the cache is persisted
* @method removeCacheFile
* @return {Boolean} true or false if the file was successfully deleted
*/
removeCacheFile: function () {
return del( this._pathToFile, {
force: true
} );
},
/**
* Destroy the file cache and cache content.
* @method destroy
*/
destroy: function () {
var me = this;
me._visited = {};
me._persisted = {};

me.removeCacheFile();
}
};

module.exports = {
/**
* Load a cache identified by the given Id. If the element does not exists, then initialize an empty
* cache storage.
* Alias for create. Should be considered depreacted. Will be removed in next releases
*
* @method load
* @param docId {String} the id of the cache, would also be used as the name of the file cache
* @param [cacheDir] {String} directory for the cache entry
* @returns {cache} cache instance
*/
load: function ( docId, cacheDir ) {
return this.create( docId, cacheDir );
},

/**
* Load a cache identified by the given Id. If the element does not exists, then initialize an empty
* cache storage.
*
* @method create
* @param docId {String} the id of the cache, would also be used as the name of the file cache
* @param [cacheDir] {String} directory for the cache entry
* @returns {cache} cache instance
*/
create: function ( docId, cacheDir ) {
var obj = Object.create( cache );
obj.load( docId, cacheDir );
return obj;
},

createFromFile: function ( filePath ) {
var obj = Object.create( cache );
obj.loadFile( filePath );
return obj;
},
/**
* Clear the cache identified by the given id. Caches stored in a different cache directory can be deleted directly
*
* @method clearCache
* @param docId {String} the id of the cache, would also be used as the name of the file cache
* @param cacheDir {String} the directory where the cache file was written
* @returns {Boolean} true if the cache folder was deleted. False otherwise
*/
clearCacheById: function (docId) {
return del(path.resolve( __dirname, './.cache/', docId ), {
force: true
}).length > 0;
clearCacheById: function ( docId, cacheDir ) {
var filePath = cacheDir ? path.resolve( cacheDir, docId ) : path.resolve( __dirname, './.cache/', docId );
return del( filePath, {
force: true
} ).length > 0;
},
/**
* Remove all cache stored in the cache directory
* @method clearAll
* @returns {Boolean} true if the cache folder was deleted. False otherwise
*/
clearAll: function () {
return del(path.resolve( __dirname, './.cache/'), {
force: true
}).length > 0;
return del( path.resolve( __dirname, './.cache/' ), {
force: true
} ).length > 0;
}
};
Loading

0 comments on commit b8f68c2

Please sign in to comment.