lodash-rails 4.17.14 → 4.17.21

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
  SHA256:
3
- metadata.gz: e76734e1ccd6644ceb22312d4c388f8ba3d5ad0101c8f9db03a429ffba4f4ecb
4
- data.tar.gz: 59422852a442e025e59dc487c96069b162a0a50bc8d8bf4bede9cf8043a5c358
3
+ metadata.gz: 0f29d67f112fad23c3f9c0b41f71cf1eeed612be04e8e66b02d191bd08f2530f
4
+ data.tar.gz: 183e91c08790b90402a67956ff19e3491e0a896f88abd6cec231c490adc4795f
5
5
  SHA512:
6
- metadata.gz: 9780cde64c9da5d20047a322ebbc00a36b458367441f935b8ec02e1f164a7e5c7f2e7f2b7cf3d5822b11ac7c3a8c2834a1b188391353fe6803db874dc6057144
7
- data.tar.gz: 738c52cd4d020660438b09824602ca1b771153923f39900d5f773c3348ca7ed5bdc9e51493402012ed918a2ad3f2b25f41ea4567b00fd4fb49487bf8c64afd1e
6
+ metadata.gz: 3ca56012d88ec4bc7b005c1dc8a80654a18730f74e1ef38658b19de30e4cee7d5ee304416a1e0c8898513fcb4d51ffc87982232d72800ca61d309588b6a1e6b0
7
+ data.tar.gz: e810c5c611301a342f800891a19b16c9d3fc65e1b84153e671a7c2626b5e84e6940ca95fc6714c7a4eff360dab0aa73a910b917388da6c5c6fa780e10b3339a9
data/README.md CHANGED
@@ -18,11 +18,11 @@ Add the necessary library to `app/assets/javascripts/application.js`:
18
18
 
19
19
  ## What's included?
20
20
 
21
- lodash 4.17.14:
21
+ lodash 4.17.21:
22
22
 
23
- * lodash.core.js
24
- * lodash.core.min.js
25
- * lodash.js
26
- * lodash.min.js
23
+ - lodash.core.js
24
+ - lodash.core.min.js
25
+ - lodash.js
26
+ - lodash.min.js
27
27
 
28
28
  Copyright Richard Hubers, released under the MIT License.
@@ -1,5 +1,5 @@
1
1
  module LoDash
2
2
  module Rails
3
- VERSION = "4.17.14"
3
+ VERSION = "4.17.21"
4
4
  end
5
5
  end
@@ -13,41 +13,41 @@
13
13
  var undefined;
14
14
 
15
15
  /** Used as the semantic version number. */
16
- var VERSION = '4.17.14';
16
+ var VERSION = '4.17.21';
17
17
 
18
18
  /** Error message constants. */
19
19
  var FUNC_ERROR_TEXT = 'Expected a function';
20
20
 
21
21
  /** Used to compose bitmasks for value comparisons. */
22
22
  var COMPARE_PARTIAL_FLAG = 1,
23
- COMPARE_UNORDERED_FLAG = 2;
23
+ COMPARE_UNORDERED_FLAG = 2;
24
24
 
25
25
  /** Used to compose bitmasks for function metadata. */
26
26
  var WRAP_BIND_FLAG = 1,
27
- WRAP_PARTIAL_FLAG = 32;
27
+ WRAP_PARTIAL_FLAG = 32;
28
28
 
29
29
  /** Used as references for various `Number` constants. */
30
30
  var INFINITY = 1 / 0,
31
- MAX_SAFE_INTEGER = 9007199254740991;
31
+ MAX_SAFE_INTEGER = 9007199254740991;
32
32
 
33
33
  /** `Object#toString` result references. */
34
34
  var argsTag = '[object Arguments]',
35
- arrayTag = '[object Array]',
36
- asyncTag = '[object AsyncFunction]',
37
- boolTag = '[object Boolean]',
38
- dateTag = '[object Date]',
39
- errorTag = '[object Error]',
40
- funcTag = '[object Function]',
41
- genTag = '[object GeneratorFunction]',
42
- numberTag = '[object Number]',
43
- objectTag = '[object Object]',
44
- proxyTag = '[object Proxy]',
45
- regexpTag = '[object RegExp]',
46
- stringTag = '[object String]';
35
+ arrayTag = '[object Array]',
36
+ asyncTag = '[object AsyncFunction]',
37
+ boolTag = '[object Boolean]',
38
+ dateTag = '[object Date]',
39
+ errorTag = '[object Error]',
40
+ funcTag = '[object Function]',
41
+ genTag = '[object GeneratorFunction]',
42
+ numberTag = '[object Number]',
43
+ objectTag = '[object Object]',
44
+ proxyTag = '[object Proxy]',
45
+ regexpTag = '[object RegExp]',
46
+ stringTag = '[object String]';
47
47
 
