lodash-rails 4.13.1 → 4.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c98dbe7d6d7c67a7e4453aa7f9568e98d98dc0f
4
- data.tar.gz: 23c404406ef9932cd4efe0205080218d9309eac4
3
+ metadata.gz: 833b4f3bf008fbf3d9e4444e353ff8120c09ef72
4
+ data.tar.gz: 4782c37e1f7970f6c85d76eac44ed251988ee3ff
5
5
  SHA512:
6
- metadata.gz: 8899d6a919f6a5d432bc359d9dbfb8002c005237e71b2a71a41e03ef0512f0eb6875f36a449f8101370dc2c054e68930ae4ccb08bdd5a825c9c087efd4c1bde9
7
- data.tar.gz: 7c21233323dc44fcfa27c92c2c6ae346bf6613ac17da719fc6383ebdf8fcc8f5302fb3b1e87b1696b56e2a9db24734bdc5e972b3ddcc20d454edb8da3a2f0285
6
+ metadata.gz: 221e7572c90bf89283205751c419b9e9cba11099d155d09da7a96356a296578f5a856331bf31a32e75e23e66f7de7df120ccccfdfc9eb7555870abff3748cbc5
7
+ data.tar.gz: 38f1b3da43bafe58ba1a1952f6b0ac868e7dfc91ea28704a8cc64f44f5e99250287f43bb45c1059dee970455e3c0957c13cbf538fdbb7a93447bbb0769477f3b
data/README.md CHANGED
@@ -18,7 +18,7 @@ Add the necessary library to `app/assets/javascripts/application.js`:
18
18
 
19
19
  ## What's included?
20
20
 
21
- lodash 4.13.1:
21
+ lodash 4.14.1:
22
22
 
23
23
  * lodash.core.js
24
24
  * lodash.core.min.js
@@ -1,5 +1,5 @@
1
1
  module LoDash
2
2
  module Rails
3
- VERSION = "4.13.1"
3
+ VERSION = "4.14.1"
4
4
  end
5
5
  end
@@ -13,12 +13,12 @@
13
13
  var undefined;
14
14
 
15
15
  /** Used as the semantic version number. */
16
- var VERSION = '4.13.1';
16
+ var VERSION = '4.14.1';
17
17
 
18
18
  /** Used as the `TypeError` message for "Functions" methods. */
19
19
  var FUNC_ERROR_TEXT = 'Expected a function';
20
20
 
21
- /** Used to compose bitmasks for wrapper metadata. */
21
+ /** Used to compose bitmasks for function metadata. */
22
22
  var BIND_FLAG = 1,
23
23
  PARTIAL_FLAG = 32;
24
24
 
@@ -57,23 +57,20 @@
57
57
  '`': '`'
58
58
  };
59
59
 
60
- /** Detect free variable `exports`. */
61
- var freeExports = typeof exports == 'object' && exports;
62
-
63
- /** Detect free variable `module`. */
64
- var freeModule = freeExports && typeof module == 'object' && module;
65
-
66
60
  /** Detect free variable `global` from Node.js. */
67
- var freeGlobal = checkGlobal(typeof global == 'object' && global);
61
+ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
68
62
 
69
63
  /** Detect free variable `self`. */
70
- var freeSelf = checkGlobal(typeof self == 'object' && self);
71
-
72
- /** Detect `this` as the global object. */
73
- var thisGlobal = checkGlobal(typeof this == 'object' && this);
64
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
74
65
 
75
66
  /** Used as a reference to the global object. */
76
- var root = freeGlobal || freeSelf || thisGlobal || Function('return this')();
67
+ var root = freeGlobal || freeSelf || Function('return this')();
68
+
69
+ /** Detect free variable `exports`. */
70
+ var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
71
+
72
+ /** Detect free variable `module`. */
73
+ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
77
74
 
78
75
  /*--------------------------------------------------------------------------*/
79
76
 
@@ -113,6 +110,32 @@
113
110
  return -1;
114
111
  }
115
112
 
