Awesome
base-data
adds a
data
method to base-methods.
(TOC generated by verb using markdown-toc)
Install
Install with npm:
$ npm install --save base-data
Usage
Adds a data
method to base that can be used for setting, getting and loading data onto a specified object in your application.
var Base = require('base');
var data = require('base-data');
// instantiate `Base`
var base = new Base();
// add `data` as a plugin
base.use(data());
Examples
Add data:
app.data('a', 'b');
app.data({c: 'd'});
app.data('e', ['f']);
console.log(app.cache.data);
//=> {a: 'b', c: 'd', e: ['f']}
cache.data
By default, all data is loaded onto app.cache.data
. This can be customized by passing the property to use when the plugin is initialized.
For example, the following set app.foo
as object for storing data:
app.use(data('foo'));
app.data('a', 'b');
console.log(app.foo);
//=> {a: 'b'}
API
.dataLoader
Register a data loader for loading data onto app.cache.data
.
Params
ext
{String}: The file extension for to match to the loaderfn
{Function}: The loader function.
Example
var yaml = require('js-yaml');
app.dataLoader('yml', function(str, fp) {
return yaml.safeLoad(str);
});
app.data('foo.yml');
//=> loads and parses `foo.yml` as yaml
.data
Load data onto app.cache.data
Params
key
{String|Object}: Key of the value to set, or object to extend.val
{any}returns
{Object}: Returns the instance ofTemplate
for chaining
Example
console.log(app.cache.data);
//=> {};
app.data('a', 'b');
app.data({c: 'd'});
console.log(app.cache.data);
//=> {a: 'b', c: 'd'}
// set an array
app.data('e', ['f']);
// overwrite the array
app.data('e', ['g']);
// update the array
app.data('e', ['h'], true);
console.log(app.cache.data.e);
//=> ['g', 'h']
.data.extend
Shallow extend an object onto app.cache.data
.
Params
key
{String|Object}: Property name or object to extend ontoapp.cache.data
. Dot-notation may be used for extending nested properties.value
{Object}: The object to extend ontoapp.cache.data
returns
{Object}: returns the instance for chaining
Example
app.data({a: {b: {c: 'd'}}});
app.data.extend('a.b', {x: 'y'});
console.log(app.get('a.b'));
//=> {c: 'd', x: 'y'}
.data.merge
Deeply merge an object onto app.cache.data
.
Params
key
{String|Object}: Property name or object to merge ontoapp.cache.data
. Dot-notation may be used for merging nested properties.value
{Object}: The object to merge ontoapp.cache.data
returns
{Object}: returns the instance for chaining
Example
app.data({a: {b: {c: {d: {e: 'f'}}}}});
app.data.merge('a.b', {c: {d: {g: 'h'}}});
console.log(app.get('a.b'));
//=> {c: {d: {e: 'f', g: 'h'}}}
.data.union
Union the given value onto a new or existing array value on app.cache.data
.
Params
key
{String}: Property name. Dot-notation may be used for nested properties.array
{Object}: The array to add or union onapp.cache.data
returns
{Object}: returns the instance for chaining
Example
app.data({a: {b: ['c', 'd']}});
app.data.union('a.b', ['e', 'f']}});
console.log(app.get('a.b'));
//=> ['c', 'd', 'e', 'f']
.data.set
Set the given value onto app.cache.data
.
Params
key
{String|Object}: Property name or object to merge ontoapp.cache.data
. Dot-notation may be used for nested properties.val
{any}: The value to set onapp.cache.data
returns
{Object}: returns the instance for chaining
Example
app.data.set('a.b', ['c', 'd']}});
console.log(app.get('a'));
//=> {b: ['c', 'd']}
.data.get
Get the value of key
from app.cache.data
. Dot-notation may be used for getting nested properties.
Params
key
{String}: The name of the property to get.returns
{any}: Returns the value ofkey
Example
app.data({a: {b: {c: 'd'}}});
console.log(app.get('a.b'));
//=> {c: 'd'}
Glob patterns
Glob patterns may be passed as a string or array. All of these work:
app.data('foo.json');
app.data('*.json');
app.data(['*.json']);
// pass options to node-glob
app.data(['*.json'], {dot: true});
Namespacing
Namespacing allows you to load data onto a specific key, optionally using part of the file path as the key.
Example
Given that foo.json
contains {a: 'b'}
:
app.data('foo.json');
console.log(app.cache.data);
//=> {a: 'b'}
app.data('foo.json', {namespace: true});
console.log(app.cache.data);
//=> {foo: {a: 'b'}}
app.data('foo.json', {
namespace: function(fp) {
return path.basename(fp);
}
});
console.log(app.cache.data);
//=> {'foo.json': {a: 'b'}}
History
v0.6.0
- removes
renameKey
option for namespacing - replaces is-valid-instance and is-registered with is-valid-app
v0.5.0
- uses is-valid-instance and is-registered to ensure the smart plugin is registered on the correct objects.
v0.4.0
-
Refactored
-
adds methods to
.data
for getting and setting data.
v0.3.6
- adds a basic loader that only calls the
JSON.parse
method, if no other loaders are defined - calls
.isRegistered
from base to ensure the plugin is only loaded once on an instance
About
Related projects
- base-cli: Plugin for base-methods that maps built-in methods to CLI args (also supports methods from a… more | homepage
- base-config: base-methods plugin that adds a
config
method for mapping declarative configuration values to other 'base… more | homepage - base-option: Adds a few options methods to base, like
option
,enable
anddisable
. See the readme… more | homepage - base-pipeline: base-methods plugin that adds pipeline and plugin methods for dynamically composing streaming plugin pipelines. | homepage
- base-plugins: Adds 'smart plugin' support to your base application. | homepage
- base-store: Plugin for getting and persisting config values with your base-methods application. Adds a 'store' object… more | homepage
- base: Framework for rapidly creating high quality node.js applications, using plugins like building blocks | homepage
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Contributors
Commits | Contributor |
---|---|
69 | jonschlinkert |
10 | doowb |
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
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
Author
Jon Schlinkert
License
Copyright © 2017, Jon Schlinkert. Released under the MIT License.
This file was generated by verb-generate-readme, v0.6.0, on July 20, 2017.