Skip to content

Commit

Permalink
Ensure placeholder properties are set for fp.convert() results. [closes
Browse files Browse the repository at this point in the history
  • Loading branch information
jdalton committed Aug 31, 2018
1 parent 278c6dd commit 2de676f
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 40 deletions.
25 changes: 11 additions & 14 deletions fp/_baseConvert.js
Expand Up @@ -136,8 +136,7 @@ function wrapImmutable(func, cloner) {
* @returns {Function|Object} Returns the converted function or object.
*/
function baseConvert(util, name, func, options) {
var setPlaceholder,
isLib = typeof name == 'function',
var isLib = typeof name == 'function',
isObj = name === Object(name);

if (isObj) {
Expand All @@ -158,10 +157,10 @@ function baseConvert(util, name, func, options) {
'rearg': 'rearg' in options ? options.rearg : true
};

var forceCurry = ('curry' in options) && options.curry,
var defaultHolder = isLib ? func : fallbackHolder,
forceCurry = ('curry' in options) && options.curry,
forceFixed = ('fixed' in options) && options.fixed,
forceRearg = ('rearg' in options) && options.rearg,
placeholder = isLib ? func : fallbackHolder,
pristine = isLib ? func.runInContext() : undefined;

var helpers = isLib ? func : {
Expand Down Expand Up @@ -466,7 +465,7 @@ function baseConvert(util, name, func, options) {
* @param {Function} func The function to wrap.
* @returns {Function} Returns the converted function.
*/
function wrap(name, func) {
function wrap(name, func, placeholder) {
var result,
realName = mapping.aliasToReal[name] || name,
wrapped = func,
Expand Down Expand Up @@ -511,17 +510,15 @@ function baseConvert(util, name, func, options) {
};
}
result.convert = createConverter(realName, func);
if (mapping.placeholder[realName]) {
setPlaceholder = true;
result.placeholder = func.placeholder = placeholder;
}
result.placeholder = func.placeholder = placeholder;

return result;
}

/*--------------------------------------------------------------------------*/

if (!isObj) {
return wrap(name, func);
return wrap(name, func, defaultHolder);
}
var _ = func;

Expand All @@ -531,7 +528,8 @@ function baseConvert(util, name, func, options) {
each(mapping.aryMethod[aryKey], function(key) {
var func = _[mapping.remap[key] || key];
if (func) {
pairs.push([key, wrap(key, func)]);

pairs.push([key, wrap(key, func, _)]);
}
});
});
Expand All @@ -557,9 +555,8 @@ function baseConvert(util, name, func, options) {
});

_.convert = convertLib;
if (setPlaceholder) {
_.placeholder = placeholder;
}
_.placeholder = _;

// Assign aliases.
each(keys(_), function(key) {
each(mapping.realToAlias[key] || [], function(alias) {
Expand Down
10 changes: 0 additions & 10 deletions fp/_mapping.js
Expand Up @@ -261,16 +261,6 @@ exports.mutate = {
}
};

/** Used to track methods with placeholder support */
exports.placeholder = {
'bind': true,
'bindKey': true,
'curry': true,
'curryRight': true,
'partial': true,
'partialRight': true
};

/** Used to map real names to their aliases. */
exports.realToAlias = (function() {
var hasOwnProperty = Object.prototype.hasOwnProperty,
Expand Down
30 changes: 14 additions & 16 deletions test/test-fp.js
Expand Up @@ -233,25 +233,14 @@
assert.strictEqual(add('2')('1'), '12');
});

QUnit.test('should only add a `placeholder` property if needed', function(assert) {
QUnit.test('should add a `placeholder` property', function(assert) {
assert.expect(2);

if (!document) {
var methodNames = _.keys(mapping.placeholder),
expected = _.map(methodNames, _.constant(true));

var actual = _.map(methodNames, function(methodName) {
var object = {};
object[methodName] = _[methodName];

var lodash = convert(object);
return methodName in lodash;
});

assert.deepEqual(actual, expected);

var lodash = convert({ 'add': _.add });
assert.notOk('placeholder' in lodash);

assert.strictEqual(lodash.placeholder, lodash);
assert.strictEqual(lodash.add.placeholder, lodash)
}
else {
skipAssert(assert, 2);
Expand Down Expand Up @@ -645,7 +634,16 @@
});
});

_.forOwn(mapping.placeholder, function(truthy, methodName) {
var methodNames = [
'bind',
'bindKey',
'curry',
'curryRight',
'partial',
'partialRight'
]

_.each(methodNames, function(methodName) {
var func = fp[methodName];

QUnit.test('fp.' + methodName + '` should have a `placeholder` property', function(assert) {
Expand Down

0 comments on commit 2de676f

Please sign in to comment.