Noodles, Poodles and More!

    cache-base

    4.0.2 • Public • Published

    cache-base NPM version NPM monthly downloads NPM total downloads Linux Build Status

    Basic object cache with get, set, del, and has methods for node.js/javascript projects.

    Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your ❤️ and support.

    (TOC generated by verb using markdown-toc)

    Install

    Install with npm:

    $ npm install --save cache-base

    Quickstart

    const CacheBase = require('cache-base');
    const app = new CacheBase();
    
    app.set('a.b', 'c');
    
    console.log(app.cache.a);    //=> { b: 'c' }
    console.log(app.cache.a.b);  //=> 'c'
    
    console.log(app.get('a'));   //=> { b: 'c' }
    console.log(app.get('a.b')); //=> 'c'

    More usage examples below.

    API

    Params

    • prop {String|Object}: (optional) Property name to use for the cache, or the object to initialize with.
    • cache {Object}: (optional) An object to initialize with.

    Example

    const app = new CacheBase();

    .set

    Assign value to key. Also emits set with the key and value.

    Params

    • key {String|Array}: The name of the property to set. Dot-notation may be used to set nested properties.
    • value {any}
    • returns {Object}: Returns the instance for chaining.

    Events

    • emits: set with key and value as arguments.

    Example

    app.on('set', function(key, val) {
      // do something when `set` is emitted
    });
    
    app.set('admin', true);
    
    // also takes an object or an array of objects
    app.set({ name: 'Brian' });
    app.set([{ foo: 'bar' }, { baz: 'quux' }]);
    console.log(app);
    //=> { name: 'Brian', foo: 'bar', baz: 'quux' }

    .get

    Return the value of key.

    Params

    • key {String|Array}: The name of the property to get. Dot-notation may be used to set nested properties.
    • returns {any}: Returns the value of key

    Events

    • emits: get with key and value as arguments.

    Example

    app.set('a.b.c', 'd');
    app.get('a.b');
    //=> { c: 'd' }

    .prime

    Create a property on the cache with the given value only if it doesn't already exist.

    Params

    • key {String}: Property name or object path notation.
    • val {any}
    • returns {Object}: Returns the instance for chaining.

    Example

    console.log(app.cache); //=> {}
    app.set('one', { foo: 'bar' });
    app.prime('one', { a: 'b' });
    app.prime('two', { c: 'd' });
    console.log(app.cache.one); //=> { foo: 'bar' }
    console.log(app.cache.two); //=> { c: 'd' }

    .default

    Set a default value to be used when .get() is called and the value is not defined on the cache. Returns a value from the defaults when only a key is passed.

    Params

    • key {String|Array}: The name of the property to set. Dot-notation may be used to set nested properties.
    • value {any}: (optional) The value to set on the defaults object.
    • returns {Object}: Returns the instance for chaining.

    Example

    app.set('foo', 'xxx');
    app.default('foo', 'one');
    app.default('bar', 'two');
    app.default('baz', 'three');
    app.set('baz', 'zzz');
    
    console.log(app.get('foo'));
    //=> 'xxx'
    
    console.log(app.get('bar'));
    //=> 'two'
    
    console.log(app.get('baz'));
    //=> 'zzz'
    
    console.log(app);
    // CacheBase {
    //   cache: { foo: 'xxx', bar: 'two', baz: 'zzz' },
    //   defaults: { foo: 'one', bar: 'two', baz: 'three' } }

    .union

    Set an array of unique values on cache key.

    Params

    • key {String|Array}: The name of the property to union. Dot-notation may be used to set nested properties.
    • value {any}
    • returns {Object}: Returns the instance for chaining.

    Example

    app.union('a.b.c', 'foo');
    app.union('a.b.c', 'bar');
    app.union('a.b.c', ['bar', 'baz']);
    console.log(app.get('a'));
    //=> { b: { c: ['foo', 'bar', 'baz'] } }

    .has

    Return true if the value of property key is not undefined.

    Params

    • key {String|Array}: The name of the property to check. Dot-notation may be used to set nested properties.
    • returns {Boolean}

    Example

    app.set('foo', true);
    app.set('baz', null);
    app.set('bar', undefined);
    
    app.has('foo'); //=> true
    app.has('bar'); //=> true
    app.has('baz'); //=> false

    .hasOwn

    Returns true if the specified property is an own (not inherited) property. Similar to .has(), but returns true if the key exists, even if the value is undefined.

    Params

    • key {String}
    • returns {Boolean}: Returns true if object key exists. Dot-notation may be used to set nested properties.

    Example

    app.set('a.b.c', 'd');
    app.set('x', false);
    app.set('y', null);
    app.set('z', undefined);
    
    app.hasOwn('a');      //=> true
    app.hasOwn('b');      //=> true
    app.hasOwn('c');      //=> true
    app.hasOwn('a.b.c');  //=> true
    app.hasOwn('x');      //=> true
    app.hasOwn('y');      //=> true
    app.hasOwn('z');      //=> true
    app.hasOwn('lslsls'); //=> false

    .del

    Delete one or more properties from the instance.

    Params

    • key {String|Array}: The name of the property to delete. Dot-notation may be used to set nested properties.
    • returns {Object}: Returns the instance for chaining.

    Events

    • emits: del with the key as the only argument.

    Example

    // setup a listener to update a property with a default
    // value when it's deleted by the user
    app.on('del', key => app.set(key, app.default(key)));
    
    app.del(); // delete all properties on the cache
    // or
    app.del('foo');
    // or an array of keys
    app.del(['foo', 'bar']);

    .clear

    Reset the entire cache to an empty object. Note that this does not also clear the defaults object, since you can manually do cache.defaults = {} if you want to reset that object as well.

    Example

    // clear "defaults" whenever the cache is cleared
    app.on('clear', key => (app.defaults = {}));
    app.clear();

    .visit

    Visit (or map visit) the specified method (key) over the properties in the given object or array.

    Params

    • key {String|Array}: The name of the method to visit.
    • val {Object|Array}: The object or array to iterate over.
    • returns {Object}: Returns the instance for chaining.

    .keys

    Gets an array of names of all enumerable properties on the cache.

    Example

    const app = new CacheBase();
    app.set('user', true);
    app.set('admin', false);
    
    console.log(app.keys);
    //=> ['user', 'admin']

    .size

    Gets the length of keys.

    Example

    const app = new CacheBase();
    app.set('user', true);
    app.set('admin', false);
    
    console.log(app.size);
    //=> 2

    Usage examples

    Create an instance of cache-base

    const app = new CacheBase();
    
    app.set('a', 'b');
    app.set('c.d', 'e');
    
    console.log(app.get('a'));
    //=> 'b'
    console.log(app.get('c'));
    //=> { d: 'e' }
    console.log(app);
    //=> CacheBase { a: 'b' }

    Initialize with an object

    const app = new CacheBase({ a: 'b', c: { d: 'e' } });
    
    console.log(app.get('a'));
    //=> 'b'
    console.log(app.get('c'));
    //=> { d: 'e' }
    console.log(app.get('c.d'));
    //=> 'e'
    console.log(app);
    //=> CacheBase { cache: { a: 'b' } }

    Inherit

    class MyApp extends CacheBase {}
    
    const app = new MyApp();
    app.set('a', 'b');
    app.set('c', 'd');
    
    console.log(app.get('a'));
    //=> 'b'
    
    console.log(app);
    //=> MyApp { cache: { a: 'b', c: 'd' } }

    Custom namespace

    Pass a string as the first value to the contructor to define a custom property name to use for the cache. By default values are stored on the cache property.

    const CacheBase = require('cache-base');
    const app = new CacheBase('data', { a: 'b' });
    app.set('c.d', 'e');
    
    // get values
    console.log(app.get('a'));
    //=> 'b'
    console.log(app.get('c'));
    //=> { d: 'e' }
    console.log(app.data);
    //=> { a: 'b', c: { d: 'e' } }
    console.log(app);
    //=> CacheBase { data: { a: 'b', c: { d: 'e' } } }

    About

    Contributing

    Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.

    Running Tests

    Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

    $ npm install && npm test
    Building docs

    (This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)

    To generate the readme, run the following command:

    $ npm install -g verbose/verb#dev verb-generate-readme && verb

    Related projects

    You might also be interested in these projects:

    • base-methods: base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… more | homepage
    • get-value: Use property paths like 'a.b.c' to get a nested value from an object. Even works… more | homepage
    • has-value: Returns true if a value exists, false if empty. Works with deeply nested values using… more | homepage
    • option-cache: Simple API for managing options in JavaScript applications. | homepage
    • set-value: Create nested values and any intermediaries using dot notation ('a.b.c') paths. | homepage
    • unset-value: Delete nested properties from an object using dot notation. | homepage

    Contributors

    Commits Contributor
    67 jonschlinkert
    2 wtgtybhertgeghgtwtg

    Author

    Jon Schlinkert

    License

    Copyright © 2018, Jon Schlinkert. Released under the MIT License.


    This file was generated by verb-generate-readme, v0.6.0, on March 23, 2018.

    Install

    npm i cache-base

    DownloadsWeekly Downloads

    17,324,491

    Version

    4.0.2

    License

    MIT

    Unpacked Size

    25.1 kB

    Total Files

    4

    Last publish

    Collaborators

    • jonschlinkert
    • doowb