ember-source 1.8.0.beta.3 → 1.8.0.beta.4

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: bd3e19939120975296f3c49573a60ff1077afaa4
4
- data.tar.gz: 8a0bb39c6f5d4efd9a3029dcfc7a09577769b44a
3
+ metadata.gz: 1ffeb5cdfb2eb08e6473fc492c7492620bb6dab8
4
+ data.tar.gz: 097e80d0bed3b23bc532d963ac4236d2bc68003e
5
5
  SHA512:
6
- metadata.gz: 8e846f081643523a71dce8176e31685dac4b0489b9949d1faf97447c44cd55e2bb0a88274b72ef1dd1ab29ad689d3029413cd90833bc5fc1bacedbb738bbacec
7
- data.tar.gz: 98682ebc8f75b651af4eb556b8cf80856ec137ea4e484de0c0f286aa6aa7840e2e94fb80d8bffc9fda189d14019d5666187c3afba91b479e50638b93321f9217
6
+ metadata.gz: 633d7ca1d371f1a22efc8647b307c03e682ae4ec52c557e200f5a84b6bfc460f7cbd8a2019e451d6b15abdd1154445d4b5833bc776832caff8f4340552c37c02
7
+ data.tar.gz: 9c16f7819ee9d7cea4deb894fcc2be592063eff8e6abb1c7d1b63949f079f92fb55ce8ad99c9a1a5e7742a1ec116efc34888bb821f78d677b35493630186cec4
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.0-beta.3
1
+ 1.8.0-beta.4
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.8.0-beta.3
8
+ * @version 1.8.0-beta.4
9
9
  */
10
10
 