113
+ /**
114
+ * The base implementation of `_.property` without support for deep paths.
115
+ *
116
+ * @private
117
+ * @param {string} key The key of the property to get.
118
+ * @returns {Function} Returns the new accessor function.
119
+ */
120
+ function baseProperty(key) {
121
+ return function(object) {
122
+ return object == null ? undefined : object[key];
123
+ };
124
+ }
125
+
126
+ /**
127
+ * The base implementation of `_.propertyOf` without support for deep paths.
128
+ *
129
+ * @private
130
+ * @param {Object} object The object to query.
131
+ * @returns {Function} Returns the new accessor function.
132
+ */
133
+ function basePropertyOf(object) {
134
+ return function(key) {
135
+ return object == null ? undefined : object[key];
136
+ };
137
+ }
138
+
116
139
  /**
117
140
  * The base implementation of `_.reduce` and `_.reduceRight`, without support
118
141
  * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
@@ -151,17 +174,6 @@
151
174
  });
152
175
  }
153
176
 
154
- /**
155
- * Checks if `value` is a global object.
156
- *
157
- * @private
158
- * @param {*} value The value to check.
159
- * @returns {null|Object} Returns `value` if it's a global object, else `null`.
160
- */
161
- function checkGlobal(value) {
162
- return (value && value.Object === Object) ? value : null;
163
- }
164
-
165
177
  /**
166
178
  * Used by `_.escape` to convert characters to HTML entities.
167
179
  *
@@ -169,9 +181,7 @@
169
181
  * @param {string} chr The matched character to escape.
170
182
  * @returns {string} Returns the escaped character.
171
183
  */
172
- function escapeHtmlChar(chr) {
173
- return htmlEscapes[chr];
174
- }
184
+ var escapeHtmlChar = basePropertyOf(htmlEscapes);
175
185
 
176
186
  /**
177
187
  * Checks if `value` is a host object in IE < 9.
@@ -184,6 +194,20 @@
184
194
  return false;
185
195
  }
186
196
 
197
+ /**
198
+ * Creates a function that invokes `func` with its first argument transformed.
199
+ *
200
+ * @private
201
+ * @param {Function} func The function to wrap.
202
+ * @param {Function} transform The argument transform.
203
+ * @returns {Function} Returns the new function.
204
+ */
205
+ function overArg(func, transform) {
206
+ return function(arg) {
207
+ return func(transform(arg));
208
+ };
209
+ }
210
+
187
211
  /*--------------------------------------------------------------------------*/
188
212
 
189
213
  /** Used for built-in method references. */
@@ -283,16 +307,16 @@
283
307
  *
284
308
  * The wrapper methods that are **not** chainable by default are:
285
309
  * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
