boolean-picker
Version:
Returns a copy of an object with boolean-like non-boolean values, e.g. 'yes', 'no', 'ok', 1, converted to booleans. Use a nested whitelist of specified keys-to-convert to limit conversion-to-boolean to those keys.
118 lines (90 loc) • 2.49 kB
Markdown
# What [](https://travis-ci.org/nluo/boolean-picker)
Traverse a given object recursively, picks up the custom defined boolean-like values (e.g. `'yes'`, `'no'`, `'ok'`, `1`) and object keys, and returns a new object with those values converted to boolean values (i.e. `true`, `false`). You can use a nested whitelist of specified keys-to-convert to limit conversion-to-boolean to those keys for your objects.
# Quick Reference
## Install
```
npm i boolean-picker --save
```
## API
```
booleanPicker(object, boolMap, options);
```
* `object`: the original object
* `boolMap`: the boolMap is where you want to define which keys you want boolean-picker to convert the key. Acts as a nested whitelist.
* `options`: options is where you provide the custom true and false values, e.g. {trues: ['true', 'yes'], falses: ['false', 'no']}
Require and use it now:
```
var booleanPicker = require('boolean-picker');
// the mock object
var object = {
foo: 'yes',
bar: 'no',
baz: {majigger: 'true'},
animals: [{name: 'dog', isAlive: 'yes'}, {name: 'fish', isAlive: 'yes'}],
zed: 'affirmative'
};
var boolMap = {
foo: true,
zed: true,
baz: {
majigger: true
}
};
var result = booleanPicker(object, boolMap, {trues: ['true', 'yes', 'affirmative'], falses: ['false', 'no']});
```
will output:
```
{
foo: true,
bar: 'no',
baz: { majigger: true },
animals: [ {name: 'dog', isAlive: 'yes'}, { name: 'fish', isAlive: 'yes' } ] ,
zed: true
}
```
If what you want boolean-picker to pick up and convert the nested values inside the array, i.e. the 'animals' key, you could do:
```
var boolMap = {
foo: true,
baz: true,
animals: [{isAlive: true}]
};
```
which will convert both objects in animals to true
output:
```
{
foo: true,
bar: 'no',
baz: { majigger: 'true' },
animals:
[ { name: 'dog', isAlive: true },
{ name: 'fish', isAlive: true } ]
}
```
If you just want to convert a specific object inside the array, say the {name: 'dog', isAlive: 'yes'}, you can define an object with position key:
```
var boolMap = {
foo: true,
baz: true,
animals: {
0: {
isAlive: true
}
}
};
```
output:
```
{
foo: true,
bar: 'no',
baz: { majigger: 'true' },
animals:
[ { name: 'dog', isAlive: true },
{ name: 'fish', isAlive: 'yes' } ]
}
```
## Tests
npm test
Currently tests are all passed and with 100% coverage