underscore-source 0.4.7 → 0.5.0

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.
@@ -1,5 +1,5 @@
1
1
  module Underscore
2
2
  module Source
3
- VERSION = "0.4.7"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  end
@@ -30,11 +30,8 @@
30
30
  // Export the Underscore object for CommonJS.
31
31
  if (typeof exports !== 'undefined') exports._ = _;
32
32
 
33
- // Maintain a reference to the Object prototype for quick access.
34
- var objPro = Object.prototype;
35
-
36
33
  // Current version.
37
- _.VERSION = '0.4.7';
34
+ _.VERSION = '0.5.0';
38
35
 
39
36
  /*------------------------ Collection Functions: ---------------------------*/
40
37
 
@@ -337,20 +334,20 @@
337
334
 
338
335
  // Create a function bound to a given object (assigning 'this', and arguments,
339
336
  // optionally). Binding with arguments is also known as 'curry'.
340
- _.bind = function(func, context) {
337
+ _.bind = function(func, obj) {
341
338
  var args = _.rest(arguments, 2);
342
339
  return function() {
343
- return func.apply(context || root, args.concat(_.toArray(arguments)));
340
+ return func.apply(obj || root, args.concat(_.toArray(arguments)));
344
341
  };
345
342
  };
346
343
 
347
344
  // Bind all of an object's methods to that object. Useful for ensuring that
348
345
  // all callbacks defined on an object belong to it.
349
- _.bindAll = function() {
350
- var context = Array.prototype.pop.call(arguments);
351
- _.each(arguments, function(methodName) {
352
- context[methodName] = _.bind(context[methodName], context);
353
- });
346
+ _.bindAll = function(obj) {
347
+ var funcs = _.rest(arguments);
348
+ if (funcs.length == 0) funcs = _.functions(obj);
349
+ _.each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
350
+ return obj;
354
351
  };
355
352
 
356
353
  // Delays a function for the given number of milliseconds, and then calls
@@ -395,7 +392,7 @@
395
392
  _.keys = function(obj) {
396
393
  if(_.isArray(obj)) return _.range(0, obj.length);
397
394
  var keys = [];
398
- for (var key in obj) if (objPro.hasOwnProperty.call(obj, key)) keys.push(key);
395
+ for (var key in obj) if (Object.prototype.hasOwnProperty.call(obj, key)) keys.push(key);
399
396
  return keys;
400
397
  };
401
398
 
@@ -425,16 +422,22 @@
425
422
  if (atype != btype) return false;
426
423
  // Basic equality test (watch out for coercions).
427
424
  if (a == b) return true;
428
- // Check dates' integer values.
429
- if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime();
430
425
  // One of them implements an isEqual()?
431
426
  if (a.isEqual) return a.isEqual(b);
427
+ // Check dates' integer values.
428
+ if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime();
432
429
  // Both are NaN?
433
430
  if (_.isNaN(a) && _.isNaN(b)) return true;
431
+ // Compare regular expressions.
432
+ if (_.isRegExp(a) && _.isRegExp(b))
433
+ return a.source === b.source &&
434
+ a.global === b.global &&
435
+ a.ignoreCase === b.ignoreCase &&
436
+ a.multiline === b.multiline;
434
437
  // If a is not an object by this point, we can't handle it.
435
438
  if (atype !== 'object') return false;
436
439
  // Check for different array lengths before comparing contents.
437
- if (!_.isUndefined(a.length) && a.length !== b.length) return false;
440
+ if (a.length && (a.length !== b.length)) return false;
438
441
  // Nothing else worked, deep compare the contents.
439
442
  var aKeys = _.keys(a), bKeys = _.keys(b);
440
443
  // Different object sizes?
@@ -454,31 +457,6 @@
454
457
  return !!(obj && obj.nodeType == 1);
455
458
  };
456
459
 
457
- // Is a given value a real Array?
458
- _.isArray = function(obj) {
459
- return objPro.toString.call(obj) == '[object Array]';
460
- };
461
-
462
- // Is a given value a Function?
463
- _.isFunction = function(obj) {
464
- return objPro.toString.call(obj) == '[object Function]';
465
- };
466
-
467
- // Is a given value a String?
468
- _.isString = function(obj) {
469
- return objPro.toString.call(obj) == '[object String]';
470
- };
471
-
472
- // Is a given value a Number?
473
- _.isNumber = function(obj) {
474
- return objPro.toString.call(obj) == '[object Number]';
475
- };
476
-
477
- // Is a given value a Date?
478
- _.isDate = function(obj) {
479
- return objPro.toString.call(obj) == '[object Date]';
480
- };
481
-
482
460
  // Is the given value NaN -- this one is interesting. NaN != NaN, and
483
461
  // isNaN(undefined) == true, so we make sure it's a number first.
484
462
  _.isNaN = function(obj) {
@@ -495,6 +473,14 @@
495
473
  return typeof obj == 'undefined';
496
474
  };
497
475
 
476
+ // Define the isArray, isDate, isFunction, isNumber, isRegExp, and
477
+ // isString functions based on their toString identifiers.
478
+ _.each(['Array', 'Date', 'Function', 'Number', 'RegExp', 'String'], function(type) {
479
+ _['is' + type] = function(obj) {
480
+ return Object.prototype.toString.call(obj) == '[object ' + type + ']';
481
+ };
482
+ });
483
+
498
484
  /* -------------------------- Utility Functions: -------------------------- */
499
485
 
500
486
  // Run Underscore.js in noConflict mode, returning the '_' variable to its
@@ -523,8 +509,8 @@
523
509
  };
524
510
 
525
511
  // Return a sorted list of the function names available in Underscore.
526
- _.functions = function() {
527
- return _.without(_.keys(_), 'VERSION', 'prototype', 'noConflict').sort();
512
+ _.functions = function(obj) {
513
+ return _.select(_.keys(obj), function(key){ return _.isFunction(obj[key]); }).sort();
528
514
  };
529
515
 
530
516
  // JavaScript templating a-la ERB, pilfered from John Resig's
@@ -565,7 +551,7 @@
565
551
  };
566
552
 
567
553
  // Add all of the Underscore functions to the wrapper object.
568
- _.each(_.functions(), function(name) {
554
+ _.each(_.functions(_), function(name) {
569
555
  wrapper.prototype[name] = function() {
570
556
  Array.prototype.unshift.call(arguments, this._wrapped);
571
557
  return result(_[name].apply(_, arguments), this._chain);
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: underscore-source
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.4.7
5
+ version: 0.5.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Daniel X. Moore