lodash-rails 4.17.15 → 4.17.21

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 606ea5f3bc2e964abfd00c115f06ed91fd8e5f483f8981ee8b3540d5c2ec0ba7
4
- data.tar.gz: 797bb8859cf8127c1283aa60cf57bbdf478ecd3fffd6d1d49134ea9800891886
3
+ metadata.gz: 0f29d67f112fad23c3f9c0b41f71cf1eeed612be04e8e66b02d191bd08f2530f
4
+ data.tar.gz: 183e91c08790b90402a67956ff19e3491e0a896f88abd6cec231c490adc4795f
5
5
  SHA512:
6
- metadata.gz: '015684b0611e8c6df90d922c1188df97991041d64cfdd864eed9356ef9a4027c23ec4e13fc9e83ad27c4cf9e54cf7441d290f1f3f76b95c33ffd2f4fa0e05fc3'
7
- data.tar.gz: 5c8364781c1161fdd88e59c521534c111ff576c801883860137e95da59e5d5ab6deae8a3e9d7a0af940bbc27cb28ccba90ca9483de0db75092148cef4e562ee5
6
+ metadata.gz: 3ca56012d88ec4bc7b005c1dc8a80654a18730f74e1ef38658b19de30e4cee7d5ee304416a1e0c8898513fcb4d51ffc87982232d72800ca61d309588b6a1e6b0
7
+ data.tar.gz: e810c5c611301a342f800891a19b16c9d3fc65e1b84153e671a7c2626b5e84e6940ca95fc6714c7a4eff360dab0aa73a910b917388da6c5c6fa780e10b3339a9
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.17.15:
21
+ lodash 4.17.21:
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.17.15"
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.15';
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;