48
48
  /** Used to match HTML entities and HTML characters. */
49
49
  var reUnescapedHtml = /[&<>"']/g,
50
- reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
50
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
51
51
 
52
52
  /** Used to detect unsigned integer values. */
53
53
  var reIsUint = /^(?:0|[1-9]\d*)$/;
@@ -104,7 +104,7 @@
104
104
  */
105
105
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
106
106
  var length = array.length,
107
- index = fromIndex + (fromRight ? 1 : -1);
107
+ index = fromIndex + (fromRight ? 1 : -1);
108
108
 
109
109
  while ((fromRight ? index-- : ++index < length)) {
110
110
  if (predicate(array[index], index, array)) {
@@ -205,7 +205,7 @@
205
205
 
206
206
  /** Used for built-in method references. */
207
207
  var arrayProto = Array.prototype,
208
- objectProto = Object.prototype;
208
+ objectProto = Object.prototype;
209
209
 
210
210
  /** Used to check objects for own properties. */
211
211
  var hasOwnProperty = objectProto.hasOwnProperty;
@@ -225,12 +225,12 @@
225
225
 
226
226
  /** Built-in value references. */
227
227
  var objectCreate = Object.create,
228
- propertyIsEnumerable = objectProto.propertyIsEnumerable;
228
+ propertyIsEnumerable = objectProto.propertyIsEnumerable;
229
229
 
230
230
  /* Built-in method references for those with the same name as other `lodash` methods. */
231
231
  var nativeIsFinite = root.isFinite,
232
- nativeKeys = overArg(Object.keys, Object),
233
- nativeMax = Math.max;
232
+ nativeKeys = overArg(Object.keys, Object),
233
+ nativeMax = Math.max;
234
234
 
235
235
  /*------------------------------------------------------------------------*/
236
236
 
@@ -412,7 +412,7 @@
412
412
  function assignValue(object, key, value) {
413
413
  var objValue = object[key];
414
414
  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
415
- (value === undefined && !(key in object))) {
415
+ (value === undefined && !(key in object))) {
416
416
  baseAssignValue(object, key, value);
417
417
  }
418
418
  }
@@ -487,18 +487,18 @@
487
487
  */
488
488
  function baseExtremum(array, iteratee, comparator) {
489
489
  var index = -1,
490
- length = array.length;
490
+ length = array.length;
491
491
 
492
492
  while (++index < length) {
493
493
  var value = array[index],
494
- current = iteratee(value);
494
+ current = iteratee(value);
495
495
 
496
496
  if (current != null && (computed === undefined
497
- ? (current === current && !false)
498
- : comparator(current, computed)
499
- )) {
497
+ ? (current === current && !false)
498
+ : comparator(current, computed)
499
+ )) {
500
500
  var computed = current,
501
- result = value;
501
+ result = value;
502
502
  }
503
503
  }
504
504
  return result;
@@ -535,7 +535,7 @@
535
535
  */
536
536
  function baseFlatten(array, depth, predicate, isStrict, result) {
537
537
  var index = -1,
538
- length = array.length;
538
+ length = array.length;
539
539
 
540
540
  predicate || (predicate = isFlattenable);
541
541
  result || (result = []);
@@ -680,16 +680,16 @@
680
680
  */
681
681
  function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
682
682
  var objIsArr = isArray(object),
683
- othIsArr = isArray(other),
684
- objTag = objIsArr ? arrayTag : baseGetTag(object),
685
- othTag = othIsArr ? arrayTag : baseGetTag(other);
683
+ othIsArr = isArray(other),
684
+ objTag = objIsArr ? arrayTag : baseGetTag(object),
685
+ othTag = othIsArr ? arrayTag : baseGetTag(other);
686
686
 
687
687
  objTag = objTag == argsTag ? objectTag : objTag;
688
688
  othTag = othTag == argsTag ? objectTag : othTag;
689
689
 
690
690
  var objIsObj = objTag == objectTag,
691
- othIsObj = othTag == objectTag,
692
- isSameTag = objTag == othTag;
691
+ othIsObj = othTag == objectTag,
692
+ isSameTag = objTag == othTag;
693
693
 
694
694
  stack || (stack = []);
695
695
  var objStack = find(stack, function(entry) {
@@ -712,11 +712,11 @@
712
712
  }
713
713
  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
714
714
  var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
715
- othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
715
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
716
716
 
717
717
  if (objIsWrapped || othIsWrapped) {
718
718
  var objUnwrapped = objIsWrapped ? object.value() : object,
719
- othUnwrapped = othIsWrapped ? other.value() : other;
719
+ othUnwrapped = othIsWrapped ? other.value() : other;
720
720
 
721
721
  var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
722
722
  stack.pop();
@@ -782,7 +782,7 @@
782
782
  */
783
783
  function baseMap(collection, iteratee) {
784
784
  var index = -1,
785
- result = isArrayLike(collection) ? Array(collection.length) : [];
785
+ result = isArrayLike(collection) ? Array(collection.length) : [];
786
786
 
787
787
  baseEach(collection, function(value, key, collection) {
788
788
  result[++index] = iteratee(value, key, collection);
@@ -808,8 +808,8 @@
808
808
  while (length--) {
809
809
  var key = props[length];
810
810
  if (!(key in object &&
811
- baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG)
812
- )) {
811
+ baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG)
812
+ )) {
813
813
  return false;
814
814
  }
815
815
  }
@@ -859,7 +859,7 @@
859
859
  */
860
860
  function baseSlice(array, start, end) {
861
861
  var index = -1,
862
- length = array.length;
862
+ length = array.length;
863
863
 
864
864
  if (start < 0) {
865
865
  start = -start > length ? 0 : (length + start);
@@ -937,27 +937,27 @@
937
937
  function compareAscending(value, other) {
938
938
  if (value !== other) {
939
939
  var valIsDefined = value !== undefined,
940
- valIsNull = value === null,
941
- valIsReflexive = value === value,
942
- valIsSymbol = false;
940
+ valIsNull = value === null,
941
+ valIsReflexive = value === value,
942
+ valIsSymbol = false;
943
943
 
944
944
  var othIsDefined = other !== undefined,
945
- othIsNull = other === null,
946
- othIsReflexive = other === other,
947
- othIsSymbol = false;
945
+ othIsNull = other === null,
946
+ othIsReflexive = other === other,
947
+ othIsSymbol = false;
948
948
 
949
949
  if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
950
- (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
951
- (valIsNull && othIsDefined && othIsReflexive) ||
952
- (!valIsDefined && othIsReflexive) ||
953
- !valIsReflexive) {
950
+ (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
951
+ (valIsNull && othIsDefined && othIsReflexive) ||
952
+ (!valIsDefined && othIsReflexive) ||
953
+ !valIsReflexive) {
954
954
  return 1;
955
955
  }
956
956
  if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
957
- (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
958
- (othIsNull && valIsDefined && valIsReflexive) ||
959
- (!othIsDefined && valIsReflexive) ||
960
- !othIsReflexive) {
957
+ (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
958
+ (othIsNull && valIsDefined && valIsReflexive) ||
959
+ (!othIsDefined && valIsReflexive) ||
960
+ !othIsReflexive) {
961
961
  return -1;
962
962
  }
963
963
  }
@@ -979,7 +979,7 @@
979
979
  object || (object = {});
980
980
 
981
981
  var index = -1,
982
- length = props.length;
982
+ length = props.length;
983
983
 
984
984
  while (++index < length) {
985
985
  var key = props[index];
@@ -1010,8 +1010,8 @@
1010
1010
  function createAssigner(assigner) {
1011
1011
  return baseRest(function(object, sources) {
1012
1012
  var index = -1,
1013
- length = sources.length,
1014
- customizer = length > 1 ? sources[length - 1] : undefined;
1013
+ length = sources.length,
1014
+ customizer = length > 1 ? sources[length - 1] : undefined;
1015
1015
 
1016
1016
  customizer = (assigner.length > 3 && typeof customizer == 'function')
1017
1017
  ? (length--, customizer)
@@ -1045,8 +1045,8 @@
1045
1045
  return eachFunc(collection, iteratee);
1046
1046
  }
1047
1047
  var length = collection.length,
1048
- index = fromRight ? length : -1,
1049
- iterable = Object(collection);
1048
+ index = fromRight ? length : -1,
1049
+ iterable = Object(collection);
1050
1050
 
1051
1051
  while ((fromRight ? index-- : ++index < length)) {
1052
1052
  if (iteratee(iterable[index], index, iterable) === false) {
@@ -1067,9 +1067,9 @@
1067
1067
  function createBaseFor(fromRight) {
1068
1068
  return function(object, iteratee, keysFunc) {
1069
1069
  var index = -1,
1070
- iterable = Object(object),
1071
- props = keysFunc(object),
1072
- length = props.length;
1070
+ iterable = Object(object),
1071
+ props = keysFunc(object),
1072
+ length = props.length;
1073
1073
 
1074
1074
  while (length--) {
1075
1075
  var key = props[fromRight ? length : ++index];
@@ -1096,7 +1096,7 @@
1096
1096
  // for more details.
1097
1097
  var args = arguments;
1098
1098
  var thisBinding = baseCreate(Ctor.prototype),
1099
- result = Ctor.apply(thisBinding, args);
1099
+ result = Ctor.apply(thisBinding, args);
1100
1100
 
1101
1101
  // Mimic the constructor's `return` behavior.
1102
1102
  // See https://es5.github.io/#x13.2.2 for more details.
@@ -1141,15 +1141,15 @@
1141
1141
  throw new TypeError(FUNC_ERROR_TEXT);
1142
1142
  }
1143
1143
  var isBind = bitmask & WRAP_BIND_FLAG,
1144
- Ctor = createCtor(func);
1144
+ Ctor = createCtor(func);
1145
1145
 
1146
1146
  function wrapper() {
1147
1147
  var argsIndex = -1,
1148
- argsLength = arguments.length,
1149
- leftIndex = -1,
1150
- leftLength = partials.length,
1151
- args = Array(leftLength + argsLength),
1152
- fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
1148
+ argsLength = arguments.length,
1149
+ leftIndex = -1,
1150
+ leftLength = partials.length,
1151
+ args = Array(leftLength + argsLength),
1152
+ fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
1153
1153
 
1154
1154
  while (++leftIndex < leftLength) {
1155
1155
  args[leftIndex] = partials[leftIndex];
@@ -1177,20 +1177,26 @@
1177
1177
  */
1178
1178
  function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
1179
1179
  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
1180
- arrLength = array.length,
1181
- othLength = other.length;
1180
+ arrLength = array.length,
1181
+ othLength = other.length;
1182
1182
 
1183
1183
  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
1184
1184
  return false;
1185
1185
  }
1186
+ // Check that cyclic values are equal.
1187
+ var arrStacked = stack.get(array);
1188
+ var othStacked = stack.get(other);
1189
+ if (arrStacked && othStacked) {
1190
+ return arrStacked == other && othStacked == array;
1191
+ }
1186
1192
  var index = -1,
1187
- result = true,
1188
- seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined;
1193
+ result = true,
1194
+ seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined;
1189
1195
 
1190
1196
  // Ignore non-index properties.
1191
1197
  while (++index < arrLength) {
1192
1198
  var arrValue = array[index],
1193
- othValue = other[index];
1199
+ othValue = other[index];
1194
1200
 
1195
1201
  var compared;
1196
1202
  if (compared !== undefined) {
@@ -1203,18 +1209,18 @@
1203
1209
  // Recursively compare arrays (susceptible to call stack limits).
1204
1210
  if (seen) {
1205
1211
  if (!baseSome(other, function(othValue, othIndex) {
1206
- if (!indexOf(seen, othIndex) &&
1207
- (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
1208
- return seen.push(othIndex);
1209
- }
1210
- })) {
1212
+ if (!indexOf(seen, othIndex) &&
1213
+ (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
1214
+ return seen.push(othIndex);
1215
+ }
1216
+ })) {
1211
1217
  result = false;
1212
1218
  break;
1213
1219
  }
1214
1220
  } else if (!(
1215
- arrValue === othValue ||
1216
- equalFunc(arrValue, othValue, bitmask, customizer, stack)
1217
- )) {
1221
+ arrValue === othValue ||
1222
+ equalFunc(arrValue, othValue, bitmask, customizer, stack)
1223
+ )) {
1218
1224
  result = false;
1219
1225
  break;
1220
1226
  }
@@ -1278,10 +1284,10 @@
1278
1284
  */
1279
1285
  function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
1280
1286
  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
1281
- objProps = keys(object),
1282
- objLength = objProps.length,
1283
- othProps = keys(other),
1284
- othLength = othProps.length;
1287
+ objProps = keys(object),
1288
+ objLength = objProps.length,
1289
+ othProps = keys(other),
1290
+ othLength = othProps.length;
1285
1291
 
1286
1292
  if (objLength != othLength && !isPartial) {
1287
1293
  return false;
@@ -1293,20 +1299,26 @@
1293
1299
  return false;
1294
1300
  }
1295
1301
  }
1302
+ // Check that cyclic values are equal.
1303
+ var objStacked = stack.get(object);
1304
+ var othStacked = stack.get(other);
1305
+ if (objStacked && othStacked) {
1306
+ return objStacked == other && othStacked == object;
1307
+ }
1296
1308
  var result = true;
1297
1309
 
1298
1310
  var skipCtor = isPartial;
1299
1311
  while (++index < objLength) {
1300
1312
  key = objProps[index];
1301
1313
  var objValue = object[key],
1302
- othValue = other[key];
1314
+ othValue = other[key];
1303
1315
 
1304
1316
  var compared;
1305
1317
  // Recursively compare objects (susceptible to call stack limits).
1306
1318
  if (!(compared === undefined
1307
- ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
1308
- : compared
1309
- )) {
1319
+ ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
1320
+ : compared
1321
+ )) {
1310
1322
  result = false;
1311
1323
  break;
1312
1324
  }
@@ -1314,13 +1326,13 @@
1314
1326
  }
1315
1327
  if (result && !skipCtor) {
1316
1328
  var objCtor = object.constructor,
1317
- othCtor = other.constructor;
1329
+ othCtor = other.constructor;
1318
1330
 
1319
1331
  // Non `Object` object instances with different constructors are not equal.
1320
1332
  if (objCtor != othCtor &&
1321
- ('constructor' in object && 'constructor' in other) &&
1322
- !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
1323
- typeof othCtor == 'function' && othCtor instanceof othCtor)) {
1333
+ ('constructor' in object && 'constructor' in other) &&
1334
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
1335
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
1324
1336
  result = false;
1325
1337
  }
1326
1338
  }
@@ -1364,7 +1376,7 @@
1364
1376
  return !!length &&
1365
1377
  (type == 'number' ||
1366
1378
  (type != 'symbol' && reIsUint.test(value))) &&
1367
- (value > -1 && value % 1 == 0 && value < length);
1379
+ (value > -1 && value % 1 == 0 && value < length);
1368
1380
  }
1369
1381
 
1370
1382
  /**
@@ -1383,9 +1395,9 @@
1383
1395
  }
1384
1396
  var type = typeof index;
1385
1397
  if (type == 'number'
1386
- ? (isArrayLike(object) && isIndex(index, object.length))
1387
- : (type == 'string' && index in object)
1388
- ) {
1398
+ ? (isArrayLike(object) && isIndex(index, object.length))
1399
+ : (type == 'string' && index in object)
1400
+ ) {
1389
1401
  return eq(object[index], value);
1390
1402
  }
1391
1403
  return false;
@@ -1434,9 +1446,9 @@
1434
1446
  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
1435
1447
  return function() {
1436
1448
  var args = arguments,
1437
- index = -1,
1438
- length = nativeMax(args.length - start, 0),
1439
- array = Array(length);
1449
+ index = -1,
1450
+ length = nativeMax(args.length - start, 0),
1451
+ array = Array(length);
1440
1452
 
1441
1453
  while (++index < length) {
1442
1454
  array[index] = args[start + index];
@@ -1510,8 +1522,8 @@
1510
1522
  return [];
1511
1523
  }
1512
1524
  var args = Array(length - 1),
1513
- array = arguments[0],
1514
- index = length;
1525
+ array = arguments[0],
1526
+ index = length;
1515
1527
 
1516
1528
  while (index--) {
1517
1529
  args[index - 1] = arguments[index];
@@ -1657,7 +1669,7 @@
1657
1669
  fromIndex = 0;
1658
1670
  }
1659
1671
  var index = (fromIndex || 0) - 1,
1660
- isReflexive = value === value;
1672
+ isReflexive = value === value;
1661
1673
 
1662
1674
  while (++index < length) {
1663
1675
  var other = array[index];
@@ -1935,6 +1947,10 @@
1935
1947
  * // The `_.property` iteratee shorthand.
1936
1948
  * _.filter(users, 'active');
1937
1949
  * // => objects for ['barney']
1950
+ *
1951
+ * // Combining several predicates using `_.overEvery` or `_.overSome`.
1952
+ * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
1953
+ * // => objects for ['fred', 'barney']
1938
1954
  */
1939
1955
  function filter(collection, predicate) {
1940
1956
  return baseFilter(collection, baseIteratee(predicate));
@@ -2188,15 +2204,15 @@
2188
2204
  * var users = [
2189
2205
  * { 'user': 'fred', 'age': 48 },
2190
2206
  * { 'user': 'barney', 'age': 36 },
2191
- * { 'user': 'fred', 'age': 40 },
2207
+ * { 'user': 'fred', 'age': 30 },
2192
2208
  * { 'user': 'barney', 'age': 34 }
2193
2209
  * ];
2194
2210
  *
2195
2211
  * _.sortBy(users, [function(o) { return o.user; }]);
2196
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
2212
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
2197
2213
  *
2198
2214
  * _.sortBy(users, ['user', 'age']);
2199
- * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
2215
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
2200
2216
  */
2201
2217
  function sortBy(collection, iteratee) {
2202
2218
  var index = 0;
@@ -2605,8 +2621,8 @@
2605
2621
  */
2606
2622
  function isEmpty(value) {
2607
2623
  if (isArrayLike(value) &&
2608
- (isArray(value) || isString(value) ||
2609
- isFunction(value.splice) || isArguments(value))) {
2624
+ (isArray(value) || isString(value) ||
2625
+ isFunction(value.splice) || isArguments(value))) {
2610
2626
  return !value.length;
2611
2627
  }
2612
2628
  return !nativeKeys(value).length;
@@ -3205,7 +3221,7 @@
3205
3221
  var value = object[key];
3206
3222
 
3207
3223
  if (value === undefined ||
3208
- (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
3224
+ (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
3209
3225
  object[key] = source[key];
3210
3226
  }
3211
3227
  }
@@ -3503,6 +3519,9 @@
3503
3519
  * values against any array or object value, respectively. See `_.isEqual`
3504
3520
  * for a list of supported value comparisons.
3505
3521
  *
3522
+ * **Note:** Multiple values can be checked by combining several matchers
3523
+ * using `_.overSome`
3524
+ *
3506
3525
  * @static
3507
3526
  * @memberOf _
3508
3527
  * @since 3.0.0
@@ -3518,6 +3537,10 @@
3518
3537
  *
3519
3538
  * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
3520
3539
  * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
3540
+ *
3541
+ * // Checking for several possible values
3542
+ * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
3543
+ * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
3521
3544
  */
3522
3545
  function matches(source) {
3523
3546
  return baseMatches(assign({}, source));
@@ -3561,17 +3584,17 @@
3561
3584
  */
3562
3585
  function mixin(object, source, options) {
3563
3586
  var props = keys(source),
3564
- methodNames = baseFunctions(source, props);
3587
+ methodNames = baseFunctions(source, props);
3565
3588
 
3566
3589
  if (options == null &&
3567
- !(isObject(source) && (methodNames.length || !props.length))) {
3590
+ !(isObject(source) && (methodNames.length || !props.length))) {
3568
3591
  options = source;
3569
3592
  source = object;
3570
3593
  object = this;
3571
3594
  methodNames = baseFunctions(source, keys(source));
3572
3595
  }
3573
3596
  var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
3574
- isFunc = isFunction(object);
3597
+ isFunc = isFunction(object);
3575
3598
 
3576
3599
  baseEach(methodNames, function(methodName) {
3577
3600
  var func = source[methodName];
@@ -3581,7 +3604,7 @@
3581
3604
  var chainAll = this.__chain__;
3582
3605
  if (chain || chainAll) {
3583
3606
  var result = object(this.__wrapped__),
3584
- actions = result.__actions__ = copyArray(this.__actions__);
3607
+ actions = result.__actions__ = copyArray(this.__actions__);
3585
3608
 
3586
3609
  actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
3587
3610
  result.__chain__ = chainAll;
@@ -3806,8 +3829,8 @@
3806
3829
  // Add `Array` methods to `lodash.prototype`.
3807
3830
  baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
3808
3831
  var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName],
3809
- chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
3810
- retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName);
3832
+ chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
3833
+ retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName);
3811
3834
 
3812
3835
  lodash.prototype[methodName] = function() {
3813
3836
  var args = arguments;