diff --git a/lib/fp/baseConvert.js b/lib/fp/baseConvert.js index a32684937..3c50222b3 100644 --- a/lib/fp/baseConvert.js +++ b/lib/fp/baseConvert.js @@ -1,5 +1,6 @@ var mapping = require('./mapping.js'), - mutateMap = mapping.mutate; + mutateMap = mapping.mutate, + placeholder = {}; /** * The base implementation of `convert` which accepts a `util` object of methods @@ -176,7 +177,12 @@ function baseConvert(util, name, func) { }); return !result; }); - return result || func; + + result || (result = func); + if (mapping.placeholder[name]) { + result.placeholder = placeholder; + } + return result; }; if (!isLib) { diff --git a/lib/fp/mapping.js b/lib/fp/mapping.js index 866205e99..5ef0a8528 100644 --- a/lib/fp/mapping.js +++ b/lib/fp/mapping.js @@ -152,6 +152,16 @@ module.exports = { } }, + /** Used to track methods with placeholder support */ + 'placeholder': { + 'bind': true, + 'bindKey': true, + 'curry': true, + 'curryRight': true, + 'partial': true, + 'partialRight': true + }, + /** Used to track methods that skip `_.rearg`. */ 'skipRearg': { 'assign': true, diff --git a/test/test-fp.js b/test/test-fp.js index 02fa5aed9..293fb3993 100644 --- a/test/test-fp.js +++ b/test/test-fp.js @@ -563,6 +563,20 @@ /*--------------------------------------------------------------------------*/ + QUnit.module('placeholder methods'); + + _.forOwn(mapping.placeholder, function(truthy, methodName) { + var func = fp[methodName]; + + QUnit.test('`_.' + methodName + '` should have a `placeholder` property', function(assert) { + assert.expect(1); + + assert.ok(_.isObject(func.placeholder)); + }); + }); + + /*--------------------------------------------------------------------------*/ + QUnit.module('fp.random'); (function() {