From 42f45317207abcb131e5343b6a3fb75d59740298 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Wed, 29 May 2013 17:06:01 -0400 Subject: [PATCH] Remove unneeded method from the `backbone` build and fix build tests. Former-commit-id: ee463a4af4d458a556f5be666b71b464bae32e6b --- build.js | 39 +++++++++++++++++++++++---------------- test/test-build.js | 18 +++++++++--------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/build.js b/build.js index 9a48bb166..8bb481c11 100755 --- a/build.js +++ b/build.js @@ -208,7 +208,7 @@ // method used by the `backbone` and `underscore` builds 'chain': ['value'], - 'findWhere': ['find'] + 'findWhere': ['where'] }; /** Used to inline `iteratorTemplate` */ @@ -231,7 +231,7 @@ var allMethods = _.keys(dependencyMap); /** List of Lo-Dash methods */ - var lodashMethods = allMethods.slice(); + var lodashMethods = _.without(allMethods, 'findWhere'); /** List of Backbone's Lo-Dash dependencies */ var backboneDependencies = [ @@ -729,7 +729,9 @@ * @returns {Array} Returns an array of aliases. */ function getAliases(methodName) { - return realToAliasMap[methodName] || []; + return (realToAliasMap[methodName] || []).filter(function(methodName) { + return !dependencyMap[methodName]; + }); } /** @@ -945,7 +947,7 @@ * @returns {String} Returns the real method name. */ function getRealName(methodName) { - return aliasToRealMap[methodName] || methodName; + return (!dependencyMap[methodName] && aliasToRealMap[methodName]) || methodName; } /** @@ -1860,6 +1862,11 @@ return _.contains(methods, methodName); }; + // delete the `_.findWhere` dependency map to enable its alias mapping + if (!isUnderscore || useLodashMethod('findWhere')) { + delete dependencyMap.findWhere; + } + // methods to include in the build var includeMethods = options.reduce(function(accumulator, value) { return /^include=.*$/.test(value) @@ -1934,16 +1941,16 @@ if (!useLodashMethod('pick')){ dependencyMap.pick = _.without(dependencyMap.pick, 'forIn', 'isObject'); } - if (!useLodashMethod('where')) { - dependencyMap.createCallback = _.without(dependencyMap.createCallback, 'isEqual'); - dependencyMap.where.push('find', 'isEmpty'); - } if (!useLodashMethod('template')) { dependencyMap.template = _.without(dependencyMap.template, 'keys', 'values'); } if (!useLodashMethod('toArray')) { dependencyMap.toArray.push('isArray', 'map'); } + if (!useLodashMethod('where')) { + dependencyMap.createCallback = _.without(dependencyMap.createCallback, 'isEqual'); + dependencyMap.where.push('find', 'isEmpty'); + } _.each(['debounce', 'throttle'], function(methodName) { if (!useLodashMethod(methodName)) { @@ -1962,11 +1969,10 @@ dependencyMap[methodName] = _.without(dependencyMap[methodName], 'charAtCallback', 'isArray', 'isString'); } }); - - dependencyMap.findWhere = ['where']; - dependencyMap.reduceRight = _.without(dependencyMap.reduceRight, 'isString'); } if (isModern || isUnderscore) { + dependencyMap.reduceRight = _.without(dependencyMap.reduceRight, 'isString'); + _.each(['at', 'forEach', 'toArray'], function(methodName) { if (!(isUnderscore && useLodashMethod(methodName))) { dependencyMap[methodName] = _.without(dependencyMap[methodName], 'isString'); @@ -2006,10 +2012,10 @@ // add `chain` and `findWhere` if (isUnderscore) { - if (_.contains(categories, 'Chaining')) { + if (_.contains(categories, 'Chaining') && !_.contains(methodNames, 'chain')) { methodNames.push('chain'); } - if (_.contains(categories, 'Collections')) { + if (_.contains(categories, 'Collections') && !_.contains(methodNames, 'findWhere')) { methodNames.push('findWhere'); } } @@ -2125,7 +2131,7 @@ source = removeBindingOptimization(source); } if (isLegacy || isMobile || isUnderscore) { - if (!useLodashMethod('assign') && !useLodashMethod('defaults') && !useLodashMethod('forIn') && !useLodashMethod('forOwn')) { + if (isMobile || (!useLodashMethod('assign') && !useLodashMethod('defaults') && !useLodashMethod('forIn') && !useLodashMethod('forOwn'))) { source = removeKeysOptimization(source); } if (!useLodashMethod('defer')) { @@ -2928,7 +2934,8 @@ else { // remove methods from the build allMethods.forEach(function(otherName) { - if (!_.contains(buildMethods, otherName)) { + if (!_.contains(buildMethods, otherName) && + !(otherName == 'findWhere' && !isUnderscore)) { source = removeFunction(source, otherName); } }); @@ -3300,7 +3307,7 @@ } debugSource = cleanupSource(source); - source = cleanupSource(source); + source = debugSource; /*------------------------------------------------------------------------*/ diff --git a/test/test-build.js b/test/test-build.js index aa296ad84..a9d766bdb 100644 --- a/test/test-build.js +++ b/test/test-build.js @@ -57,7 +57,6 @@ 'drop': 'rest', 'each': 'forEach', 'extend': 'assign', - 'findWhere': 'find', 'foldl': 'reduce', 'foldr': 'reduceRight', 'head': 'first', @@ -77,7 +76,7 @@ 'contains': ['include'], 'every': ['all'], 'filter': ['select'], - 'find': ['detect', 'findWhere'], + 'find': ['detect'], 'first': ['head', 'take'], 'forEach': ['each'], 'functions': ['methods'], @@ -90,13 +89,13 @@ 'zipObject': ['object'] }; - /** List of all Lo-Dash methods */ - var lodashMethods = _.functions(_).filter(function(methodName) { + /** List of all methods */ + var allMethods = _.functions(_).filter(function(methodName) { return !/^_/.test(methodName); }); - /** List of all methods */ - var allMethods = lodashMethods.slice(); + /** List of all Lo-Dash methods */ + var lodashMethods = _.without(allMethods, 'findWhere'); /** List of "Arrays" category methods */ var arraysMethods = [ @@ -464,7 +463,7 @@ func(array, 'slice'); func(object, 'toFixed'); } - else if (methodName == 'where') { + else if (methodName == 'findWhere' || methodName == 'where') { func(array, object); func(object, object); } @@ -1445,7 +1444,7 @@ /*--------------------------------------------------------------------------*/ - QUnit.module('mixed underscore and lodash methods'); + QUnit.module('underscore builds with lodash methods'); (function() { var methodNames = [ @@ -1482,6 +1481,7 @@ 'pick', 'pluck', 'reduce', + 'reduceRight', 'result', 'rest', 'some', @@ -1535,7 +1535,7 @@ vm.runInContext(data.source, context, true); var lodash = context._; - if (methodName == 'chain' || methodName == 'defer') { + if (methodName == 'chain' || methodName == 'defer' || methodName == 'findWhere') { notEqual(strip(lodash[methodName]), strip(_[methodName]), basename); } else if (!/\.min$/.test(basename)) { equal(strip(lodash[methodName]), strip(_[methodName]), basename);