Skip to content

Commit

Permalink
refactor: re-implement idx (safe getter) & add test
Browse files Browse the repository at this point in the history
  • Loading branch information
endiliey committed Sep 5, 2018
1 parent 4bc010b commit 391a8b5
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 2 deletions.
41 changes: 41 additions & 0 deletions lib/core/__tests__/utils.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,45 @@ describe('utils', () => {
expect(utils.getGitLastUpdated(tempFilePath)).toBeNull();
fs.unlinkSync(tempFilePath);
});

test('idx', () => {
const a = {};
const b = {hello: 'world'};
const env = {
translation: {
enabled: true,
enabledLanguages: [
{
enabled: true,
name: 'English',
tag: 'en',
},
{
enabled: true,
name: '日本語',
tag: 'ja',
},
],
},
versioning: {
enabled: false,
versions: [],
},
};
const variable = 'enabledLanguages';
expect(utils.idx(a, [('b', 'c')])).toBeUndefined();
expect(utils.idx(b, ['hello'])).toEqual('world');
expect(utils.idx(b, 'hello')).toEqual('world');
expect(utils.idx(env, 'typo')).toBeUndefined();
expect(utils.idx(env, 'versioning')).toEqual({
enabled: false,
versions: [],
});
expect(utils.idx(env, ['translation', 'enabled'])).toEqual(true);
expect(
utils.idx(env, ['translation', variable]).map(lang => lang.tag)
).toEqual(['en', 'ja']);
expect(utils.idx(undefined)).toBeUndefined();
expect(utils.idx(null)).toBeNull();
});
});
9 changes: 7 additions & 2 deletions lib/core/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,13 @@ function getPath(pathStr, cleanUrl = false) {
: removeExtension(pathStr);
}

function idx(target, path) {
return path.reduce((obj, key) => obj && obj[key], target);
function idx(target, keyPaths) {
return (
target &&
(Array.isArray(keyPaths)
? keyPaths.reduce((obj, key) => obj && obj[key], target)
: target[keyPaths])
);
}

function getGitLastUpdated(filepath) {
Expand Down

0 comments on commit 391a8b5

Please sign in to comment.