From 986bd351c6f658a996e254250eaf4027f350ac47 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Tue, 18 Feb 2020 14:17:01 -0800 Subject: [PATCH 1/4] replaced lodash keyby --- .../optimizely-sdk/lib/utils/fns/index.js | 11 ++++- .../lib/utils/fns/index.tests.js | 49 ++++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index b9b3bf3ec..f40129830 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -15,6 +15,7 @@ */ var uuid = require('uuid'); var _isFinite = require('lodash/isFinite'); +var { keyBy } = require('@optimizely/js-sdk-utils'); var MAX_NUMBER_LIMIT = Math.pow(2, 53); module.exports = { @@ -29,7 +30,15 @@ module.exports = { isFinite: function(number) { return _isFinite(number) && Math.abs(number) <= MAX_NUMBER_LIMIT; }, - keyBy: require('lodash/keyBy'), + keyBy: function(arr, callback) { + if (!arr) return {}; + if (typeof callback === 'string' || callback instanceof String) { + return keyBy(arr, function(item) { + return item[callback]; + }); + } + return keyBy(arr, callback); + }, filter: require('lodash/filter'), forEach: require('lodash/forEach'), forOwn: require('lodash/forOwn'), diff --git a/packages/optimizely-sdk/lib/utils/fns/index.tests.js b/packages/optimizely-sdk/lib/utils/fns/index.tests.js index fba8890b8..510ba755c 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.tests.js @@ -37,5 +37,52 @@ describe('lib/utils/fns', function() { assert.isTrue(fns.isFinite(-Math.pow(2, 53))); }); }); + describe('keyBy', function() { + it('should return correct object if callback is a function', function() { + var arr = [ + { key1: 'row1', key2: 'key2row1' }, + { key1: 'row2', key2: 'key2row2' }, + { key1: 'row3', key2: 'key2row3' }, + { key1: 'row4', key2: 'key2row4' }, + ]; + + var obj = fns.keyBy(arr, function(item) { + return item['key1']; + }); + + assert.deepEqual(obj, { + row1: { key1: 'row1', key2: 'key2row1' }, + row2: { key1: 'row2', key2: 'key2row2' }, + row3: { key1: 'row3', key2: 'key2row3' }, + row4: { key1: 'row4', key2: 'key2row4' } + }); + }); + + it('should return correct object if callback is a string key', function() { + var arr = [ + { key1: 'row1', key2: 'key2row1' }, + { key1: 'row2', key2: 'key2row2' }, + { key1: 'row3', key2: 'key2row3' }, + { key1: 'row4', key2: 'key2row4' }, + ]; + + var obj = fns.keyBy(arr, 'key1'); + + assert.deepEqual(obj, { + row1: { key1: 'row1', key2: 'key2row1' }, + row2: { key1: 'row2', key2: 'key2row2' }, + row3: { key1: 'row3', key2: 'key2row3' }, + row4: { key1: 'row4', key2: 'key2row4' } + }); + }); + + it('should return empty object when first argument is null or undefined', function() { + var obj = fns.keyBy(null, 'key1'); + assert.isEmpty(obj); + + obj = fns.keyBy(undefined, 'key1'); + assert.isEmpty(obj); + }); + }); }); -}); \ No newline at end of file +}); From d88a9cc6adc19dea43530e9586f05352f45ce05a Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Tue, 18 Feb 2020 14:21:22 -0800 Subject: [PATCH 2/4] fixed lint message --- packages/optimizely-sdk/lib/utils/fns/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index f40129830..7f85424cd 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -15,7 +15,7 @@ */ var uuid = require('uuid'); var _isFinite = require('lodash/isFinite'); -var { keyBy } = require('@optimizely/js-sdk-utils'); +var keyBy = require('@optimizely/js-sdk-utils').keyBy; var MAX_NUMBER_LIMIT = Math.pow(2, 53); module.exports = { From 1fea093121547bd98d6a4db788d23b3f48d5f5a3 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Thu, 20 Feb 2020 18:41:26 -0800 Subject: [PATCH 3/4] simplified implementation to only support keyBy based on string key --- .../optimizely-sdk/lib/utils/fns/index.js | 13 ++++------- .../lib/utils/fns/index.tests.js | 23 ++----------------- 2 files changed, 7 insertions(+), 29 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index fb3d0f6d0..25bd151ca 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2019, Optimizely + * Copyright 2017, 2019-2020, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,14 +30,11 @@ module.exports = { isFinite: function(number) { return _isFinite(number) && Math.abs(number) <= MAX_NUMBER_LIMIT; }, - keyBy: function(arr, callback) { + keyBy: function(arr, key) { if (!arr) return {}; - if (typeof callback === 'string' || callback instanceof String) { - return keyBy(arr, function(item) { - return item[callback]; - }); - } - return keyBy(arr, callback); + return keyBy(arr, function(item) { + return item[key]; + }); }, forEach: require('lodash/forEach'), forOwn: require('lodash/forOwn'), diff --git a/packages/optimizely-sdk/lib/utils/fns/index.tests.js b/packages/optimizely-sdk/lib/utils/fns/index.tests.js index 510ba755c..8c4a080b6 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.tests.js @@ -37,27 +37,8 @@ describe('lib/utils/fns', function() { assert.isTrue(fns.isFinite(-Math.pow(2, 53))); }); }); + describe('keyBy', function() { - it('should return correct object if callback is a function', function() { - var arr = [ - { key1: 'row1', key2: 'key2row1' }, - { key1: 'row2', key2: 'key2row2' }, - { key1: 'row3', key2: 'key2row3' }, - { key1: 'row4', key2: 'key2row4' }, - ]; - - var obj = fns.keyBy(arr, function(item) { - return item['key1']; - }); - - assert.deepEqual(obj, { - row1: { key1: 'row1', key2: 'key2row1' }, - row2: { key1: 'row2', key2: 'key2row2' }, - row3: { key1: 'row3', key2: 'key2row3' }, - row4: { key1: 'row4', key2: 'key2row4' } - }); - }); - it('should return correct object if callback is a string key', function() { var arr = [ { key1: 'row1', key2: 'key2row1' }, @@ -75,7 +56,7 @@ describe('lib/utils/fns', function() { row4: { key1: 'row4', key2: 'key2row4' } }); }); - + it('should return empty object when first argument is null or undefined', function() { var obj = fns.keyBy(null, 'key1'); assert.isEmpty(obj); From e40c2eb6bb64147215258c27463d0152bd17df2e Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Thu, 20 Feb 2020 18:44:20 -0800 Subject: [PATCH 4/4] updated test case title --- packages/optimizely-sdk/lib/utils/fns/index.tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.tests.js b/packages/optimizely-sdk/lib/utils/fns/index.tests.js index 8c4a080b6..57cd0931b 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.tests.js @@ -37,9 +37,9 @@ describe('lib/utils/fns', function() { assert.isTrue(fns.isFinite(-Math.pow(2, 53))); }); }); - + describe('keyBy', function() { - it('should return correct object if callback is a string key', function() { + it('should return correct object when a key is provided', function() { var arr = [ { key1: 'row1', key2: 'key2row1' }, { key1: 'row2', key2: 'key2row2' },