Refactoring to simpliefy things a bit

This commit is contained in:
Chris Cowan 2015-10-07 18:29:51 -07:00
parent 0479c25f9b
commit 18c4338e7a
4 changed files with 41 additions and 112 deletions

View file

@ -6,7 +6,7 @@ let ansicolors = require('ansicolors');
let stringify = require('json-stringify-safe');
let querystring = require('querystring');
let inspect = require('util').inspect;
let applyFiltersToKeys = require('./applyFilterToKey').applyFiltersToKeys;
let applyFiltersToKeys = require('./applyFiltersToKeys');
function serializeError(err) {
return {

View file

@ -1,106 +0,0 @@
var applyFilterToKey = require('../applyFilterToKey');
var applyFiltersToKeys = applyFilterToKey.applyFiltersToKeys;
var expect = require('expect.js');
function fixture() {
return {
req: {
headers: {
authorization: 'Basic dskd939k2i'
}
}
};
}
describe('applyFilterToKey(obj, key, action)', function () {
it('should remove a key from an object recursivly', function () {
var data = fixture();
data = applyFilterToKey(data, 'authorization', 'remove');
expect(data).to.eql({
req: { headers: {} }
});
});
it('should remove an entire branch', function () {
var data = fixture();
data = applyFilterToKey(data, 'headers', 'remove');
expect(data).to.eql({
req: { }
});
});
it('should remove an entire branch with censor', function () {
var data = fixture();
data = applyFilterToKey(data, 'headers', 'censor');
expect(data).to.eql({
req: { }
});
});
it('should censor a key in an object recursivly', function () {
var data = fixture();
data = applyFilterToKey(data, 'authorization', 'censor');
expect(data).to.eql({
req: {
headers: {
authorization: 'XXXXXXXXXXXXXXXX'
}
}
});
});
it('should censor key with a RegEx in an object recursivly', function () {
var data = fixture();
var regex = '/([^\\s]+)$/';
data = applyFilterToKey(data, 'authorization', regex);
expect(data).to.eql({
req: {
headers: {
authorization: 'Basic XXXXXXXXXX'
}
}
});
});
it('uses the JSON version of objects for serializaion', function () {
var data = applyFilterToKey({
a: {
b: 1,
toJSON: () => ({ c: 10 })
}
}, 'c', 'censor');
expect(data).to.eql({
a: {
c: 'XX'
}
});
});
describe('applyFiltersToKeys(obj, actionsByKey)', function () {
it('applies applyFilterToKey() for each key+prop in actionsByKey', function () {
var data = applyFiltersToKeys({
a: {
b: {
c: 1
},
d: {
e: 'foobar'
}
}
}, {
b: 'remove',
e: 'censor',
});
expect(data).to.eql({
a: {
d: {
e: 'XXXXXX',
},
},
});
});
});
});

View file

@ -0,0 +1,39 @@
var applyFiltersToKeys = require('../applyFiltersToKeys');
var expect = require('expect.js');
describe('applyFiltersToKeys(obj, actionsByKey)', function () {
it('applies for each key+prop in actionsByKey', function () {
var data = applyFiltersToKeys({
a: {
b: {
c: 1
},
d: {
e: 'foobar'
}
},
req: {
headers: {
authorization: 'Basic dskd939k2i'
}
}
}, {
b: 'remove',
e: 'censor',
authorization: '/([^\\s]+)$/'
});
expect(data).to.eql({
a: {
d: {
e: 'XXXXXX',
},
},
req: {
headers: {
authorization: 'Basic XXXXXXXXXX'
}
}
});
});
});

View file

@ -35,11 +35,7 @@ function apply(obj, key, action) {
return obj;
}
module.exports = function applyFilterToKey(obj, key, action) {
return apply(toPojo(obj), key, action);
};
module.exports.applyFiltersToKeys = function (obj, actionsByKey) {
module.exports = function (obj, actionsByKey) {
return Object.keys(actionsByKey).reduce((output, key) => {
return apply(output, key, actionsByKey[key]);
}, toPojo(obj));