ember-source 1.4.0.beta.1 → 1.4.0.beta.2

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: dfcc310a1f8269f3837307c09e9f00bc57c11f31
4
- data.tar.gz: 0e0f139184037020e446902b01294ee1e9717e4f
3
+ metadata.gz: e4a61433fe891c53eef252425d5739f1f7523059
4
+ data.tar.gz: b7ea768a2c86fec398ad110b4250b59e0c24f995
5
5
  SHA512:
6
- metadata.gz: 6f9ca10778dd3aed14422ebb2363be263cf20109cad3c97d8e9b5c73e1d9b058b13271188c7a588e81530781fd06c5aca969cd79fc32dc45d60bbec3d8bdf641
7
- data.tar.gz: fd4915cad02d3acc63a3d28d675350fe4f04063df99a5f21db6d2e63d9edd623532f1ffd742ba7f88e2d5f8728dc5d29f9975b31616720aebdc1b97a66992067
6
+ metadata.gz: 9c502d52ceed7edeffc99cadac820b786ae4b062341462af4f68ff8671d0069543c5dbbf4ee891d1eb6dbd213dd286120ffc932ed83a41d0ecc7b6a0f1c94b05
7
+ data.tar.gz: f3ee1bf95b2d579b3653390eebb34a7cf3c8e1ca84e7c9dd41fbfe57e93e690a215604aa95a6a5207fe5009fe53e5a749be1a4881c78f95ee637f9eb285233d3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0-beta.1
1
+ 1.4.0-beta.2
@@ -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.4.0-beta.1
8
+ * @version 1.4.0-beta.2
9
9
  */
10
10
 
11
11
 