11
11
  (function() {
@@ -82,6 +82,7 @@ define("backburner",
82
82
  var isNumber = __dependency1__.isNumber;
83
83
  var isCoercableNumber = __dependency1__.isCoercableNumber;
84
84
  var wrapInTryCatch = __dependency1__.wrapInTryCatch;
85
+ var now = __dependency1__.now;
85
86
 
86
87
  var needsIETryCatchFix = __dependency2__.needsIETryCatchFix;
87
88
 
@@ -251,9 +252,11 @@ define("backburner",
251
252
  setTimeout: function() {
252
253
  var l = arguments.length;
253
254
  var args = new Array(l);
255
+
254
256
  for (var x = 0; x < l; x++) {
255
257
  args[x] = arguments[x];
256
258
  }
259
+
257
260
  var length = args.length,
258
261
  method, wait, target,
259
262
  methodOrTarget, methodOrWait, methodOrArgs;
@@ -300,7 +303,7 @@ define("backburner",
300
303
  }
301
304
  }
302
305
 
303
- var executeAt = (+new Date()) + parseInt(wait, 10);
306
+ var executeAt = now() + parseInt(wait, 10);
304
307
 
305
308
  if (isString(method)) {
306
309
  method = target[method];
@@ -331,7 +334,7 @@ define("backburner",
331
334
  },
332
335
 
333
336
  throttle: function(target, method /* , args, wait, [immediate] */) {
334
- var self = this;
337
+ var backburner = this;
335
338
  var args = arguments;
336
339
  var immediate = pop.call(args);
337
340
  var wait, throttler, index, timer;
@@ -350,16 +353,16 @@ define("backburner",
350
353
 
351
354
  timer = global.setTimeout(function() {
352
355
  if (!immediate) {
353
- self.run.apply(self, args);
356
+ backburner.run.apply(backburner, args);
354
357
  }
355
- var index = findThrottler(target, method, self._throttlers);
358
+ var index = findThrottler(target, method, backburner._throttlers);
356
359
  if (index > -1) {
357
- self._throttlers.splice(index, 1);
360
+ backburner._throttlers.splice(index, 1);
358
361
  }
359
362
  }, wait);
360
363
 
361
364
  if (immediate) {
362
- self.run.apply(self, args);
365
+ this.run.apply(this, args);
363
366
  }
364
367
 
365
368
  throttler = [target, method, timer];
@@ -370,7 +373,7 @@ define("backburner",
370
373
  },
371
374
 
372
375
  debounce: function(target, method /* , args, wait, [immediate] */) {
373
- var self = this;
376
+ var backburner = this;
374
377
  var args = arguments;
375
378
  var immediate = pop.call(args);
376
379
  var wait, index, debouncee, timer;
@@ -394,16 +397,16 @@ define("backburner",
394
397
 
395
398
  timer = global.setTimeout(function() {
396
399
  if (!immediate) {
397
- self.run.apply(self, args);
400
+ backburner.run.apply(backburner, args);
398
401
  }
399
- var index = findDebouncee(target, method, self._debouncees);
402
+ var index = findDebouncee(target, method, backburner._debouncees);
400
403
  if (index > -1) {
401
- self._debouncees.splice(index, 1);
404
+ backburner._debouncees.splice(index, 1);
402
405
  }
403
406
  }, wait);
404
407
 
405
408
  if (immediate && index === -1) {
406
- self.run.apply(self, args);
409
+ backburner.run.apply(backburner, args);
407
410
  }
408
411
 
409
412
  debouncee = [
@@ -412,7 +415,7 @@ define("backburner",
412
415
  timer
413
416
  ];
414
417
 
415
- self._debouncees.push(debouncee);
418
+ backburner._debouncees.push(debouncee);
416
419
 
417
420
  return debouncee;
418
421
  },
@@ -459,7 +462,7 @@ define("backburner",
459
462
  this._laterTimer = null;
460
463
  }
461
464
  if (this._timers.length > 0) { // Update to next available timer when available
462
- updateLaterTimer(this, this._timers[0], this._timers[0] - (+new Date()));
465
+ updateLaterTimer(this, this._timers[0], this._timers[0] - now());
463
466
  }
464
467
  }
465
468
  return true;
@@ -519,48 +522,48 @@ define("backburner",
519
522
  });
520
523
  }
521
524
 
522
- function updateLaterTimer(self, executeAt, wait) {
523
- var now = (+new Date());
524
- if (!self._laterTimer || executeAt < self._laterTimerExpiresAt || self._laterTimerExpiresAt < now) {
525
+ function updateLaterTimer(backburner, executeAt, wait) {
526
+ var n = now();
527
+ if (!backburner._laterTimer || executeAt < backburner._laterTimerExpiresAt || backburner._laterTimerExpiresAt < n) {
525
528
 
526
- if (self._laterTimer) {
529
+ if (backburner._laterTimer) {
527
530
  // Clear when:
528
531
  // - Already expired
529
532
  // - New timer is earlier
530
- clearTimeout(self._laterTimer);
533
+ clearTimeout(backburner._laterTimer);
531
534
 
532
- if (self._laterTimerExpiresAt < now) { // If timer was never triggered
535
+ if (backburner._laterTimerExpiresAt < n) { // If timer was never triggered
533
536
  // Calculate the left-over wait-time
534
- wait = Math.max(0, executeAt - now);
537
+ wait = Math.max(0, executeAt - n);
535
538
  }
536
539
  }
537
540
 
538
- self._laterTimer = global.setTimeout(function() {
539
- self._laterTimer = null;
540
- self._laterTimerExpiresAt = null;
541
- executeTimers(self);
541
+ backburner._laterTimer = global.setTimeout(function() {
542
+ backburner._laterTimer = null;
543
+ backburner._laterTimerExpiresAt = null;
544
+ executeTimers(backburner);
542
545
  }, wait);
543
546
 
544
- self._laterTimerExpiresAt = now + wait;
547
+ backburner._laterTimerExpiresAt = n + wait;
545
548
  }
546
549
  }
547
550
 
548
- function executeTimers(self) {
549
- var now = +new Date();
551
+ function executeTimers(backburner) {
552
+ var n = now();
550
553
  var fns, i, l;
551
554
 
552
- self.run(function() {
553
- i = searchTimer(now, self._timers);
555
+ backburner.run(function() {
556
+ i = searchTimer(n, backburner._timers);
554
557
 
555
- fns = self._timers.splice(0, i);
558
+ fns = backburner._timers.splice(0, i);
556
559
 
557
560
  for (i = 1, l = fns.length; i < l; i += 2) {
558
- self.schedule(self.options.defaultQueue, null, fns[i]);
561
+ backburner.schedule(backburner.options.defaultQueue, null, fns[i]);
559
562
  }
560
563
  });
561
564
 
562
- if (self._timers.length) {
563
- updateLaterTimer(self, self._timers[0], self._timers[0] - now);
565
+ if (backburner._timers.length) {
566
+ updateLaterTimer(backburner, backburner._timers[0], backburner._timers[0] - n);
564
567
  }
565
568
  }
566
569
 
@@ -713,7 +716,9 @@ define("backburner/deferred-action-queues",
713
716
  var queueIndex = 0;
714
717
  var numberOfQueueItems = queueItems.length;
715
718
 
716
- if (numberOfQueueItems && before) { before(); }
719
+ if (numberOfQueueItems && before) {
720
+ before();
721
+ }
717
722
 
718
723
  while (queueIndex < numberOfQueueItems) {
719
724
  target = queueItems[queueIndex];
@@ -721,10 +726,26 @@ define("backburner/deferred-action-queues",
721
726
  args = queueItems[queueIndex+2];
722
727
  errorRecordedForStack = queueItems[queueIndex+3]; // Debugging assistance
723
728
 
724
- if (isString(method)) { method = target[method]; }
729
+ //
730
+
731
+ if (isString(method)) {
732
+ method = target[method];
733
+ }
725
734
 
726
735
  // method could have been nullified / canceled during flush
727
736
  if (method) {
737
+ //
738
+ // ** Attention intrepid developer **
739
+ //
740
+ // To find out the stack of this task when it was scheduled onto
741
+ // the run loop, add the following to your app.js:
742
+ //
743
+ // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
744
+ //
745
+ // Once that is in place, when you are at a breakpoint and navigate
746
+ // here in the stack explorer, you can look at `errorRecordedForStack.stack`,
747
+ // which will be the captured stack when this job was scheduled.
748
+ //
728
749
  invoke(target, method, args, onError, errorRecordedForStack);
729
750
  }
730
751
 
@@ -732,7 +753,9 @@ define("backburner/deferred-action-queues",
732
753
  }
733
754
 
734
755
  queue._queueBeingFlushed = null;
735
- if (numberOfQueueItems && after) { after(); }
756
+ if (numberOfQueueItems && after) {
757
+ after();
758
+ }
736
759
 
737
760
  if ((priorQueueNameIndex = indexOfPriorQueueWithActions(this, queueNameIndex)) !== -1) {
738
761
  queueNameIndex = priorQueueNameIndex;
@@ -927,12 +950,28 @@ define("backburner/queue",
927
950
 
928
951
  cancel: function(actionToCancel) {
929
952
  var queue = this._queue, currentTarget, currentMethod, i, l;
953
+ var target = actionToCancel.target;
954
+ var method = actionToCancel.method;
955
+ var GUID_KEY = this.globalOptions.GUID_KEY;
956
+
957
+ if (GUID_KEY && this.targetQueues && target) {
958
+ var targetQueue = this.targetQueues[target[GUID_KEY]];
959
+
960
+ if (targetQueue) {
961
+ for (i = 0, l = targetQueue.length; i < l; i++) {
962
+ if (targetQueue[i] === method) {
963
+ targetQueue.splice(i, 1);
964
+ }
965
+ }
966
+ }
967
+ }
930
968
 
931
969
  for (i = 0, l = queue.length; i < l; i += 4) {
932
970
  currentTarget = queue[i];
933
971
  currentMethod = queue[i+1];
934
972
 
935
- if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
973
+ if (currentTarget === target &&
974
+ currentMethod === method) {
936
975
  queue.splice(i, 4);
937
976
  return true;
938
977
  }
@@ -948,7 +987,8 @@ define("backburner/queue",
948
987
  currentTarget = queue[i];
949
988
  currentMethod = queue[i+1];
950
989
 
951
- if (currentTarget === actionToCancel.target && currentMethod === actionToCancel.method) {
990
+ if (currentTarget === target &&
991
+ currentMethod === method) {
952
992
  // don't mess with array during flush
953
993
  // just nullify the method
954
994
  queue[i+1] = null;
@@ -972,7 +1012,11 @@ define("backburner/utils",
972
1012
  }
973
1013
  }
974
1014
 
975
- __exports__.each = each;function isString(suspect) {
1015
+ __exports__.each = each;// Date.now is not available in browsers < IE9
1016
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility
1017
+ var now = Date.now || function() { return new Date().getTime(); };
1018
+ __exports__.now = now;
1019
+ function isString(suspect) {
976
1020
  return typeof suspect === 'string';
977
1021
  }
978
1022
 
@@ -2473,7 +2517,7 @@ define("ember-metal/binding",
2473
2517
  var set = __dependency3__.set;
2474
2518
  var trySet = __dependency3__.trySet;
2475
2519
  var guidFor = __dependency4__.guidFor;
2476
- var Map = __dependency5__.Map;
2520
+ var Map = __dependency5__["default"];
2477
2521
  var addObserver = __dependency6__.addObserver;
2478
2522
  var removeObserver = __dependency6__.removeObserver;
2479
2523
  var _suspendObserver = __dependency6__._suspendObserver;
@@ -2525,7 +2569,7 @@ define("ember-metal/binding",
2525
2569
  this._direction = 'fwd';
2526
2570
  this._from = fromPath;
2527
2571
  this._to = toPath;
2528
- this._directionMap = Map.create();
2572
+ this._directionMap = new Map();
2529
2573
  this._readyToSync = undefined;
2530
2574
  this._oneWay = undefined;
2531
2575
  }
@@ -2711,7 +2755,7 @@ define("ember-metal/binding",
2711
2755
  var fromPath = this._from;
2712
2756
  var toPath = this._to;
2713
2757
 
2714
- directionMap.remove(obj);
2758
+ directionMap.delete(obj);
2715
2759
 
2716
2760
  // if we're synchronizing from the remote object...
2717
2761
  if (direction === 'fwd') {
@@ -3006,7 +3050,7 @@ define("ember-metal/cache",
3006
3050
  value = this.set(key, this.func(key));
3007
3051
  } else if (value === UNDEFINED) {
3008
3052
  this.hits ++;
3009
- value = UNDEFINED;
3053
+ value = undefined;
3010
3054
  } else {
3011
3055
  this.hits ++;
3012
3056
  // nothing to translate
@@ -4725,7 +4769,7 @@ define("ember-metal/core",
4725
4769
 
4726
4770
  @class Ember
4727
4771
  @static
4728
- @version 1.8.0-beta.3
4772
+ @version 1.8.0-beta.4
4729
4773
  */
4730
4774
 
4731
4775
  if ('undefined' === typeof Ember) {
@@ -4752,10 +4796,10 @@ define("ember-metal/core",
4752
4796
  /**
4753
4797
  @property VERSION
4754
4798
  @type String
4755
- @default '1.8.0-beta.3'
4799
+ @default '1.8.0-beta.4'
4756
4800
  @static
4757
4801
  */
4758
- Ember.VERSION = '1.8.0-beta.3';
4802
+ Ember.VERSION = '1.8.0-beta.4';
4759
4803
 
4760
4804
  /**
4761
4805
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -6541,8 +6585,8 @@ define("ember-metal/logger",
6541
6585
  };
6542
6586
  });
6543
6587
  define("ember-metal/map",
6544
- ["ember-metal/utils","ember-metal/array","ember-metal/platform","exports"],
6545
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
6588
+ ["ember-metal/utils","ember-metal/array","ember-metal/platform","ember-metal/deprecate_property","exports"],
6589
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
6546
6590
  "use strict";
6547
6591
  /**
6548
6592
  @module ember-metal
@@ -6559,9 +6603,7 @@ define("ember-metal/map",
6559
6603
 
6560
6604
  This implementation follows the current iteration of the ES6 proposal for
6561
6605
  maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets),
6562
- with two exceptions. First, because we need our implementation to be pleasant
6563
- on older browsers, we do not use the `delete` name (using `remove` instead).
6564
- Second, as we do not have the luxury of in-VM iteration, we implement a
6606
+ with one exception: as we do not have the luxury of in-VM iteration, we implement a
6565
6607
  forEach method for iteration.
6566
6608
 
6567
6609
  Map is mocked out to look like an Ember object, so you can do
@@ -6571,6 +6613,7 @@ define("ember-metal/map",
6571
6613
  var guidFor = __dependency1__.guidFor;
6572
6614
  var indexOf = __dependency2__.indexOf;
6573
6615
  var create = __dependency3__.create;
6616
+ var deprecateProperty = __dependency4__.deprecateProperty;
6574
6617
 
6575
6618
  function missingFunction(fn) {
6576
6619
  throw new TypeError('' + Object.prototype.toString.call(fn) + " is not a function");
@@ -6616,6 +6659,7 @@ define("ember-metal/map",
6616
6659
 
6617
6660
  if (this instanceof OrderedSet) {
6618
6661
  this.clear();
6662
+ this._silenceRemoveDeprecation = false;
6619
6663
  } else {
6620
6664
  missingNew("OrderedSet");
6621
6665
  }
@@ -6674,7 +6718,9 @@ define("ember-metal/map",
6674
6718
  @return {Boolean}
6675
6719
  */
6676
6720
  remove: function(obj, _guid) {
6677
- return this['delete'](obj, _guid);
6721
+ Ember.deprecate('Calling `OrderedSet.prototype.remove` has been deprecated, please use `OrderedSet.prototype.delete` instead.', this._silenceRemoveDeprecation);
6722
+
6723
+ return this.delete(obj, _guid);
6678
6724
  },
6679
6725
 
6680
6726
  /**
@@ -6683,7 +6729,7 @@ define("ember-metal/map",
6683
6729
  @param _guid (optional and for internal use only)
6684
6730
  @return {Boolean}
6685
6731
  */
6686
- 'delete': function(obj, _guid) {
6732
+ delete: function(obj, _guid) {
6687
6733
  var guid = _guid || guidFor(obj);
6688
6734
  var presenceSet = this.presenceSet;
6689
6735
  var list = this.list;
@@ -6715,6 +6761,8 @@ define("ember-metal/map",
6715
6761
  @return {Boolean}
6716
6762
  */
6717
6763
  has: function(obj) {
6764
+ if (this.size === 0) { return false; }
6765
+
6718
6766
  var guid = guidFor(obj);
6719
6767
  var presenceSet = this.presenceSet;
6720
6768
 
@@ -6726,14 +6774,20 @@ define("ember-metal/map",
6726
6774
  @param {Function} fn
6727
6775
  @param self
6728
6776
  */
6729
- forEach: function(fn, thisArg) {
6777
+ forEach: function(fn /*, thisArg*/) {
6778
+ if (typeof fn !== 'function') {
6779
+ missingFunction(fn);
6780
+ }
6781
+
6782
+ if (this.size === 0) { return; }
6783
+
6730
6784
  var list = this.list;
6731
6785
  var length = arguments.length;
6732
6786
  var i;
6733
6787
 
6734
6788
  if (length === 2) {
6735
6789
  for (i = 0; i < list.length; i++) {
6736
- fn.call(thisArg, list[i]);
6790
+ fn.call(arguments[1], list[i]);
6737
6791
  }
6738
6792
  } else {
6739
6793
  for (i = 0; i < list.length; i++) {
@@ -6758,13 +6812,17 @@ define("ember-metal/map",
6758
6812
  var Constructor = this.constructor;
6759
6813
  var set = new Constructor();
6760
6814
 
6815
+ set._silenceRemoveDeprecation = this._silenceRemoveDeprecation;
6761
6816
  set.presenceSet = copyNull(this.presenceSet);
6762
6817
  set.list = this.toArray();
6818
+ set.size = this.size;
6763
6819
 
6764
6820
  return set;
6765
6821
  }
6766
6822
  };
6767
6823
 
6824
+ deprecateProperty(OrderedSet.prototype, 'length', 'size');
6825
+
6768
6826
  /**
6769
6827
  A Map stores values indexed by keys. Unlike JavaScript's
6770
6828
  default Objects, the keys of a Map can be any JavaScript
@@ -6788,6 +6846,7 @@ define("ember-metal/map",
6788
6846
  function Map() {
6789
6847
  if (this instanceof this.constructor) {
6790
6848
  this.keys = OrderedSet.create();
6849
+ this.keys._silenceRemoveDeprecation = true;
6791
6850
  this.values = Object.create(null);
6792
6851
  this.size = 0;
6793
6852
  } else {
@@ -6826,6 +6885,8 @@ define("ember-metal/map",
6826
6885
  @return {*} the value associated with the key, or `undefined`
6827
6886
  */
6828
6887
  get: function(key) {
6888
+ if (this.size === 0) { return; }
6889
+
6829
6890
  var values = this.values;
6830
6891
  var guid = guidFor(key);
6831
6892
 
@@ -6846,7 +6907,11 @@ define("ember-metal/map",
6846
6907
  var values = this.values;
6847
6908
  var guid = guidFor(key);
6848
6909
 
6849
- keys.add(key, guid);
6910
+ // ensure we don't store -0
6911
+ var k = key === -0 ? 0 : key;
6912
+
6913
+ keys.add(k, guid);
6914
+
6850
6915
  values[guid] = value;
6851
6916
 
6852
6917
  this.size = keys.size;
@@ -6863,7 +6928,9 @@ define("ember-metal/map",
6863
6928
  @return {Boolean} true if an item was removed, false otherwise
6864
6929
  */
6865
6930
  remove: function(key) {
6866
- return this['delete'](key);
6931
+ Ember.deprecate('Calling `Map.prototype.remove` has been deprecated, please use `Map.prototype.delete` instead.');
6932
+
6933
+ return this.delete(key);
6867
6934
  },
6868
6935
 
6869
6936
  /**
@@ -6873,7 +6940,8 @@ define("ember-metal/map",
6873
6940
  @param {*} key
6874
6941
  @return {Boolean} true if an item was removed, false otherwise
6875
6942
  */
6876
- 'delete': function(key) {
6943
+ delete: function(key) {
6944
+ if (this.size === 0) { return false; }
6877
6945
  // don't use ES6 "delete" because it will be annoying
6878
6946
  // to use in browsers that are not ES6 friendly;
6879
6947
  var keys = this.keys;
@@ -6881,7 +6949,7 @@ define("ember-metal/map",
6881
6949
  var guid = guidFor(key);
6882
6950
 
6883
6951
  if (values[guid]) {
6884
- keys.remove(key, guid);
6952
+ keys.delete(key, guid);
6885
6953
  delete values[guid];
6886
6954
  this.size = keys.size;
6887
6955
  return true;
@@ -6898,6 +6966,7 @@ define("ember-metal/map",
6898
6966
  @return {Boolean} true if the item was present, false otherwise
6899
6967
  */
6900
6968
  has: function(key) {
6969
+ if (this.size === 0) { return false; }
6901
6970
  return this.keys.has(key);
6902
6971
  },
6903
6972
 
@@ -6912,16 +6981,19 @@ define("ember-metal/map",
6912
6981
  @param {*} self if passed, the `this` value inside the
6913
6982
  callback. By default, `this` is the map.
6914
6983
  */
6915
- forEach: function(callback, thisArg) {
6984
+ forEach: function(callback /*, thisArg*/) {
6916
6985
  if (typeof callback !== 'function') {
6917
6986
  missingFunction(callback);
6918
6987
  }
6919
6988
 
6989
+ if (this.size === 0) { return; }
6990
+
6920
6991
  var length = arguments.length;
6921
6992
  var map = this;
6922
- var cb;
6993
+ var cb, thisArg;
6923
6994
 
6924
6995
  if (length === 2) {
6996
+ thisArg = arguments[1];
6925
6997
  cb = function(key) {
6926
6998
  callback.call(thisArg, map.get(key), key);
6927
6999
  };
@@ -6934,6 +7006,15 @@ define("ember-metal/map",
6934
7006
  this.keys.forEach(cb);
6935
7007
  },
6936
7008
 
7009
+ /**
7010
+ @method clear
7011
+ */
7012
+ clear: function() {
7013
+ this.keys.clear();
7014
+ this.values = Object.create(null);
7015
+ this.size = 0;
7016
+ },
7017
+
6937
7018
  /**
6938
7019
  @method copy
6939
7020
  @return {Ember.Map}
@@ -6943,6 +7024,8 @@ define("ember-metal/map",
6943
7024
  }
6944
7025
  };
6945
7026
 
7027
+ deprecateProperty(Map.prototype, 'length', 'size');
7028
+
6946
7029
  /**
6947
7030
  @class MapWithDefault
6948
7031
  @namespace Ember
@@ -7008,6 +7091,8 @@ define("ember-metal/map",
7008
7091
  }));
7009
7092
  };
7010
7093
 
7094
+ __exports__["default"] = Map;
7095
+
7011
7096
  __exports__.OrderedSet = OrderedSet;
7012
7097
  __exports__.Map = Map;
7013
7098
  __exports__.MapWithDefault = MapWithDefault;
@@ -9421,8 +9506,7 @@ define("ember-metal/run_loop",
9421
9506
  target at the time the method is invoked.
9422
9507
  @param {Object} [args*] Optional arguments to pass to the timeout.
9423
9508
  @param {Number} wait Number of milliseconds to wait.
9424
- @return {String} a string you can use to cancel the timer in
9425
- `run.cancel` later.
9509
+ @return {Object} Timer information for use in cancelling, see `run.cancel`.
9426
9510
  */
9427
9511
  run.later = function(target, method) {
9428
9512
  return apply(backburner, backburner.later, arguments);
@@ -9738,11 +9822,12 @@ define("ember-metal/run_loop",
9738
9822
  };
9739
9823
  });
9740
9824
  define("ember-metal/set_properties",
9741
- ["ember-metal/property_events","ember-metal/property_set","exports"],
9742
- function(__dependency1__, __dependency2__, __exports__) {
9825
+ ["ember-metal/property_events","ember-metal/property_set","ember-metal/keys","exports"],
9826
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
9743
9827
  "use strict";
9744
9828
  var changeProperties = __dependency1__.changeProperties;
9745
9829
  var set = __dependency2__.set;
9830
+ var keys = __dependency3__["default"];
9746
9831
 
9747
9832
  /**
9748
9833
  Set a list of properties on an object. These properties are set inside
@@ -9766,8 +9851,13 @@ define("ember-metal/set_properties",
9766
9851
  */
9767
9852
  __exports__["default"] = function setProperties(self, hash) {
9768
9853
  changeProperties(function() {
9769
- for(var prop in hash) {
9770
- if (hash.hasOwnProperty(prop)) { set(self, prop, hash[prop]); }
9854
+ var props = keys(hash);
9855
+ var prop;
9856
+
9857
+ for (var i = 0, l = props.length; i < l; i++) {
9858
+ prop = props[i];
9859
+
9860
+ set(self, prop, hash[prop]);
9771
9861
  }
9772
9862
  });
9773
9863
  return self;
@@ -21577,10 +21667,10 @@ define("rsvp.umd",
21577
21667
  };
21578
21668
 
21579
21669
  /* global define:true module:true window: true */
21580
- if (typeof define === 'function' && define.amd) {
21670
+ if (typeof define === 'function' && define['amd']) {
21581
21671
  define(function() { return RSVP; });
21582
- } else if (typeof module !== 'undefined' && module.exports) {
21583
- module.exports = RSVP;
21672
+ } else if (typeof module !== 'undefined' && module['exports']) {
21673
+ module['exports'] = RSVP;
21584
21674
  } else if (typeof this !== 'undefined') {
21585
21675
  this['RSVP'] = RSVP;
21586
21676
  }
@@ -21596,6 +21686,10 @@ define("rsvp/-internal",
21596
21686
 
21597
21687
  var config = __dependency3__.config;
21598
21688
 
21689
+ function withOwnPromise() {
21690
+ return new TypeError('A promises callback cannot return that same promise.');
21691
+ }
21692
+
21599
21693
  function noop() {}
21600
21694
 
21601
21695
  var PENDING = void 0;
@@ -21795,7 +21889,7 @@ define("rsvp/-internal",
21795
21889
  }
21796
21890
 
21797
21891
  if (promise === value) {
21798
- reject(promise, new TypeError('A promises callback cannot return that same promise.'));
21892
+ reject(promise, withOwnPromise());
21799
21893
  return;
21800
21894
  }
21801
21895
 
@@ -21956,7 +22050,8 @@ define("rsvp/asap",
21956
22050
  }
21957
22051
  }
21958
22052
 
21959
- var browserGlobal = (typeof window !== 'undefined') ? window : {};
22053
+ var browserWindow = (typeof window !== 'undefined') ? window : undefined
22054
+ var browserGlobal = browserWindow || {};
21960
22055
  var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
21961
22056
 
21962
22057
  // test for web worker but not in IE10
@@ -21971,6 +22066,13 @@ define("rsvp/asap",
21971
22066
  };
21972
22067
  }
21973
22068
 
22069
+ // vertx
22070
+ function useVertxTimer() {
22071
+ return function() {
22072
+ vertxNext(flush);
22073
+ };
22074
+ }
22075
+
21974
22076
  function useMutationObserver() {
21975
22077
  var iterations = 0;
21976
22078
  var observer = new BrowserMutationObserver(flush);
@@ -22012,8 +22114,17 @@ define("rsvp/asap",
22012
22114
  len = 0;
22013
22115
  }
22014
22116
 
22015
- var scheduleFlush;
22117
+ function attemptVertex() {
22118
+ try {
22119
+ var vertx = require('vertx');
22120
+ var vertxNext = vertx.runOnLoop || vertx.runOnContext;
22121
+ return useVertxTimer();
22122
+ } catch(e) {
22123
+ return useSetTimeout();
22124
+ }
22125
+ }
22016
22126
 
22127
+ var scheduleFlush;
22017
22128
  // Decide what async method to use to triggering processing of queued callbacks:
22018
22129
  if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {
22019
22130
  scheduleFlush = useNextTick();
@@ -22021,6 +22132,8 @@ define("rsvp/asap",
22021
22132
  scheduleFlush = useMutationObserver();
22022
22133
  } else if (isWorker) {
22023
22134
  scheduleFlush = useMessageChannel();
22135
+ } else if (browserWindow === undefined && typeof require === 'function') {
22136
+ scheduleFlush = attemptVertex();
22024
22137
  } else {
22025
22138
  scheduleFlush = useSetTimeout();
22026
22139
  }
@@ -22098,9 +22211,9 @@ define("rsvp/defer",
22098
22211
  __exports__["default"] = function defer(label) {
22099
22212
  var deferred = { };
22100
22213
 
22101
- deferred.promise = new Promise(function(resolve, reject) {
22102
- deferred.resolve = resolve;
22103
- deferred.reject = reject;
22214
+ deferred['promise'] = new Promise(function(resolve, reject) {
22215
+ deferred['resolve'] = resolve;
22216
+ deferred['reject'] = reject;
22104
22217
  }, label);
22105
22218
 
22106
22219
  return deferred;
@@ -22796,27 +22909,40 @@ define("rsvp/instrument",
22796
22909
 
22797
22910
  var queue = [];
22798
22911
 
22912
+ function scheduleFlush() {
22913
+ setTimeout(function() {
22914
+ var entry;
22915
+ for (var i = 0; i < queue.length; i++) {
22916
+ entry = queue[i];
22917
+
22918
+ var payload = entry.payload;
22919
+
22920
+ payload.guid = payload.key + payload.id;
22921
+ payload.childGuid = payload.key + payload.childId;
22922
+ if (payload.error) {
22923
+ payload.stack = payload.error.stack;
22924
+ }
22925
+
22926
+ config.trigger(entry.name, entry.payload);
22927
+ }
22928
+ queue.length = 0;
22929
+ }, 50);
22930
+ }
22931
+
22799
22932
  __exports__["default"] = function instrument(eventName, promise, child) {
22800
22933
  if (1 === queue.push({
22801
22934
  name: eventName,
22802
22935
  payload: {
22803
- guid: promise._guidKey + promise._id,
22936
+ key: promise._guidKey,
22937
+ id: promise._id,
22804
22938
  eventName: eventName,
22805
22939
  detail: promise._result,
22806
- childGuid: child && promise._guidKey + child._id,
22940
+ childId: child && child._id,
22807
22941
  label: promise._label,
22808
22942
  timeStamp: now(),
22809
- stack: new Error(promise._label).stack
22943
+ error: config["instrument-with-stack"] ? new Error(promise._label) : null
22810
22944
  }})) {
22811
-
22812
- setTimeout(function() {
22813
- var entry;
22814
- for (var i = 0; i < queue.length; i++) {
22815
- entry = queue[i];
22816
- config.trigger(entry.name, entry.payload);
22817
- }
22818
- queue.length = 0;
22819
- }, 50);
22945
+ scheduleFlush();
22820
22946
  }
22821
22947
  }
22822
22948
  });