fp.convert should handle aliased and remapped methods. [closes #2728]

This commit is contained in:
John-David Dalton
2016-10-11 22:40:20 -07:00
parent 8f06ea259a
commit d431e97030
2 changed files with 29 additions and 5 deletions

View File

@@ -1,5 +1,7 @@
var mapping = require('./_mapping'), var mapping = require('./_mapping'),
aliasToReal = mapping.aliasToReal,
mutateMap = mapping.mutate, mutateMap = mapping.mutate,
remap = mapping.remap,
fallbackHolder = require('./placeholder'); fallbackHolder = require('./placeholder');
/** /**
@@ -351,13 +353,16 @@ function baseConvert(util, name, func, options) {
* @returns {Function} Returns the new converter function. * @returns {Function} Returns the new converter function.
*/ */
function createConverter(name, func) { function createConverter(name, func) {
var oldOptions = options; var realName = aliasToReal[name] || name,
methodName = remap[realName] || realName,
oldOptions = options;
return function(options) { return function(options) {
var newUtil = isLib ? pristine : helpers, var newUtil = isLib ? pristine : helpers,
newFunc = isLib ? pristine[name] : func, newFunc = isLib ? pristine[methodName] : func,
newOptions = assign(assign({}, oldOptions), options); newOptions = assign(assign({}, oldOptions), options);
return baseConvert(newUtil, name, newFunc, newOptions); return baseConvert(newUtil, realName, newFunc, newOptions);
}; };
} }
@@ -428,7 +433,7 @@ function baseConvert(util, name, func, options) {
* @returns {Function} Returns the converted function. * @returns {Function} Returns the converted function.
*/ */
function wrap(name, func) { function wrap(name, func) {
name = mapping.aliasToReal[name] || name; name = aliasToReal[name] || name;
var result, var result,
wrapped = func, wrapped = func,
@@ -491,7 +496,7 @@ function baseConvert(util, name, func, options) {
var pairs = []; var pairs = [];
each(aryMethodKeys, function(aryKey) { each(aryMethodKeys, function(aryKey) {
each(mapping.aryMethod[aryKey], function(key) { each(mapping.aryMethod[aryKey], function(key) {
var func = _[mapping.remap[key] || key]; var func = _[remap[key] || key];
if (func) { if (func) {
pairs.push([key, wrap(key, func)]); pairs.push([key, wrap(key, func)]);
} }

View File

@@ -273,6 +273,25 @@
assert.strictEqual(fp.isArray(array), true); assert.strictEqual(fp.isArray(array), true);
assert.strictEqual(isArray()(array), true); assert.strictEqual(isArray()(array), true);
}); });
QUnit.test('should convert method aliases', function(assert) {
assert.expect(1);
var all = fp.all.convert({ 'rearg': false }),
actual = all([0])(_.identity);
assert.strictEqual(actual, false);
});
QUnit.test('should convert remapped methods', function(assert) {
assert.expect(1);
var extendAll = fp.extendAll.convert({ 'immutable': false }),
object = {};
extendAll([object, { 'a': 1 }, { 'b': 2 }]);
assert.deepEqual(object, { 'a': 1, 'b': 2 });
});
}()); }());
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/