README.md
  1  # cache-base [![NPM version](https://img.shields.io/npm/v/cache-base.svg?style=flat)](https://www.npmjs.com/package/cache-base) [![NPM monthly downloads](https://img.shields.io/npm/dm/cache-base.svg?style=flat)](https://npmjs.org/package/cache-base) [![NPM total downloads](https://img.shields.io/npm/dt/cache-base.svg?style=flat)](https://npmjs.org/package/cache-base) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/cache-base.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/cache-base)
  2  
  3  > Basic object cache with `get`, `set`, `del`, and `has` methods for node.js/javascript projects.
  4  
  5  ## Install
  6  
  7  Install with [npm](https://www.npmjs.com/):
  8  
  9  ```sh
 10  $ npm install --save cache-base
 11  ```
 12  
 13  ## Usage
 14  
 15  ```js
 16  var Cache = require('cache-base');
 17  
 18  // instantiate
 19  var app = new Cache();
 20  
 21  // set values
 22  app.set('a', 'b');
 23  app.set('c.d', 'e');
 24  
 25  // get values
 26  app.get('a');
 27  //=> 'b'
 28  app.get('c');
 29  //=> {d: 'e'}
 30  
 31  console.log(app.cache);
 32  //=> {a: 'b'}
 33  ```
 34  
 35  **Inherit**
 36  
 37  ```js
 38  var util = require('util');
 39  var Cache = require('cache-base');
 40  
 41  function MyApp() {
 42    Cache.call(this);
 43  }
 44  util.inherits(MyApp, Cache);
 45  
 46  var app = new MyApp();
 47  app.set('a', 'b');
 48  app.get('a');
 49  //=> 'b'
 50  ```
 51  
 52  **Namespace**
 53  
 54  Define a custom property for storing values.
 55  
 56  ```js
 57  var Cache = require('cache-base').namespace('data');
 58  var app = new Cache();
 59  app.set('a', 'b');
 60  console.log(app.data);
 61  //=> {a: 'b'}
 62  ```
 63  
 64  ## API
 65  
 66  ### [namespace](index.js#L29)
 67  
 68  Create a `Cache` constructor that when instantiated will store values on the given `prop`.
 69  
 70  **Params**
 71  
 72  * `prop` **{String}**: The property name to use for storing values.
 73  * `returns` **{Function}**: Returns a custom `Cache` constructor
 74  
 75  **Example**
 76  
 77  ```js
 78  var Cache = require('cache-base').namespace('data');
 79  var cache = new Cache();
 80  
 81  cache.set('foo', 'bar');
 82  //=> {data: {foo: 'bar'}}
 83  ```
 84  
 85  ### [Cache](index.js#L43)
 86  
 87  Create a new `Cache`. Internally the `Cache` constructor is created using the `namespace` function, with `cache` defined as the storage object.
 88  
 89  **Params**
 90  
 91  * `cache` **{Object}**: Optionally pass an object to initialize with.
 92  
 93  **Example**
 94  
 95  ```js
 96  var app = new Cache();
 97  ```
 98  
 99  ### [.set](index.js#L84)
100  
101  Assign `value` to `key`. Also emits `set` with the key and value.
102  
103  **Params**
104  
105  * `key` **{String}**
106  * `value` **{any}**
107  * `returns` **{Object}**: Returns the instance for chaining.
108  
109  **Events**
110  
111  * `emits`: `set` with `key` and `value` as arguments.
112  
113  **Example**
114  
115  ```js
116  app.on('set', function(key, val) {
117    // do something when `set` is emitted
118  });
119  
120  app.set(key, value);
121  
122  // also takes an object or array
123  app.set({name: 'Halle'});
124  app.set([{foo: 'bar'}, {baz: 'quux'}]);
125  console.log(app);
126  //=> {name: 'Halle', foo: 'bar', baz: 'quux'}
127  ```
128  
129  ### [.union](index.js#L114)
130  
131  Union `array` to `key`. Also emits `set` with the key and value.
132  
133  **Params**
134  
135  * `key` **{String}**
136  * `value` **{any}**
137  * `returns` **{Object}**: Returns the instance for chaining.
138  
139  **Example**
140  
141  ```js
142  app.union('a.b', ['foo']);
143  app.union('a.b', ['bar']);
144  console.log(app.get('a'));
145  //=> {b: ['foo', 'bar']}
146  ```
147  
148  ### [.get](index.js#L144)
149  
150  Return the value of `key`. Dot notation may be used to get [nested property values](https://github.com/jonschlinkert/get-value).
151  
152  **Params**
153  
154  * `key` **{String}**: The name of the property to get. Dot-notation may be used.
155  * `returns` **{any}**: Returns the value of `key`
156  
157  **Events**
158  
159  * `emits`: `get` with `key` and `value` as arguments.
160  
161  **Example**
162  
163  ```js
164  app.set('a.b.c', 'd');
165  app.get('a.b');
166  //=> {c: 'd'}
167  
168  app.get(['a', 'b']);
169  //=> {c: 'd'}
170  ```
171  
172  ### [.has](index.js#L171)
173  
174  Return true if app has a stored value for `key`, false only if value is `undefined`.
175  
176  **Params**
177  
178  * `key` **{String}**
179  * `returns` **{Boolean}**
180  
181  **Events**
182  
183  * `emits`: `has` with `key` and true or false as arguments.
184  
185  **Example**
186  
187  ```js
188  app.set('foo', 'bar');
189  app.has('foo');
190  //=> true
191  ```
192  
193  ### [.del](index.js#L199)
194  
195  Delete one or more properties from the instance.
196  
197  **Params**
198  
199  * `key` **{String|Array}**: Property name or array of property names.
200  * `returns` **{Object}**: Returns the instance for chaining.
201  
202  **Events**
203  
204  * `emits`: `del` with the `key` as the only argument.
205  
206  **Example**
207  
208  ```js
209  app.del(); // delete all
210  // or
211  app.del('foo');
212  // or
213  app.del(['foo', 'bar']);
214  ```
215  
216  ### [.clear](index.js#L218)
217  
218  Reset the entire cache to an empty object.
219  
220  **Example**
221  
222  ```js
223  app.clear();
224  ```
225  
226  ### [.visit](index.js#L235)
227  
228  Visit `method` over the properties in the given object, or map
229  visit over the object-elements in an array.
230  
231  **Params**
232  
233  * `method` **{String}**: The name of the `base` method to call.
234  * `val` **{Object|Array}**: The object or array to iterate over.
235  * `returns` **{Object}**: Returns the instance for chaining.
236  
237  ## About
238  
239  ### Related projects
240  
241  * [base-methods](https://www.npmjs.com/package/base-methods): base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… [more](https://github.com/jonschlinkert/base-methods) | [homepage](https://github.com/jonschlinkert/base-methods "base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like `set`, `get`, `del` and `use`.")
242  * [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
243  * [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://github.com/jonschlinkert/has-value) | [homepage](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.")
244  * [option-cache](https://www.npmjs.com/package/option-cache): Simple API for managing options in JavaScript applications. | [homepage](https://github.com/jonschlinkert/option-cache "Simple API for managing options in JavaScript applications.")
245  * [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
246  * [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value "Delete nested properties from an object using dot notation.")
247  
248  ### Contributing
249  
250  Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
251  
252  ### Contributors
253  
254  | **Commits** | **Contributor** | 
255  | --- | --- |
256  | 54 | [jonschlinkert](https://github.com/jonschlinkert) |
257  | 2 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
258  
259  ### Building docs
260  
261  _(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
262  
263  To generate the readme, run the following command:
264  
265  ```sh
266  $ npm install -g verbose/verb#dev verb-generate-readme && verb
267  ```
268  
269  ### Running tests
270  
271  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:
272  
273  ```sh
274  $ npm install && npm test
275  ```
276  
277  ### Author
278  
279  **Jon Schlinkert**
280  
281  * [github/jonschlinkert](https://github.com/jonschlinkert)
282  * [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
283  
284  ### License
285  
286  Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
287  Released under the [MIT License](LICENSE).
288  
289  ***
290  
291  _This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 22, 2017._