286
- * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `deburr`, `divide`, `each`,
287
- * `eachRight`, `endsWith`, `eq`, `escape`, `escapeRegExp`, `every`, `find`,
288
- * `findIndex`, `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `first`,
289
- * `floor`, `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`,
290
- * `forOwnRight`, `get`, `gt`, `gte`, `has`, `hasIn`, `head`, `identity`,
291
- * `includes`, `indexOf`, `inRange`, `invoke`, `isArguments`, `isArray`,
292
- * `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, `isBoolean`,
293
- * `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, `isEqualWith`,
294
- * `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, `isMap`,
295
- * `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
310
+ * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
311
+ * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
312
+ * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
313
+ * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
314
+ * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
315
+ * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
316
+ * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
317
+ * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
318
+ * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
319
+ * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
296
320
  * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
297
321
  * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
298
322
  * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
@@ -407,13 +431,13 @@
407
431
  }
408
432
 
409
433
  /**
410
- * The base implementation of `_.delay` and `_.defer` which accepts an array
411
- * of `func` arguments.
434
+ * The base implementation of `_.delay` and `_.defer` which accepts `args`
435
+ * to provide to `func`.
412
436
  *
413
437
  * @private
414
438
  * @param {Function} func The function to delay.
415
439
  * @param {number} wait The number of milliseconds to delay invocation.
416
- * @param {Object} args The arguments to provide to `func`.
440
+ * @param {Array} args The arguments to provide to `func`.
417
441
  * @returns {number} Returns the timer id.
418
442
  */
419
443
  function baseDelay(func, wait, args) {
@@ -573,7 +597,7 @@
573
597
  }
574
598
 
575
599
  /**
576
- * The base implementation of `_.gt` which doesn't coerce arguments to numbers.
600
+ * The base implementation of `_.gt` which doesn't coerce arguments.
577
601
  *
578
602
  * @private
579
603
  * @param {*} value The value to compare.
@@ -585,6 +609,17 @@
585
609
  return value > other;
586
610
  }
587
611
 
612
+ /**
613
+ * The base implementation of `_.isDate` without Node.js optimizations.
614
+ *
615
+ * @private
616
+ * @param {*} value The value to check.
617
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
618
+ */
619
+ function baseIsDate(value) {
620
+ return isObjectLike(value) && objectToString.call(value) == dateTag;
621
+ }
622
+
588
623
  /**
589
624
  * The base implementation of `_.isEqual` which supports partial comparisons
590
625
  * and tracks traversed objects.
@@ -644,13 +679,17 @@
644
679
  isSameTag = objTag == othTag;
645
680
 
646
681
  stack || (stack = []);
647
- var stacked = find(stack, function(entry) {
648
- return entry[0] === object;
682
+ var objStack = find(stack, function(entry) {
683
+ return entry[0] == object;
649
684
  });
650
- if (stacked && stacked[1]) {
651
- return stacked[1] == other;
685
+ var othStack = find(stack, function(entry) {
686
+ return entry[0] == other;
687
+ });
688
+ if (objStack && othStack) {
689
+ return objStack[1] == other;
652
690
  }
653
691
  stack.push([object, other]);
692
+ stack.push([other, object]);
654
693
  if (isSameTag && !objIsObj) {
655
694
  var result = (objIsArr)
656
695
  ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
@@ -679,6 +718,17 @@
679
718
  return result;
680
719
  }
681
720
 
721
+ /**
722
+ * The base implementation of `_.isRegExp` without Node.js optimizations.
723
+ *
724
+ * @private
725
+ * @param {*} value The value to check.
726
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
727
+ */
728
+ function baseIsRegExp(value) {
729
+ return isObject(value) && objectToString.call(value) == regexpTag;
730
+ }
731
+
682
732
  /**
683
733
  * The base implementation of `_.iteratee`.
684
734
  *
@@ -704,9 +754,7 @@
704
754
  * @param {Object} object The object to query.
705
755
  * @returns {Array} Returns the array of property names.
706
756
  */
707
- function baseKeys(object) {
708
- return nativeKeys(Object(object));
709
- }
757
+ var baseKeys = overArg(nativeKeys, Object);
710
758
 
711
759
  /**
712
760
  * The base implementation of `_.keysIn` which doesn't skip the constructor
@@ -727,7 +775,7 @@
727
775
  }
728
776
 
729
777
  /**
730
- * The base implementation of `_.lt` which doesn't coerce arguments to numbers.
778
+ * The base implementation of `_.lt` which doesn't coerce arguments.
731
779
  *
732
780
  * @private
733
781
  * @param {*} value The value to compare.
@@ -804,15 +852,31 @@
804
852
  }
805
853
 
806
854
  /**
807
- * The base implementation of `_.property` without support for deep paths.
855
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
808
856
  *
809
857
  * @private
810
- * @param {string} key The key of the property to get.
811
- * @returns {Function} Returns the new accessor function.
858
+ * @param {Function} func The function to apply a rest parameter to.
859
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
860
+ * @returns {Function} Returns the new function.
812
861
  */
813
- function baseProperty(key) {
814
- return function(object) {
815
- return object == null ? undefined : object[key];
862
+ function baseRest(func, start) {
863
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
864
+ return function() {
865
+ var args = arguments,
866
+ index = -1,
867
+ length = nativeMax(args.length - start, 0),
868
+ array = Array(length);
869
+
870
+ while (++index < length) {
871
+ array[index] = args[start + index];
872
+ }
873
+ index = -1;
874
+ var otherArgs = Array(start + 1);
875
+ while (++index < start) {
876
+ otherArgs[index] = args[index];
877
+ }
878
+ otherArgs[start] = array;
879
+ return func.apply(this, otherArgs);
816
880
  };
817
881
  }
818
882
 
@@ -953,9 +1017,9 @@
953
1017
 
954
1018
  var newValue = customizer
955
1019
  ? customizer(object[key], source[key], key, object, source)
956
- : source[key];
1020
+ : undefined;
957
1021
 
958
- assignValue(object, key, newValue);
1022
+ assignValue(object, key, newValue === undefined ? source[key] : newValue);
959
1023
  }
960
1024
  return object;
961
1025
  }
@@ -968,7 +1032,7 @@
968
1032
  * @returns {Function} Returns the new assigner function.
969
1033
  */
970
1034
  function createAssigner(assigner) {
971
- return rest(function(object, sources) {
1035
+ return baseRest(function(object, sources) {
972
1036
  var index = -1,
973
1037
  length = sources.length,
974
1038
  customizer = length > 1 ? sources[length - 1] : undefined;
@@ -1049,7 +1113,7 @@
1049
1113
  * @param {Function} Ctor The constructor to wrap.
1050
1114
  * @returns {Function} Returns the new wrapped function.
1051
1115
  */
1052
- function createCtorWrapper(Ctor) {
1116
+ function createCtor(Ctor) {
1053
1117
  return function() {
1054
1118
  // Use a `switch` statement to work with class constructors. See
1055
1119
  // http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
@@ -1074,18 +1138,13 @@
1074
1138
  function createFind(findIndexFunc) {
1075
1139
  return function(collection, predicate, fromIndex) {
1076
1140
  var iterable = Object(collection);
1077
- predicate = baseIteratee(predicate, 3);
1078
1141
  if (!isArrayLike(collection)) {
1079
- var props = keys(collection);
1142
+ var iteratee = baseIteratee(predicate, 3);
1143
+ collection = keys(collection);
1144
+ predicate = function(key) { return iteratee(iterable[key], key, iterable); };
1080
1145
  }
1081
- var index = findIndexFunc(props || collection, function(value, key) {
1082
- if (props) {
1083
- key = value;
1084
- value = iterable[key];
1085
- }
1086
- return predicate(value, key, iterable);
1087
- }, fromIndex);
1088
- return index > -1 ? collection[props ? props[index] : index] : undefined;
1146
+ var index = findIndexFunc(collection, predicate, fromIndex);
1147
+ return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
1089
1148
  };
1090
1149
  }
1091
1150
 
@@ -1095,19 +1154,18 @@
1095
1154
  *
1096
1155
  * @private
1097
1156
  * @param {Function} func The function to wrap.
1098
- * @param {number} bitmask The bitmask of wrapper flags. See `createWrapper`
1099
- * for more details.
1157
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
1100
1158
  * @param {*} thisArg The `this` binding of `func`.
1101
1159
  * @param {Array} partials The arguments to prepend to those provided to
1102
1160
  * the new function.
1103
1161
  * @returns {Function} Returns the new wrapped function.
1104
1162
  */
1105
- function createPartialWrapper(func, bitmask, thisArg, partials) {
1163
+ function createPartial(func, bitmask, thisArg, partials) {
1106
1164
  if (typeof func != 'function') {
1107
1165
  throw new TypeError(FUNC_ERROR_TEXT);
1108
1166
  }
1109
1167
  var isBind = bitmask & BIND_FLAG,
1110
- Ctor = createCtorWrapper(func);
1168
+ Ctor = createCtor(func);
1111
1169
 
1112
1170
  function wrapper() {
1113
1171
  var argsIndex = -1,
@@ -1212,18 +1270,14 @@
1212
1270
 
1213
1271
  case boolTag:
1214
1272
  case dateTag:
1215
- // Coerce dates and booleans to numbers, dates to milliseconds and
1216
- // booleans to `1` or `0` treating invalid dates coerced to `NaN` as
1217
- // not equal.
1218
- return +object == +other;
1273
+ case numberTag:
1274
+ // Coerce booleans to `1` or `0` and dates to milliseconds.
1275
+ // Invalid dates are coerced to `NaN`.
1276
+ return eq(+object, +other);
1219
1277
 
1220
1278
  case errorTag:
1221
1279
  return object.name == other.name && object.message == other.message;
1222
1280
 
1223
- case numberTag:
1224
- // Treat `NaN` vs. `NaN` as equal.
1225
- return (object != +object) ? other != +other : object == +other;
1226
-
1227
1281
  case regexpTag:
1228
1282
  case stringTag:
1229
1283
  // Coerce regexes to strings and treat strings, primitives and objects,
@@ -1399,7 +1453,7 @@
1399
1453
  * @since 1.1.0
1400
1454
  * @category Array
1401
1455
  * @param {Array} array The array to search.
1402
- * @param {Array|Function|Object|string} [predicate=_.identity]
1456
+ * @param {Function} [predicate=_.identity]
1403
1457
  * The function invoked per iteration.
1404
1458
  * @param {number} [fromIndex=0] The index to search from.
1405
1459
  * @returns {number} Returns the index of the found element, else `-1`.
@@ -1735,7 +1789,7 @@
1735
1789
  * @since 0.1.0
1736
1790
  * @category Collection
1737
1791
  * @param {Array|Object} collection The collection to iterate over.
1738
- * @param {Array|Function|Object|string} [predicate=_.identity]
1792
+ * @param {Function} [predicate=_.identity]
1739
1793
  * The function invoked per iteration.
1740
1794
  * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
1741
1795
  * @returns {boolean} Returns `true` if all elements pass the predicate check,
@@ -1772,12 +1826,14 @@
1772
1826
  * `predicate` returns truthy for. The predicate is invoked with three
1773
1827
  * arguments: (value, index|key, collection).
1774
1828
  *
1829
+ * **Note:** Unlike `_.remove`, this method returns a new array.
1830
+ *
1775
1831
  * @static
1776
1832
  * @memberOf _
1777
1833
  * @since 0.1.0
1778
1834
  * @category Collection
1779
1835
  * @param {Array|Object} collection The collection to iterate over.
1780
- * @param {Array|Function|Object|string} [predicate=_.identity]
1836
+ * @param {Function} [predicate=_.identity]
1781
1837
  * The function invoked per iteration.
1782
1838
  * @returns {Array} Returns the new filtered array.
1783
1839
  * @see _.reject
@@ -1817,7 +1873,7 @@
1817
1873
  * @since 0.1.0
1818
1874
  * @category Collection
1819
1875
  * @param {Array|Object} collection The collection to search.
1820
- * @param {Array|Function|Object|string} [predicate=_.identity]
1876
+ * @param {Function} [predicate=_.identity]
1821
1877
  * The function invoked per iteration.
1822
1878
  * @param {number} [fromIndex=0] The index to search from.
1823
1879
  * @returns {*} Returns the matched element, else `undefined`.
@@ -1899,8 +1955,7 @@
1899
1955
  * @since 0.1.0
1900
1956
  * @category Collection
1901
1957
  * @param {Array|Object} collection The collection to iterate over.
1902
- * @param {Array|Function|Object|string} [iteratee=_.identity]
1903
- * The function invoked per iteration.
1958
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
1904
1959
  * @returns {Array} Returns the new mapped array.
1905
1960
  * @example
1906
1961
  *
@@ -2007,8 +2062,7 @@
2007
2062
  * @since 0.1.0
2008
2063
  * @category Collection
2009
2064
  * @param {Array|Object} collection The collection to iterate over.
2010
- * @param {Array|Function|Object|string} [predicate=_.identity]
2011
- * The function invoked per iteration.
2065
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
2012
2066
  * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
2013
2067
  * @returns {boolean} Returns `true` if any element passes the predicate check,
2014
2068
  * else `false`.
@@ -2050,8 +2104,8 @@
2050
2104
  * @since 0.1.0
2051
2105
  * @category Collection
2052
2106
  * @param {Array|Object} collection The collection to iterate over.
2053
- * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])}
2054
- * [iteratees=[_.identity]] The iteratees to sort by.
2107
+ * @param {...(Function|Function[])} [iteratees=[_.identity]]
2108
+ * The iteratees to sort by.
2055
2109
  * @returns {Array} Returns the new sorted array.
2056
2110
  * @example
2057
2111
  *
@@ -2101,7 +2155,7 @@
2101
2155
  * @example
2102
2156
  *
2103
2157
  * jQuery(element).on('click', _.before(5, addContactToList));
2104
- * // => allows adding up to 4 contacts to the list
2158
+ * // => Allows adding up to 4 contacts to the list.
2105
2159
  */
2106
2160
  function before(n, func) {
2107
2161
  var result;
@@ -2140,9 +2194,9 @@
2140
2194
  * @returns {Function} Returns the new bound function.
2141
2195
  * @example
2142
2196
  *
2143
- * var greet = function(greeting, punctuation) {
2197
+ * function greet(greeting, punctuation) {
2144
2198
  * return greeting + ' ' + this.user + punctuation;
2145
- * };
2199
+ * }
2146
2200
  *
2147
2201
  * var object = { 'user': 'fred' };
2148
2202
  *
@@ -2155,8 +2209,8 @@
2155
2209
  * bound('hi');
2156
2210
  * // => 'hi fred!'
2157
2211
  */
2158
- var bind = rest(function(func, thisArg, partials) {
2159
- return createPartialWrapper(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials);
2212
+ var bind = baseRest(function(func, thisArg, partials) {
2213
+ return createPartial(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials);
2160
2214
  });
2161
2215
 
2162
2216
  /**
@@ -2177,7 +2231,7 @@
2177
2231
  * }, 'deferred');
2178
2232
  * // => Logs 'deferred' after one or more milliseconds.
2179
2233
  */
2180
- var defer = rest(function(func, args) {
2234
+ var defer = baseRest(function(func, args) {
2181
2235
  return baseDelay(func, 1, args);
2182
2236
  });
2183
2237
 
@@ -2200,7 +2254,7 @@
2200
2254
  * }, 1000, 'later');
2201
2255
  * // => Logs 'later' after one second.
2202
2256
  */
2203
- var delay = rest(function(func, wait, args) {
2257
+ var delay = baseRest(function(func, wait, args) {
2204
2258
  return baseDelay(func, toNumber(wait) || 0, args);
2205
2259
  });
2206
2260
 
@@ -2229,7 +2283,8 @@
2229
2283
  throw new TypeError(FUNC_ERROR_TEXT);
2230
2284
  }
2231
2285
  return function() {
2232
- return !predicate.apply(this, arguments);
2286
+ var args = arguments;
2287
+ return !predicate.apply(this, args);
2233
2288
  };
2234
2289
  }
2235
2290
 
@@ -2249,61 +2304,12 @@
2249
2304
  * var initialize = _.once(createApplication);
2250
2305
  * initialize();
2251
2306
  * initialize();
2252
- * // `initialize` invokes `createApplication` once
2307
+ * // => `createApplication` is invoked once
2253
2308
  */
2254
2309
  function once(func) {
2255
2310
  return before(2, func);
2256
2311
  }
2257
2312
 
2258
- /**
2259
- * Creates a function that invokes `func` with the `this` binding of the
2260
- * created function and arguments from `start` and beyond provided as
2261
- * an array.
2262
- *
2263
- * **Note:** This method is based on the
2264
- * [rest parameter](https://mdn.io/rest_parameters).
2265
- *
2266
- * @static
2267
- * @memberOf _
2268
- * @since 4.0.0
2269
- * @category Function
2270
- * @param {Function} func The function to apply a rest parameter to.
2271
- * @param {number} [start=func.length-1] The start position of the rest parameter.
2272
- * @returns {Function} Returns the new function.
2273
- * @example
2274
- *
2275
- * var say = _.rest(function(what, names) {
2276
- * return what + ' ' + _.initial(names).join(', ') +
2277
- * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
2278
- * });
2279
- *
2280
- * say('hello', 'fred', 'barney', 'pebbles');
2281
- * // => 'hello fred, barney, & pebbles'
2282
- */
2283
- function rest(func, start) {
2284
- if (typeof func != 'function') {
2285
- throw new TypeError(FUNC_ERROR_TEXT);
2286
- }
2287
- start = nativeMax(start === undefined ? (func.length - 1) : toInteger(start), 0);
2288
- return function() {
2289
- var args = arguments,
2290
- index = -1,
2291
- length = nativeMax(args.length - start, 0),
2292
- array = Array(length);
2293
-
2294
- while (++index < length) {
2295
- array[index] = args[start + index];
2296
- }
2297
- var otherArgs = Array(start + 1);
2298
- index = -1;
2299
- while (++index < start) {
2300
- otherArgs[index] = args[index];
2301
- }
2302
- otherArgs[start] = array;
2303
- return func.apply(this, otherArgs);
2304
- };
2305
- }
2306
-
2307
2313
  /*------------------------------------------------------------------------*/
2308
2314
 
2309
2315
  /**
@@ -2353,8 +2359,8 @@
2353
2359
  * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
2354
2360
  * @example
2355
2361
  *
2356
- * var object = { 'user': 'fred' };
2357
- * var other = { 'user': 'fred' };
2362
+ * var object = { 'a': 1 };
2363
+ * var other = { 'a': 1 };
2358
2364
  *
2359
2365
  * _.eq(object, object);
2360
2366
  * // => true
@@ -2383,7 +2389,7 @@
2383
2389
  * @since 0.1.0
2384
2390
  * @category Lang
2385
2391
  * @param {*} value The value to check.
2386
- * @returns {boolean} Returns `true` if `value` is correctly classified,
2392
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
2387
2393
  * else `false`.
2388
2394
  * @example
2389
2395
  *
@@ -2405,11 +2411,9 @@
2405
2411
  * @static
2406
2412
  * @memberOf _
2407
2413
  * @since 0.1.0
2408
- * @type {Function}
2409
2414
  * @category Lang
2410
2415
  * @param {*} value The value to check.
2411
- * @returns {boolean} Returns `true` if `value` is correctly classified,
2412
- * else `false`.
2416
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
2413
2417
  * @example
2414
2418
  *
2415
2419
  * _.isArray([1, 2, 3]);
@@ -2492,8 +2496,7 @@
2492
2496
  * @since 0.1.0
2493
2497
  * @category Lang
2494
2498
  * @param {*} value The value to check.
2495
- * @returns {boolean} Returns `true` if `value` is correctly classified,
2496
- * else `false`.
2499
+ * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
2497
2500
  * @example
2498
2501
  *
2499
2502
  * _.isBoolean(false);
@@ -2515,8 +2518,7 @@
2515
2518
  * @since 0.1.0
2516
2519
  * @category Lang
2517
2520
  * @param {*} value The value to check.
2518
- * @returns {boolean} Returns `true` if `value` is correctly classified,
2519
- * else `false`.
2521
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
2520
2522
  * @example
2521
2523
  *
2522
2524
  * _.isDate(new Date);
@@ -2525,9 +2527,7 @@
2525
2527
  * _.isDate('Mon April 23 2012');
2526
2528
  * // => false
2527
2529
  */
2528
- function isDate(value) {
2529
- return isObjectLike(value) && objectToString.call(value) == dateTag;
2530
- }
2530
+ var isDate = baseIsDate;
2531
2531
 
2532
2532
  /**
2533
2533
  * Checks if `value` is an empty object, collection, map, or set.
@@ -2591,8 +2591,8 @@
2591
2591
  * else `false`.
2592
2592
  * @example
2593
2593
  *
2594
- * var object = { 'user': 'fred' };
2595
- * var other = { 'user': 'fred' };
2594
+ * var object = { 'a': 1 };
2595
+ * var other = { 'a': 1 };
2596
2596
  *
2597
2597
  * _.isEqual(object, other);
2598
2598
  * // => true
@@ -2643,8 +2643,7 @@
2643
2643
  * @since 0.1.0
2644
2644
  * @category Lang
2645
2645
  * @param {*} value The value to check.
2646
- * @returns {boolean} Returns `true` if `value` is correctly classified,
2647
- * else `false`.
2646
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
2648
2647
  * @example
2649
2648
  *
2650
2649
  * _.isFunction(_);
@@ -2818,8 +2817,7 @@
2818
2817
  * @since 0.1.0
2819
2818
  * @category Lang
2820
2819
  * @param {*} value The value to check.
2821
- * @returns {boolean} Returns `true` if `value` is correctly classified,
2822
- * else `false`.
2820
+ * @returns {boolean} Returns `true` if `value` is a number, else `false`.
2823
2821
  * @example
2824
2822
  *
2825
2823
  * _.isNumber(3);
@@ -2847,8 +2845,7 @@
2847
2845
  * @since 0.1.0
2848
2846
  * @category Lang
2849
2847
  * @param {*} value The value to check.
2850
- * @returns {boolean} Returns `true` if `value` is correctly classified,
2851
- * else `false`.
2848
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
2852
2849
  * @example
2853
2850
  *
2854
2851
  * _.isRegExp(/abc/);
@@ -2857,9 +2854,7 @@
2857
2854
  * _.isRegExp('/abc/');
2858
2855
  * // => false
2859
2856
  */
2860
- function isRegExp(value) {
2861
- return isObject(value) && objectToString.call(value) == regexpTag;
2862
- }
2857
+ var isRegExp = baseIsRegExp;
2863
2858
 
2864
2859
  /**
2865
2860
  * Checks if `value` is classified as a `String` primitive or object.
@@ -2869,8 +2864,7 @@
2869
2864
  * @memberOf _
2870
2865
  * @category Lang
2871
2866
  * @param {*} value The value to check.
2872
- * @returns {boolean} Returns `true` if `value` is correctly classified,
2873
- * else `false`.
2867
+ * @returns {boolean} Returns `true` if `value` is a string, else `false`.
2874
2868
  * @example
2875
2869
  *
2876
2870
  * _.isString('abc');
@@ -3037,18 +3031,18 @@
3037
3031
  * @example
3038
3032
  *
3039
3033
  * function Foo() {
3040
- * this.c = 3;
3034
+ * this.a = 1;
3041
3035
  * }
3042
3036
  *
3043
3037
  * function Bar() {
3044
- * this.e = 5;
3038
+ * this.c = 3;
3045
3039
  * }
3046
3040
  *
3047
- * Foo.prototype.d = 4;
3048
- * Bar.prototype.f = 6;
3041
+ * Foo.prototype.b = 2;
3042
+ * Bar.prototype.d = 4;
3049
3043
  *
3050
- * _.assign({ 'a': 1 }, new Foo, new Bar);
3051
- * // => { 'a': 1, 'c': 3, 'e': 5 }
3044
+ * _.assign({ 'a': 0 }, new Foo, new Bar);
3045
+ * // => { 'a': 1, 'c': 3 }
3052
3046
  */
3053
3047
  var assign = createAssigner(function(object, source) {
3054
3048
  copyObject(source, keys(source), object);
@@ -3072,18 +3066,18 @@
3072
3066
  * @example
3073
3067
  *
3074
3068
  * function Foo() {
3075
- * this.b = 2;
3069
+ * this.a = 1;
3076
3070
  * }
3077
3071
  *
3078
3072
  * function Bar() {
3079
- * this.d = 4;
3073
+ * this.c = 3;
3080
3074
  * }
3081
3075
  *
3082
- * Foo.prototype.c = 3;
3083
- * Bar.prototype.e = 5;
3076
+ * Foo.prototype.b = 2;
3077
+ * Bar.prototype.d = 4;
3084
3078
  *
3085
- * _.assignIn({ 'a': 1 }, new Foo, new Bar);
3086
- * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 }
3079
+ * _.assignIn({ 'a': 0 }, new Foo, new Bar);
3080
+ * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
3087
3081
  */
3088
3082
  var assignIn = createAssigner(function(object, source) {
3089
3083
  copyObject(source, keysIn(source), object);
@@ -3179,10 +3173,10 @@
3179
3173
  * @see _.defaultsDeep
3180
3174
  * @example
3181
3175
  *
3182
- * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
3183
- * // => { 'user': 'barney', 'age': 36 }
3176
+ * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
3177
+ * // => { 'a': 1, 'b': 2 }
3184
3178
  */
3185
- var defaults = rest(function(args) {
3179
+ var defaults = baseRest(function(args) {
3186
3180
  args.push(undefined, assignInDefaults);
3187
3181
  return assignInWith.apply(undefined, args);
3188
3182
  });
@@ -3290,7 +3284,7 @@
3290
3284
  * _.pick(object, ['a', 'c']);
3291
3285
  * // => { 'a': 1, 'c': 3 }
3292
3286
  */
3293
- var pick = rest(function(object, props) {
3287
+ var pick = baseRest(function(object, props) {
3294
3288
  return object == null ? {} : basePick(object, baseMap(baseFlatten(props, 1), toKey));
3295
3289
  });
3296
3290
 
@@ -3407,7 +3401,7 @@
3407
3401
  /*------------------------------------------------------------------------*/
3408
3402
 
3409
3403
  /**
3410
- * This method returns the first argument given to it.
3404
+ * This method returns the first argument it receives.
3411
3405
  *
3412
3406
  * @static
3413
3407
  * @since 0.1.0
@@ -3417,7 +3411,7 @@
3417
3411
  * @returns {*} Returns `value`.
3418
3412
  * @example
3419
3413
  *
3420
- * var object = { 'user': 'fred' };
3414
+ * var object = { 'a': 1 };
3421
3415
  *
3422
3416
  * console.log(_.identity(object) === object);
3423
3417
  * // => true
@@ -3473,10 +3467,10 @@
3473
3467
  /**
3474
3468
  * Creates a function that performs a partial deep comparison between a given
3475
3469
  * object and `source`, returning `true` if the given object has equivalent
3476
- * property values, else `false`. The created function is equivalent to
3477
- * `_.isMatch` with a `source` partially applied.
3470
+ * property values, else `false`.
3478
3471
  *
3479
- * **Note:** This method supports comparing the same values as `_.isEqual`.
3472
+ * **Note:** The created function supports comparing the same values as
3473
+ * `_.isEqual` is equivalent to `_.isMatch` with `source` partially applied.
3480
3474
  *
3481
3475
  * @static
3482
3476
  * @memberOf _
@@ -3486,13 +3480,13 @@
3486
3480
  * @returns {Function} Returns the new spec function.
3487
3481
  * @example
3488
3482
  *
3489
- * var users = [
3490
- * { 'user': 'barney', 'age': 36, 'active': true },
3491
- * { 'user': 'fred', 'age': 40, 'active': false }
3483
+ * var objects = [
3484
+ * { 'a': 1, 'b': 2, 'c': 3 },
3485
+ * { 'a': 4, 'b': 5, 'c': 6 }
3492
3486
  * ];
3493
3487
  *
3494
- * _.filter(users, _.matches({ 'age': 40, 'active': false }));
3495
- * // => [{ 'user': 'fred', 'age': 40, 'active': false }]
3488
+ * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
3489
+ * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
3496
3490
  */
3497
3491
  function matches(source) {
3498
3492
  return baseMatches(assign({}, source));
@@ -3591,7 +3585,7 @@
3591
3585
  }
3592
3586
 
3593
3587
  /**
3594
- * A method that returns `undefined`.
3588
+ * This method returns `undefined`.
3595
3589
  *
3596
3590
  * @static
3597
3591
  * @memberOf _
@@ -3801,22 +3795,21 @@
3801
3795
 
3802
3796
  /*--------------------------------------------------------------------------*/
3803
3797
 
3804
- // Expose Lodash on the free variable `window` or `self` when available so it's
3805
- // globally accessible, even when bundled with Browserify, Webpack, etc. This
3806
- // also prevents errors in cases where Lodash is loaded by a script tag in the
3807
- // presence of an AMD loader. See http://requirejs.org/docs/errors.html#mismatch
3808
- // for more details. Use `_.noConflict` to remove Lodash from the global object.
3809
- (freeSelf || {})._ = lodash;
3810
-
3811
- // Some AMD build optimizers like r.js check for condition patterns like the following:
3798
+ // Some AMD build optimizers, like r.js, check for condition patterns like:
3812
3799
  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
3800
+ // Expose Lodash on the global object to prevent errors when Lodash is
3801
+ // loaded by a script tag in the presence of an AMD loader.
3802
+ // See http://requirejs.org/docs/errors.html#mismatch for more details.
3803
+ // Use `_.noConflict` to remove Lodash from the global object.
3804
+ root._ = lodash;
3805
+
3813
3806
  // Define as an anonymous module so, through path mapping, it can be
3814
3807
  // referenced as the "underscore" module.
3815
3808
  define(function() {
3816
3809
  return lodash;
3817
3810
  });
3818
3811
  }
3819
- // Check for `exports` after `define` in case a build optimizer adds an `exports` object.
3812
+ // Check for `exports` after `define` in case a build optimizer adds it.
3820
3813
  else if (freeModule) {
3821
3814
  // Export for Node.js.
3822
3815
  (freeModule.exports = lodash)._ = lodash;