@@ -198,7 +198,7 @@ if (!Ember.testing) {
198
198
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
199
199
  * @license Licensed under MIT license
200
200
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
201
- * @version 1.4.0-beta.1
201
+ * @version 1.4.0-beta.2
202
202
  */
203
203
 
204
204
 
@@ -281,7 +281,7 @@ var define, requireModule, require, requirejs;
281
281
 
282
282
  @class Ember
283
283
  @static
284
- @version 1.4.0-beta.1+canary.64fee6ed
284
+ @version 1.4.0-beta.2
285
285
  */
286
286
 
287
287
  if ('undefined' === typeof Ember) {
@@ -308,10 +308,10 @@ Ember.toString = function() { return "Ember"; };
308
308
  /**
309
309
  @property VERSION
310
310
  @type String
311
- @default '1.4.0-beta.1+canary.64fee6ed'
311
+ @default '1.4.0-beta.2'
312
312
  @static
313
313
  */
314
- Ember.VERSION = '1.4.0-beta.1+canary.64fee6ed';
314
+ Ember.VERSION = '1.4.0-beta.2';
315
315
 
316
316
  /**
317
317
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -1026,7 +1026,7 @@ Ember.guidFor = function guidFor(obj) {
1026
1026
  // META
1027
1027
  //
1028
1028
 
1029
- var META_DESC = {
1029
+ var META_DESC = Ember.META_DESC = {
1030
1030
  writable: true,
1031
1031
  configurable: false,
1032
1032
  enumerable: false,
@@ -1830,34 +1830,123 @@ indexOf = Array.prototype.indexOf || Ember.ArrayPolyfills.indexOf;
1830
1830
  filter = Array.prototype.filter || Ember.ArrayPolyfills.filter;
1831
1831
  splice = Array.prototype.splice;
1832
1832
 
1833
+ /**
1834
+ * Defines some convenience methods for working with Enumerables.
1835
+ * `Ember.EnumerableUtils` uses `Ember.ArrayPolyfills` when necessary.
1836
+ *
1837
+ * @class EnumerableUtils
1838
+ * @namespace Ember
1839
+ * @static
1840
+ * */
1833
1841
  var utils = Ember.EnumerableUtils = {
1842
+ /**
1843
+ * Calls the map function on the passed object with a specified callback. This
1844
+ * uses `Ember.ArrayPolyfill`'s-map method when necessary.
1845
+ *
1846
+ * @method map
1847
+ * @param {Object} obj The object that should be mapped
1848
+ * @param {Function} callback The callback to execute
1849
+ * @param {Object} thisArg Value to use as this when executing *callback*
1850
+ *
1851
+ * @return {Array} An array of mapped values.
1852
+ */
1834
1853
  map: function(obj, callback, thisArg) {
1835
1854
  return obj.map ? obj.map.call(obj, callback, thisArg) : map.call(obj, callback, thisArg);
1836
1855
  },
1837
1856
 
1857
+ /**
1858
+ * Calls the forEach function on the passed object with a specified callback. This
1859
+ * uses `Ember.ArrayPolyfill`'s-forEach method when necessary.
1860
+ *
1861
+ * @method forEach
1862
+ * @param {Object} obj The object to call forEach on
1863
+ * @param {Function} callback The callback to execute
1864
+ * @param {Object} thisArg Value to use as this when executing *callback*
1865
+ *
1866
+ */
1838
1867
  forEach: function(obj, callback, thisArg) {
1839
1868
  return obj.forEach ? obj.forEach.call(obj, callback, thisArg) : forEach.call(obj, callback, thisArg);
1840
1869
  },
1841
1870
 
1871
+ /**
1872
+ * Calls the filter function on the passed object with a specified callback. This
1873
+ * uses `Ember.ArrayPolyfill`'s-filter method when necessary.
1874
+ *
1875
+ * @method filter
1876
+ * @param {Object} obj The object to call filter on
1877
+ * @param {Function} callback The callback to execute
1878
+ * @param {Object} thisArg Value to use as this when executing *callback*
1879
+ *
1880
+ * @return {Array} An array containing the filtered values
1881
+ */
1842
1882
  filter: function(obj, callback, thisArg) {
1843
1883
  return obj.filter ? obj.filter.call(obj, callback, thisArg) : filter.call(obj, callback, thisArg);
1844
1884
  },
1845
1885
 
1886
+ /**
1887
+ * Calls the indexOf function on the passed object with a specified callback. This
1888
+ * uses `Ember.ArrayPolyfill`'s-indexOf method when necessary.
1889
+ *
1890
+ * @method indexOf
1891
+ * @param {Object} obj The object to call indexOn on
1892
+ * @param {Function} callback The callback to execute
1893
+ * @param {Object} index The index to start searching from
1894
+ *
1895
+ */
1846
1896
  indexOf: function(obj, element, index) {
1847
1897
  return obj.indexOf ? obj.indexOf.call(obj, element, index) : indexOf.call(obj, element, index);
1848
1898
  },
1849
1899
 
1900
+ /**
1901
+ * Returns an array of indexes of the first occurrences of the passed elements
1902
+ * on the passed object.
1903
+ *
1904
+ * ```javascript
1905
+ * var array = [1, 2, 3, 4, 5];
1906
+ * Ember.EnumerableUtils.indexesOf(array, [2, 5]); // [1, 4]
1907
+ *
1908
+ * var fubar = "Fubarr";
1909
+ * Ember.EnumerableUtils.indexesOf(fubar, ['b', 'r']); // [2, 4]
1910
+ * ```
1911
+ *
1912
+ * @method indexesOf
1913
+ * @param {Object} obj The object to check for element indexes
1914
+ * @param {Array} elements The elements to search for on *obj*
1915
+ *
1916
+ * @return {Array} An array of indexes.
1917
+ *
1918
+ */
1850
1919
  indexesOf: function(obj, elements) {
1851
1920
  return elements === undefined ? [] : utils.map(elements, function(item) {
1852
1921
  return utils.indexOf(obj, item);
1853
1922
  });
1854
1923
  },
1855
1924
 
1925
+ /**
1926
+ * Adds an object to an array. If the array already includes the object this
1927
+ * method has no effect.
1928
+ *
1929
+ * @method addObject
1930
+ * @param {Array} array The array the passed item should be added to
1931
+ * @param {Object} item The item to add to the passed array
1932
+ *
1933
+ * @return 'undefined'
1934
+ */
1856
1935
  addObject: function(array, item) {
1857
1936
  var index = utils.indexOf(array, item);
1858
1937
  if (index === -1) { array.push(item); }
1859
1938
  },
1860
1939
 
1940
+ /**
1941
+ * Removes an object from an array. If the array does not contain the passed
1942
+ * object this method has no effect.
1943
+ *
1944
+ * @method removeObject
1945
+ * @param {Array} array The array to remove the item from.
1946
+ * @param {Object} item The item to remove from the passed array.
1947
+ *
1948
+ * @return 'undefined'
1949
+ */
1861
1950
  removeObject: function(array, item) {
1862
1951
  var index = utils.indexOf(array, item);
1863
1952
  if (index !== -1) { array.splice(index, 1); }
@@ -1883,6 +1972,31 @@ var utils = Ember.EnumerableUtils = {
1883
1972
  return ret;
1884
1973
  },
1885
1974
 
1975
+ /**
1976
+ * Replaces objects in an array with the passed objects.
1977
+ *
1978
+ * ```javascript
1979
+ * var array = [1,2,3];
1980
+ * Ember.EnumerableUtils.replace(array, 1, 2, [4, 5]); // [1, 4, 5]
1981
+ *
1982
+ * var array = [1,2,3];
1983
+ * Ember.EnumerableUtils.replace(array, 1, 1, [4, 5]); // [1, 4, 5, 3]
1984
+ *
1985
+ * var array = [1,2,3];
1986
+ * Ember.EnumerableUtils.replace(array, 10, 1, [4, 5]); // [1, 2, 3, 4, 5]
1987
+ * ```
1988
+ *
1989
+ * @method replace
1990
+ * @param {Array} array The array the objects should be inserted into.
1991
+ * @param {Number} idx Starting index in the array to replace. If *idx* >=
1992
+ * length, then append to the end of the array.
1993
+ * @param {Number} amt Number of elements that should be remove from the array,
1994
+ * starting at *idx*
1995
+ * @param {Array} objects An array of zero or more objects that should be
1996
+ * inserted into the array at *idx*
1997
+ *
1998
+ * @return {Array} The changed array.
1999
+ */
1886
2000
  replace: function(array, idx, amt, objects) {
1887
2001
  if (array.replace) {
1888
2002
  return array.replace(idx, amt, objects);
@@ -1891,6 +2005,29 @@ var utils = Ember.EnumerableUtils = {
1891
2005
  }
1892
2006
  },
1893
2007
 
2008
+ /**
2009
+ * Calculates the intersection of two arrays. This method returns a new array
2010
+ * filled with the records that the two passed arrays share with each other.
2011
+ * If there is no intersection, an empty array will be returned.
2012
+ *
2013
+ * ```javascript
2014
+ * var array1 = [1, 2, 3, 4, 5];
2015
+ * var array2 = [1, 3, 5, 6, 7];
2016
+ *
2017
+ * Ember.EnumerableUtils.intersection(array1, array2); // [1, 3, 5]
2018
+ *
2019
+ * var array1 = [1, 2, 3];
2020
+ * var array2 = [4, 5, 6];
2021
+ *
2022
+ * Ember.EnumerableUtils.intersection(array1, array2); // []
2023
+ * ```
2024
+ *
2025
+ * @method intersection
2026
+ * @param {Array} array1 The first array
2027
+ * @param {Array} array2 The second array
2028
+ *
2029
+ * @return {Array} The intersection of the two passed arrays.
2030
+ */
1894
2031
  intersection: function(array1, array2) {
1895
2032
  var intersection = [];
1896
2033
 
@@ -2543,7 +2680,7 @@ ObserverSet.prototype.clear = function() {
2543
2680
 
2544
2681
 
2545
2682
  (function() {
2546
- var metaFor = Ember.meta,
2683
+ var META_KEY = Ember.META_KEY,
2547
2684
  guidFor = Ember.guidFor,
2548
2685
  tryFinally = Ember.tryFinally,
2549
2686
  sendEvent = Ember.sendEvent,
@@ -2574,10 +2711,10 @@ var metaFor = Ember.meta,
2574
2711
  @return {void}
2575
2712
  */
2576
2713
  function propertyWillChange(obj, keyName) {
2577
- var m = metaFor(obj, false),
2578
- watching = m.watching[keyName] > 0 || keyName === 'length',
2579
- proto = m.proto,
2580
- desc = m.descs[keyName];
2714
+ var m = obj[META_KEY],
2715
+ watching = (m && m.watching[keyName] > 0) || keyName === 'length',
2716
+ proto = m && m.proto,
2717
+ desc = m && m.descs[keyName];
2581
2718
 
2582
2719
  if (!watching) { return; }
2583
2720
  if (proto === obj) { return; }
@@ -2604,10 +2741,10 @@ Ember.propertyWillChange = propertyWillChange;
2604
2741
  @return {void}
2605
2742
  */
2606
2743
  function propertyDidChange(obj, keyName) {
2607
- var m = metaFor(obj, false),
2608
- watching = m.watching[keyName] > 0 || keyName === 'length',
2609
- proto = m.proto,
2610
- desc = m.descs[keyName];
2744
+ var m = obj[META_KEY],
2745
+ watching = (m && m.watching[keyName] > 0) || keyName === 'length',
2746
+ proto = m && m.proto,
2747
+ desc = m && m.descs[keyName];
2611
2748
 
2612
2749
  if (proto === obj) { return; }
2613
2750
 
@@ -2680,7 +2817,7 @@ function chainsWillChange(obj, keyName, m) {
2680
2817
  }
2681
2818
 
2682
2819
  function chainsDidChange(obj, keyName, m, suppressEvents) {
2683
- if (!(m.hasOwnProperty('chainWatchers') &&
2820
+ if (!(m && m.hasOwnProperty('chainWatchers') &&
2684
2821
  m.chainWatchers[keyName])) {
2685
2822
  return;
2686
2823
  }
@@ -3705,11 +3842,11 @@ var metaFor = Ember.meta, // utils.js
3705
3842
  MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER,
3706
3843
  o_defineProperty = Ember.platform.defineProperty;
3707
3844
 
3708
- Ember.watchKey = function(obj, keyName) {
3845
+ Ember.watchKey = function(obj, keyName, meta) {
3709
3846
  // can't watch length on Array - it is special...
3710
3847
  if (keyName === 'length' && typeOf(obj) === 'array') { return; }
3711
3848
 
3712
- var m = metaFor(obj), watching = m.watching;
3849
+ var m = meta || metaFor(obj), watching = m.watching;
3713
3850
 
3714
3851
  // activate watching first time
3715
3852
  if (!watching[keyName]) {
@@ -3734,8 +3871,8 @@ Ember.watchKey = function(obj, keyName) {
3734
3871
  };
3735
3872
 
3736
3873
 
3737
- Ember.unwatchKey = function(obj, keyName) {
3738
- var m = metaFor(obj), watching = m.watching;
3874
+ Ember.unwatchKey = function(obj, keyName, meta) {
3875
+ var m = meta || metaFor(obj), watching = m.watching;
3739
3876
 
3740
3877
  if (watching[keyName] === 1) {
3741
3878
  watching[keyName] = 0;
@@ -3778,7 +3915,8 @@ var metaFor = Ember.meta, // utils.js
3778
3915
  warn = Ember.warn,
3779
3916
  watchKey = Ember.watchKey,
3780
3917
  unwatchKey = Ember.unwatchKey,
3781
- FIRST_KEY = /^([^\.\*]+)/;
3918
+ FIRST_KEY = /^([^\.\*]+)/,
3919
+ META_KEY = Ember.META_KEY;
3782
3920
 
3783
3921
  function firstKey(path) {
3784
3922
  return path.match(FIRST_KEY)[0];
@@ -3812,24 +3950,24 @@ function addChainWatcher(obj, keyName, node) {
3812
3950
 
3813
3951
  if (!nodes[keyName]) { nodes[keyName] = []; }
3814
3952
  nodes[keyName].push(node);
3815
- watchKey(obj, keyName);
3953
+ watchKey(obj, keyName, m);
3816
3954
  }
3817
3955
 
3818
3956
  var removeChainWatcher = Ember.removeChainWatcher = function(obj, keyName, node) {
3819
3957
  if (!obj || 'object' !== typeof obj) { return; } // nothing to do
3820
3958
 
3821
- var m = metaFor(obj, false);
3822
- if (!m.hasOwnProperty('chainWatchers')) { return; } // nothing to do
3959
+ var m = obj[META_KEY];
3960
+ if (m && !m.hasOwnProperty('chainWatchers')) { return; } // nothing to do
3823
3961
 
3824
- var nodes = m.chainWatchers;
3962
+ var nodes = m && m.chainWatchers;
3825
3963
 
3826
- if (nodes[keyName]) {
3964
+ if (nodes && nodes[keyName]) {
3827
3965
  nodes = nodes[keyName];
3828
3966
  for (var i = 0, l = nodes.length; i < l; i++) {
3829
3967
  if (nodes[i] === node) { nodes.splice(i, 1); }
3830
3968
  }
3831
3969
  }
3832
- unwatchKey(obj, keyName);
3970
+ unwatchKey(obj, keyName, m);
3833
3971
  };
3834
3972
 
3835
3973
  // A ChainNode watches a single key on an object. If you provide a starting
@@ -3869,14 +4007,14 @@ var ChainNodePrototype = ChainNode.prototype;
3869
4007
  function lazyGet(obj, key) {
3870
4008
  if (!obj) return undefined;
3871
4009
 
3872
- var meta = metaFor(obj, false);
4010
+ var meta = obj[META_KEY];
3873
4011
  // check if object meant only to be a prototype
3874
- if (meta.proto === obj) return undefined;
4012
+ if (meta && meta.proto === obj) return undefined;
3875
4013
 
3876
4014
  if (key === "@each") return get(obj, key);
3877
4015
 
3878
4016
  // if a CP only return cached value
3879
- var desc = meta.descs[key];
4017
+ var desc = meta && meta.descs[key];
3880
4018
  if (desc && desc._cacheable) {
3881
4019
  if (key in meta.cache) {
3882
4020
  return meta.cache[key];
@@ -4088,12 +4226,14 @@ ChainNodePrototype.didChange = function(events) {
4088
4226
  };
4089
4227
 
4090
4228
  Ember.finishChains = function(obj) {
4091
- var m = metaFor(obj, false), chains = m.chains;
4229
+ // We only create meta if we really have to
4230
+ var m = obj[META_KEY], chains = m && m.chains;
4092
4231
  if (chains) {
4093
4232
  if (chains.value() !== obj) {
4094
- m.chains = chains = chains.copy(obj);
4233
+ metaFor(obj).chains = chains = chains.copy(obj);
4234
+ } else {
4235
+ chains.didChange(null);
4095
4236
  }
4096
- chains.didChange(null);
4097
4237
  }
4098
4238
  };
4099
4239
 
@@ -4161,8 +4301,8 @@ var metaFor = Ember.meta, // utils.js
4161
4301
  // get the chains for the current object. If the current object has
4162
4302
  // chains inherited from the proto they will be cloned and reconfigured for
4163
4303
  // the current object.
4164
- function chainsFor(obj) {
4165
- var m = metaFor(obj), ret = m.chains;
4304
+ function chainsFor(obj, meta) {
4305
+ var m = meta || metaFor(obj), ret = m.chains;
4166
4306
  if (!ret) {
4167
4307
  ret = m.chains = new ChainNode(null, null, obj);
4168
4308
  } else if (ret.value() !== obj) {
@@ -4171,26 +4311,26 @@ function chainsFor(obj) {
4171
4311
  return ret;
4172
4312
  }
4173
4313
 
4174
- Ember.watchPath = function(obj, keyPath) {
4314
+ Ember.watchPath = function(obj, keyPath, meta) {
4175
4315
  // can't watch length on Array - it is special...
4176
4316
  if (keyPath === 'length' && typeOf(obj) === 'array') { return; }
4177
4317
 
4178
- var m = metaFor(obj), watching = m.watching;
4318
+ var m = meta || metaFor(obj), watching = m.watching;
4179
4319
 
4180
4320
  if (!watching[keyPath]) { // activate watching first time
4181
4321
  watching[keyPath] = 1;
4182
- chainsFor(obj).add(keyPath);
4322
+ chainsFor(obj, m).add(keyPath);
4183
4323
  } else {
4184
4324
  watching[keyPath] = (watching[keyPath] || 0) + 1;
4185
4325
  }
4186
4326
  };
4187
4327
 
4188
- Ember.unwatchPath = function(obj, keyPath) {
4189
- var m = metaFor(obj), watching = m.watching;
4328
+ Ember.unwatchPath = function(obj, keyPath, meta) {
4329
+ var m = meta || metaFor(obj), watching = m.watching;
4190
4330
 
4191
4331
  if (watching[keyPath] === 1) {
4192
4332
  watching[keyPath] = 0;
4193
- chainsFor(obj).remove(keyPath);
4333
+ chainsFor(obj, m).remove(keyPath);
4194
4334
  } else if (watching[keyPath] > 1) {
4195
4335
  watching[keyPath]--;
4196
4336
  }
@@ -4234,14 +4374,14 @@ function isKeyName(path) {
4234
4374
  @param obj
4235
4375
  @param {String} keyName
4236
4376
  */
4237
- Ember.watch = function(obj, _keyPath) {
4377
+ Ember.watch = function(obj, _keyPath, m) {
4238
4378
  // can't watch length on Array - it is special...
4239
4379
  if (_keyPath === 'length' && typeOf(obj) === 'array') { return; }
4240
4380
 
4241
4381
  if (isKeyName(_keyPath)) {
4242
- watchKey(obj, _keyPath);
4382
+ watchKey(obj, _keyPath, m);
4243
4383
  } else {
4244
- watchPath(obj, _keyPath);
4384
+ watchPath(obj, _keyPath, m);
4245
4385
  }
4246
4386
  };
4247
4387
 
@@ -4252,14 +4392,14 @@ Ember.isWatching = function isWatching(obj, key) {
4252
4392
 
4253
4393
  Ember.watch.flushPending = Ember.flushPendingChains;
4254
4394
 
4255
- Ember.unwatch = function(obj, _keyPath) {
4395
+ Ember.unwatch = function(obj, _keyPath, m) {
4256
4396
  // can't watch length on Array - it is special...
4257
4397
  if (_keyPath === 'length' && typeOf(obj) === 'array') { return; }
4258
4398
 
4259
4399
  if (isKeyName(_keyPath)) {
4260
- unwatchKey(obj, _keyPath);
4400
+ unwatchKey(obj, _keyPath, m);
4261
4401
  } else {
4262
- unwatchPath(obj, _keyPath);
4402
+ unwatchPath(obj, _keyPath, m);
4263
4403
  }
4264
4404
  };
4265
4405
 
@@ -4274,7 +4414,7 @@ Ember.unwatch = function(obj, _keyPath) {
4274
4414
  @param obj
4275
4415
  */
4276
4416
  Ember.rewatch = function(obj) {
4277
- var m = metaFor(obj, false), chains = m.chains;
4417
+ var m = obj[META_KEY], chains = m && m.chains;
4278
4418
 
4279
4419
  // make sure the object has its own guid.
4280
4420
  if (GUID_KEY in obj && !obj.hasOwnProperty(GUID_KEY)) {
@@ -4407,7 +4547,7 @@ function addDependentKeys(desc, obj, keyName, meta) {
4407
4547
  // Increment the number of times depKey depends on keyName.
4408
4548
  keys[keyName] = (keys[keyName] || 0) + 1;
4409
4549
  // Watch the depKey
4410
- watch(obj, depKey);
4550
+ watch(obj, depKey, meta);
4411
4551
  }
4412
4552
  }
4413
4553
 
@@ -4426,7 +4566,7 @@ function removeDependentKeys(desc, obj, keyName, meta) {
4426
4566
  // Increment the number of times depKey depends on keyName.
4427
4567
  keys[keyName] = (keys[keyName] || 0) - 1;
4428
4568
  // Watch the depKey
4429
- unwatch(obj, depKey);
4569
+ unwatch(obj, depKey, meta);
4430
4570
  }
4431
4571
  }
4432
4572
 
@@ -4634,7 +4774,7 @@ ComputedPropertyPrototype.property = function() {
4634
4774
 
4635
4775
 
4636
4776
  var addArg = function (property) {
4637
- args.push(property);
4777
+ args.push(property);
4638
4778
  };
4639
4779
 
4640
4780
  args = [];
@@ -4887,7 +5027,8 @@ Ember.computed = function(func) {
4887
5027
  @return {Object} the cached value
4888
5028
  */
4889
5029
  Ember.cacheFor = function cacheFor(obj, key) {
4890
- var cache = metaFor(obj, false).cache;
5030
+ var meta = obj[META_KEY],
5031
+ cache = meta && meta.cache;
4891
5032
 
4892
5033
  if (cache && key in cache) {
4893
5034
  return cache[key];
@@ -7463,14 +7604,16 @@ var Mixin, REQUIRED, Alias,
7463
7604
  a_slice = [].slice,
7464
7605
  o_create = Ember.create,
7465
7606
  defineProperty = Ember.defineProperty,
7466
- guidFor = Ember.guidFor;
7607
+ guidFor = Ember.guidFor,
7608
+ metaFor = Ember.meta,
7609
+ META_KEY = Ember.META_KEY;
7467
7610
 
7468
7611
 
7469
7612
  var expandProperties = Ember.expandProperties;
7470
7613
 
7471
7614
 
7472
7615
  function mixinsMeta(obj) {
7473
- var m = Ember.meta(obj, true), ret = m.mixins;
7616
+ var m = metaFor(obj, true), ret = m.mixins;
7474
7617
  if (!ret) {
7475
7618
  ret = m.mixins = {};
7476
7619
  } else if (!m.hasOwnProperty('mixins')) {
@@ -7655,7 +7798,7 @@ function mergeMixins(mixins, m, descs, values, base, keys) {
7655
7798
  if (props === CONTINUE) { continue; }
7656
7799
 
7657
7800
  if (props) {
7658
- meta = Ember.meta(base);
7801
+ meta = metaFor(base);
7659
7802
  if (base.willMergeMixin) { base.willMergeMixin(props); }
7660
7803
  concats = concatenatedMixinProperties('concatenatedProperties', props, values, base);
7661
7804
  mergings = concatenatedMixinProperties('mergedProperties', props, values, base);
@@ -7713,7 +7856,7 @@ function connectBindings(obj, m) {
7713
7856
  }
7714
7857
 
7715
7858
  function finishPartial(obj, m) {
7716
- connectBindings(obj, m || Ember.meta(obj));
7859
+ connectBindings(obj, m || metaFor(obj));
7717
7860
  return obj;
7718
7861
  }
7719
7862
 
@@ -7760,7 +7903,7 @@ function replaceObserversAndListeners(obj, key, observerOrListener) {
7760
7903
  }
7761
7904
 
7762
7905
  function applyMixin(obj, mixins, partial) {
7763
- var descs = {}, values = {}, m = Ember.meta(obj),
7906
+ var descs = {}, values = {}, m = metaFor(obj),
7764
7907
  key, value, desc, keys = [];
7765
7908
 
7766
7909
  // Go through all mixins and hashes passed in, and:
@@ -7972,7 +8115,8 @@ function _detect(curMixin, targetMixin, seen) {
7972
8115
  MixinPrototype.detect = function(obj) {
7973
8116
  if (!obj) { return false; }
7974
8117
  if (obj instanceof Mixin) { return _detect(obj, this, {}); }
7975
- var mixins = Ember.meta(obj, false).mixins;
8118
+ var m = obj[META_KEY],
8119
+ mixins = m && m.mixins;
7976
8120
  if (mixins) {
7977
8121
  return !!mixins[guidFor(this)];
7978
8122
  }
@@ -8011,7 +8155,8 @@ MixinPrototype.keys = function() {
8011
8155
  // returns the mixins currently applied to the specified object
8012
8156
  // TODO: Make Ember.mixin
8013
8157
  Mixin.mixins = function(obj) {
8014
- var mixins = Ember.meta(obj, false).mixins, ret = [];
8158
+ var m = obj[META_KEY],
8159
+ mixins = m && m.mixins, ret = [];
8015
8160
 
8016
8161
  if (!mixins) { return ret; }
8017
8162
 
@@ -9891,7 +10036,7 @@ define("rsvp/promise/all",
9891
10036
  ```
9892
10037
 
9893
10038
  @method all
9894
- @for RSVP.Promise
10039
+ @for Ember.RSVP.Promise
9895
10040
  @param {Array} entries array of promises
9896
10041
  @param {String} label optional string for labeling the promise.
9897
10042
  Useful for tooling.
@@ -12619,6 +12764,7 @@ var set = Ember.set, get = Ember.get,
12619
12764
  guidFor = Ember.guidFor,
12620
12765
  generateGuid = Ember.generateGuid,
12621
12766
  meta = Ember.meta,
12767
+ META_KEY = Ember.META_KEY,
12622
12768
  rewatch = Ember.rewatch,
12623
12769
  finishChains = Ember.finishChains,
12624
12770
  sendEvent = Ember.sendEvent,
@@ -13312,7 +13458,8 @@ var ClassMixin = Mixin.create({
13312
13458
  @param key {String} property name
13313
13459
  */
13314
13460
  metaForProperty: function(key) {
13315
- var desc = meta(this.proto(), false).descs[key];
13461
+ var meta = this.proto()[META_KEY],
13462
+ desc = meta && meta.descs[key];
13316
13463
 
13317
13464
  Ember.assert("metaForProperty() could not find a computed property with key '"+key+"'.", !!desc && desc instanceof Ember.ComputedProperty);
13318
13465
  return desc._meta || {};
@@ -20460,7 +20607,7 @@ Ember.ControllerMixin = Ember.Mixin.create(Ember.ActionHandler, {
20460
20607
  deprecatedSend: function(actionName) {
20461
20608
  var args = [].slice.call(arguments, 1);
20462
20609
  Ember.assert('' + this + " has the action " + actionName + " but it is not a function", typeof this[actionName] === 'function');
20463
- Ember.deprecate('Action handlers implemented directly on controllers are deprecated in favor of action handlers on an `actions` object (' + actionName + ' on ' + this + ')', false);
20610
+ Ember.deprecate('Action handlers implemented directly on controllers are deprecated in favor of action handlers on an `actions` object ( action: `' + actionName + '` on ' + this + ')', false);
20464
20611
  this[actionName].apply(this, args);
20465
20612
  return;
20466
20613
  }