ember-source 1.7.0.beta.1 → 1.7.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: 5e1a5ce978cd548514fbc2c275ff796abdc43a36
4
- data.tar.gz: 0d1d6f6e34154f44acc371b9bc15e09e81bd6864
3
+ metadata.gz: 0734bda9158778ba3f4a5cf4f152fb67ad244cc7
4
+ data.tar.gz: 1a0866dd50e5dbefadc602a69dc17f8d66f2f296
5
5
  SHA512:
6
- metadata.gz: c6b9a96264c462ca1d5ac4707b27d98b5d49ef5f2873e9a28fd71d1c816e45fdb3e497ab7b34df2f5d82b18440b7f00f64aadf3df9091caa5f9bc5a063ea9219
7
- data.tar.gz: be31d2faa51005dff56d0456c3fb945e460414cf8fbabb9087eb2e987fee1a60e81983798d7673677d79a68be6f80af9c19609f2959c24ab60d6d516e7c55954
6
+ metadata.gz: 5605198d3801765d0c0e9a71266422c8fc182df558f3f801406635b200716537db4ee3aa5a461a57bde4fe5fead3b3e908f934edb2c0dee42bdb15c069f7f883
7
+ data.tar.gz: 2c7795fdf9280d563f1f8aa668dc8b45c7485762dccb6ec3d62f63729b0aa297e90241d5101459fb83876696f64ef67b1e6e4fa022af2a922f0d10a1ad964001
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.7.0-beta.1
1
+ 1.7.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.7.0-beta.1
8
+ * @version 1.7.0-beta.2
9
9
  */
10
10
 
11
11
  (function() {
@@ -1838,8 +1838,8 @@ define("container/inheriting_dict",
1838
1838
  __exports__["default"] = InheritingDict;
1839
1839
  });
1840
1840
  define("ember-metal",
1841
- ["ember-metal/core","ember-metal/merge","ember-metal/instrumentation","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/platform","ember-metal/array","ember-metal/logger","ember-metal/property_get","ember-metal/events","ember-metal/observer_set","ember-metal/property_events","ember-metal/properties","ember-metal/property_set","ember-metal/map","ember-metal/get_properties","ember-metal/set_properties","ember-metal/watch_key","ember-metal/chains","ember-metal/watch_path","ember-metal/watching","ember-metal/expand_properties","ember-metal/computed","ember-metal/observer","ember-metal/mixin","ember-metal/binding","ember-metal/run_loop","ember-metal/libraries","ember-metal/is_none","ember-metal/is_empty","ember-metal/is_blank","exports"],
1842
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__, __dependency24__, __dependency25__, __dependency26__, __dependency27__, __dependency28__, __dependency29__, __dependency30__, __dependency31__, __dependency32__, __exports__) {
1841
+ ["ember-metal/core","ember-metal/merge","ember-metal/instrumentation","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/platform","ember-metal/array","ember-metal/logger","ember-metal/property_get","ember-metal/events","ember-metal/observer_set","ember-metal/property_events","ember-metal/properties","ember-metal/property_set","ember-metal/map","ember-metal/get_properties","ember-metal/set_properties","ember-metal/watch_key","ember-metal/chains","ember-metal/watch_path","ember-metal/watching","ember-metal/expand_properties","ember-metal/computed","ember-metal/computed_macros","ember-metal/observer","ember-metal/mixin","ember-metal/binding","ember-metal/run_loop","ember-metal/libraries","ember-metal/is_none","ember-metal/is_empty","ember-metal/is_blank","exports"],
1842
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__, __dependency24__, __dependency25__, __dependency26__, __dependency27__, __dependency28__, __dependency29__, __dependency30__, __dependency31__, __dependency32__, __dependency33__, __exports__) {
1843
1843
  "use strict";
1844
1844
  /**
1845
1845
  Ember Metal
@@ -1941,35 +1941,37 @@ define("ember-metal",
1941
1941
  var computed = __dependency24__.computed;
1942
1942
  var cacheFor = __dependency24__.cacheFor;
1943
1943
 
1944
- var addObserver = __dependency25__.addObserver;
1945
- var observersFor = __dependency25__.observersFor;
1946
- var removeObserver = __dependency25__.removeObserver;
1947
- var addBeforeObserver = __dependency25__.addBeforeObserver;
1948
- var _suspendBeforeObserver = __dependency25__._suspendBeforeObserver;
1949
- var _suspendObserver = __dependency25__._suspendObserver;
1950
- var _suspendBeforeObservers = __dependency25__._suspendBeforeObservers;
1951
- var _suspendObservers = __dependency25__._suspendObservers;
1952
- var beforeObserversFor = __dependency25__.beforeObserversFor;
1953
- var removeBeforeObserver = __dependency25__.removeBeforeObserver;
1954
- var IS_BINDING = __dependency26__.IS_BINDING;
1955
- var mixin = __dependency26__.mixin;
1956
- var Mixin = __dependency26__.Mixin;
1957
- var required = __dependency26__.required;
1958
- var aliasMethod = __dependency26__.aliasMethod;
1959
- var observer = __dependency26__.observer;
1960
- var immediateObserver = __dependency26__.immediateObserver;
1961
- var beforeObserver = __dependency26__.beforeObserver;
1962
- var Binding = __dependency27__.Binding;
1963
- var isGlobalPath = __dependency27__.isGlobalPath;
1964
- var bind = __dependency27__.bind;
1965
- var oneWay = __dependency27__.oneWay;
1966
- var run = __dependency28__["default"];
1967
- var libraries = __dependency29__["default"];
1968
- var isNone = __dependency30__.isNone;
1969
- var none = __dependency30__.none;
1970
- var isEmpty = __dependency31__.isEmpty;
1971
- var empty = __dependency31__.empty;
1972
- var isBlank = __dependency32__["default"];
1944
+ // side effect of defining the computed.* macros
1945
+
1946
+ var addObserver = __dependency26__.addObserver;
1947
+ var observersFor = __dependency26__.observersFor;
1948
+ var removeObserver = __dependency26__.removeObserver;
1949
+ var addBeforeObserver = __dependency26__.addBeforeObserver;
1950
+ var _suspendBeforeObserver = __dependency26__._suspendBeforeObserver;
1951
+ var _suspendObserver = __dependency26__._suspendObserver;
1952
+ var _suspendBeforeObservers = __dependency26__._suspendBeforeObservers;
1953
+ var _suspendObservers = __dependency26__._suspendObservers;
1954
+ var beforeObserversFor = __dependency26__.beforeObserversFor;
1955
+ var removeBeforeObserver = __dependency26__.removeBeforeObserver;
1956
+ var IS_BINDING = __dependency27__.IS_BINDING;
1957
+ var mixin = __dependency27__.mixin;
1958
+ var Mixin = __dependency27__.Mixin;
1959
+ var required = __dependency27__.required;
1960
+ var aliasMethod = __dependency27__.aliasMethod;
1961
+ var observer = __dependency27__.observer;
1962
+ var immediateObserver = __dependency27__.immediateObserver;
1963
+ var beforeObserver = __dependency27__.beforeObserver;
1964
+ var Binding = __dependency28__.Binding;
1965
+ var isGlobalPath = __dependency28__.isGlobalPath;
1966
+ var bind = __dependency28__.bind;
1967
+ var oneWay = __dependency28__.oneWay;
1968
+ var run = __dependency29__["default"];
1969
+ var libraries = __dependency30__["default"];
1970
+ var isNone = __dependency31__.isNone;
1971
+ var none = __dependency31__.none;
1972
+ var isEmpty = __dependency32__.isEmpty;
1973
+ var empty = __dependency32__.empty;
1974
+ var isBlank = __dependency33__["default"];
1973
1975
  // END IMPORTS
1974
1976
 
1975
1977
  // BEGIN EXPORTS
@@ -2152,6 +2154,81 @@ define("ember-metal",
2152
2154
 
2153
2155
  __exports__["default"] = Ember;
2154
2156
  });
2157
+ define("ember-metal/alias",
2158
+ ["ember-metal/property_get","ember-metal/property_set","ember-metal/error","ember-metal/properties","ember-metal/platform","ember-metal/utils","ember-metal/dependent_keys","exports"],
2159
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
2160
+ "use strict";
2161
+ var get = __dependency1__.get;
2162
+ var set = __dependency2__.set;
2163
+ var EmberError = __dependency3__["default"];
2164
+ var Descriptor = __dependency4__.Descriptor;
2165
+ var defineProperty = __dependency4__.defineProperty;
2166
+ var create = __dependency5__.create;
2167
+ var meta = __dependency6__.meta;
2168
+ var inspect = __dependency6__.inspect;
2169
+ var addDependentKeys = __dependency7__.addDependentKeys;
2170
+ var removeDependentKeys = __dependency7__.removeDependentKeys;
2171
+
2172
+ function alias(altKey) {
2173
+ return new AliasedProperty(altKey);
2174
+ }
2175
+
2176
+ __exports__.alias = alias;function AliasedProperty(altKey) {
2177
+ this.altKey = altKey;
2178
+ this._dependentKeys = [ altKey ];
2179
+ }
2180
+
2181
+ __exports__.AliasedProperty = AliasedProperty;AliasedProperty.prototype = create(Descriptor.prototype);
2182
+
2183
+ AliasedProperty.prototype.get = function AliasedProperty_get(obj, keyName) {
2184
+ return get(obj, this.altKey);
2185
+ };
2186
+
2187
+ AliasedProperty.prototype.set = function AliasedProperty_set(obj, keyName, value) {
2188
+ return set(obj, this.altKey, value);
2189
+ };
2190
+
2191
+ AliasedProperty.prototype.willWatch = function(obj, keyName) {
2192
+ addDependentKeys(this, obj, keyName, meta(obj));
2193
+ };
2194
+
2195
+ AliasedProperty.prototype.didUnwatch = function(obj, keyName) {
2196
+ removeDependentKeys(this, obj, keyName, meta(obj));
2197
+ };
2198
+
2199
+ AliasedProperty.prototype.setup = function(obj, keyName) {
2200
+ var m = meta(obj);
2201
+ if (m.watching[keyName]) {
2202
+ addDependentKeys(this, obj, keyName, m);
2203
+ }
2204
+ };
2205
+
2206
+ AliasedProperty.prototype.teardown = function(obj, keyName) {
2207
+ var m = meta(obj);
2208
+ if (m.watching[keyName]) {
2209
+ removeDependentKeys(this, obj, keyName, m);
2210
+ }
2211
+ };
2212
+
2213
+ AliasedProperty.prototype.readOnly = function() {
2214
+ this.set = AliasedProperty_readOnlySet;
2215
+ return this;
2216
+ };
2217
+
2218
+ function AliasedProperty_readOnlySet(obj, keyName, value) {
2219
+ throw new EmberError('Cannot set read-only property "' + keyName + '" on object: ' + inspect(obj));
2220
+ }
2221
+
2222
+ AliasedProperty.prototype.oneWay = function() {
2223
+ this.set = AliasedProperty_oneWaySet;
2224
+ return this;
2225
+ };
2226
+
2227
+ function AliasedProperty_oneWaySet(obj, keyName, value) {
2228
+ defineProperty(obj, keyName, null);
2229
+ return set(obj, keyName, value);
2230
+ }
2231
+ });
2155
2232
  define("ember-metal/array",
2156
2233
  ["exports"],
2157
2234
  function(__exports__) {
@@ -3099,29 +3176,23 @@ define("ember-metal/chains",
3099
3176
  __exports__.ChainNode = ChainNode;
3100
3177
  });
3101
3178
  define("ember-metal/computed",
3102
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/enumerable_utils","ember-metal/platform","ember-metal/watching","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/is_empty","ember-metal/is_none","exports"],
3103
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
3179
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/dependent_keys","exports"],
3180
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
3104
3181
  "use strict";
3105
3182
  var Ember = __dependency1__["default"];
3106
3183
  var get = __dependency2__.get;
3107
3184
  var set = __dependency3__.set;
3108
3185
  var meta = __dependency4__.meta;
3109
3186
  var META_KEY = __dependency4__.META_KEY;
3110
- var guidFor = __dependency4__.guidFor;
3111
- var typeOf = __dependency4__.typeOf;
3112
3187
  var inspect = __dependency4__.inspect;
3113
- var EnumerableUtils = __dependency5__["default"];
3114
- var create = __dependency6__.create;
3115
- var watch = __dependency7__.watch;
3116
- var unwatch = __dependency7__.unwatch;
3117
- var expandProperties = __dependency8__["default"];
3118
- var EmberError = __dependency9__["default"];
3119
- var Descriptor = __dependency10__.Descriptor;
3120
- var defineProperty = __dependency10__.defineProperty;
3121
- var propertyWillChange = __dependency11__.propertyWillChange;
3122
- var propertyDidChange = __dependency11__.propertyDidChange;
3123
- var isEmpty = __dependency12__["default"];
3124
- var isNone = __dependency13__.isNone;
3188
+ var expandProperties = __dependency5__["default"];
3189
+ var EmberError = __dependency6__["default"];
3190
+ var Descriptor = __dependency7__.Descriptor;
3191
+ var defineProperty = __dependency7__.defineProperty;
3192
+ var propertyWillChange = __dependency8__.propertyWillChange;
3193
+ var propertyDidChange = __dependency8__.propertyDidChange;
3194
+ var addDependentKeys = __dependency9__.addDependentKeys;
3195
+ var removeDependentKeys = __dependency9__.removeDependentKeys;
3125
3196
 
3126
3197
  /**
3127
3198
  @module ember-metal
@@ -3131,84 +3202,10 @@ define("ember-metal/computed",
3131
3202
 
3132
3203
 
3133
3204
  var metaFor = meta,
3134
- a_slice = [].slice,
3135
- o_create = create;
3205
+ a_slice = [].slice;
3136
3206
 
3137
3207
  function UNDEFINED() { }
3138
3208
 
3139
- var lengthPattern = /\.(length|\[\])$/;
3140
-
3141
- // ..........................................................
3142
- // DEPENDENT KEYS
3143
- //
3144
-
3145
- // data structure:
3146
- // meta.deps = {
3147
- // 'depKey': {
3148
- // 'keyName': count,
3149
- // }
3150
- // }
3151
-
3152
- /*
3153
- This function returns a map of unique dependencies for a
3154
- given object and key.
3155
- */
3156
- function keysForDep(depsMeta, depKey) {
3157
- var keys = depsMeta[depKey];
3158
- if (!keys) {
3159
- // if there are no dependencies yet for a the given key
3160
- // create a new empty list of dependencies for the key
3161
- keys = depsMeta[depKey] = {};
3162
- } else if (!depsMeta.hasOwnProperty(depKey)) {
3163
- // otherwise if the dependency list is inherited from
3164
- // a superclass, clone the hash
3165
- keys = depsMeta[depKey] = o_create(keys);
3166
- }
3167
- return keys;
3168
- }
3169
-
3170
- function metaForDeps(meta) {
3171
- return keysForDep(meta, 'deps');
3172
- }
3173
-
3174
- function addDependentKeys(desc, obj, keyName, meta) {
3175
- // the descriptor has a list of dependent keys, so
3176
- // add all of its dependent keys.
3177
- var depKeys = desc._dependentKeys, depsMeta, idx, len, depKey, keys;
3178
- if (!depKeys) return;
3179
-
3180
- depsMeta = metaForDeps(meta);
3181
-
3182
- for(idx = 0, len = depKeys.length; idx < len; idx++) {
3183
- depKey = depKeys[idx];
3184
- // Lookup keys meta for depKey
3185
- keys = keysForDep(depsMeta, depKey);
3186
- // Increment the number of times depKey depends on keyName.
3187
- keys[keyName] = (keys[keyName] || 0) + 1;
3188
- // Watch the depKey
3189
- watch(obj, depKey, meta);
3190
- }
3191
- }
3192
-
3193
- function removeDependentKeys(desc, obj, keyName, meta) {
3194
- // the descriptor has a list of dependent keys, so
3195
- // remove all of its dependent keys.
3196
- var depKeys = desc._dependentKeys, depsMeta, idx, len, depKey, keys;
3197
- if (!depKeys) return;
3198
-
3199
- depsMeta = metaForDeps(meta);
3200
-
3201
- for(idx = 0, len = depKeys.length; idx < len; idx++) {
3202
- depKey = depKeys[idx];
3203
- // Lookup keys meta for depKey
3204
- keys = keysForDep(depsMeta, depKey);
3205
- // Decrement the number of times depKey depends on keyName.
3206
- keys[keyName] = (keys[keyName] || 0) - 1;
3207
- // Unwatch the depKey
3208
- unwatch(obj, depKey, meta);
3209
- }
3210
- }
3211
-
3212
3209
  // ..........................................................
3213
3210
  // COMPUTED PROPERTY
3214
3211
  //
@@ -3346,7 +3343,7 @@ define("ember-metal/computed",
3346
3343
  @return {Ember.ComputedProperty} this
3347
3344
  @chainable
3348
3345
  */
3349
- ComputedPropertyPrototype.volatile = function() {
3346
+ ComputedPropertyPrototype["volatile"] = function() {
3350
3347
  return this.cacheable(false);
3351
3348
  };
3352
3349
 
@@ -3702,6 +3699,28 @@ define("ember-metal/computed",
3702
3699
  cache[key] = undefined;
3703
3700
  };
3704
3701
 
3702
+ __exports__.ComputedProperty = ComputedProperty;
3703
+ __exports__.computed = computed;
3704
+ __exports__.cacheFor = cacheFor;
3705
+ });
3706
+ define("ember-metal/computed_macros",
3707
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/computed","ember-metal/is_empty","ember-metal/is_none","ember-metal/alias"],
3708
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__) {
3709
+ "use strict";
3710
+ var Ember = __dependency1__["default"];
3711
+ var get = __dependency2__.get;
3712
+ var set = __dependency3__.set;
3713
+ var computed = __dependency4__.computed;
3714
+ var isEmpty = __dependency5__["default"];
3715
+ var isNone = __dependency6__.isNone;
3716
+ var alias = __dependency7__.alias;
3717
+
3718
+ /**
3719
+ @module ember-metal
3720
+ */
3721
+
3722
+ var a_slice = [].slice;
3723
+
3705
3724
  function getProperties(self, propertyNames) {
3706
3725
  var ret = {};
3707
3726
  for(var i = 0; i < propertyNames.length; i++) {
@@ -4239,15 +4258,7 @@ define("ember-metal/computed",
4239
4258
  @return {Ember.ComputedProperty} computed property which creates an
4240
4259
  alias to the original value for property.
4241
4260
  */
4242
- computed.alias = function(dependentKey) {
4243
- return computed(dependentKey, function(key, value) {
4244
- if (arguments.length > 1) {
4245
- set(this, dependentKey, value);
4246
- }
4247
-
4248
- return get(this, dependentKey);
4249
- });
4250
- };
4261
+ computed.alias = alias;
4251
4262
 
4252
4263
  /**
4253
4264
  Where `computed.alias` aliases `get` and `set`, and allows for bidirectional
@@ -4282,9 +4293,7 @@ define("ember-metal/computed",
4282
4293
  one way computed property to the original value for property.
4283
4294
  */
4284
4295
  computed.oneWay = function(dependentKey) {
4285
- return computed(dependentKey, function() {
4286
- return get(this, dependentKey);
4287
- });
4296
+ return alias(dependentKey).oneWay();
4288
4297
  };
4289
4298
 
4290
4299
 
@@ -4336,9 +4345,7 @@ define("ember-metal/computed",
4336
4345
  @since 1.5.0
4337
4346
  */
4338
4347
  computed.readOnly = function(dependentKey) {
4339
- return computed(dependentKey, function() {
4340
- return get(this, dependentKey);
4341
- }).readOnly();
4348
+ return alias(dependentKey).readOnly();
4342
4349
  };
4343
4350
  /**
4344
4351
  A computed property that acts like a standard getter and setter,
@@ -4400,10 +4407,6 @@ define("ember-metal/computed",
4400
4407
  }
4401
4408
  });
4402
4409
  };
4403
-
4404
- __exports__.ComputedProperty = ComputedProperty;
4405
- __exports__.computed = computed;
4406
- __exports__.cacheFor = cacheFor;
4407
4410
  });
4408
4411
  define("ember-metal/core",
4409
4412
  ["exports"],
@@ -4433,7 +4436,7 @@ define("ember-metal/core",
4433
4436
 
4434
4437
  @class Ember
4435
4438
  @static
4436
- @version 1.7.0-beta.1
4439
+ @version 1.7.0-beta.2
4437
4440
  */
4438
4441
 
4439
4442
  if ('undefined' === typeof Ember) {
@@ -4460,10 +4463,10 @@ define("ember-metal/core",
4460
4463
  /**
4461
4464
  @property VERSION
4462
4465
  @type String
4463
- @default '1.7.0-beta.1'
4466
+ @default '1.7.0-beta.2'
4464
4467
  @static
4465
4468
  */
4466
- Ember.VERSION = '1.7.0-beta.1';
4469
+ Ember.VERSION = '1.7.0-beta.2';
4467
4470
 
4468
4471
  /**
4469
4472
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -4620,6 +4623,92 @@ define("ember-metal/core",
4620
4623
 
4621
4624
  __exports__["default"] = Ember;
4622
4625
  });
4626
+ define("ember-metal/dependent_keys",
4627
+ ["ember-metal/platform","ember-metal/watching","exports"],
4628
+ function(__dependency1__, __dependency2__, __exports__) {
4629
+ "use strict";
4630
+ var create = __dependency1__.create;
4631
+ var watch = __dependency2__.watch;
4632
+ var unwatch = __dependency2__.unwatch;
4633
+
4634
+ /**
4635
+ @module ember-metal
4636
+ */
4637
+
4638
+ var o_create = create;
4639
+
4640
+ // ..........................................................
4641
+ // DEPENDENT KEYS
4642
+ //
4643
+
4644
+ // data structure:
4645
+ // meta.deps = {
4646
+ // 'depKey': {
4647
+ // 'keyName': count,
4648
+ // }
4649
+ // }
4650
+
4651
+ /*
4652
+ This function returns a map of unique dependencies for a
4653
+ given object and key.
4654
+ */
4655
+ function keysForDep(depsMeta, depKey) {
4656
+ var keys = depsMeta[depKey];
4657
+ if (!keys) {
4658
+ // if there are no dependencies yet for a the given key
4659
+ // create a new empty list of dependencies for the key
4660
+ keys = depsMeta[depKey] = {};
4661
+ } else if (!depsMeta.hasOwnProperty(depKey)) {
4662
+ // otherwise if the dependency list is inherited from
4663
+ // a superclass, clone the hash
4664
+ keys = depsMeta[depKey] = o_create(keys);
4665
+ }
4666
+ return keys;
4667
+ }
4668
+
4669
+ function metaForDeps(meta) {
4670
+ return keysForDep(meta, 'deps');
4671
+ }
4672
+
4673
+ function addDependentKeys(desc, obj, keyName, meta) {
4674
+ // the descriptor has a list of dependent keys, so
4675
+ // add all of its dependent keys.
4676
+ var depKeys = desc._dependentKeys, depsMeta, idx, len, depKey, keys;
4677
+ if (!depKeys) return;
4678
+
4679
+ depsMeta = metaForDeps(meta);
4680
+
4681
+ for(idx = 0, len = depKeys.length; idx < len; idx++) {
4682
+ depKey = depKeys[idx];
4683
+ // Lookup keys meta for depKey
4684
+ keys = keysForDep(depsMeta, depKey);
4685
+ // Increment the number of times depKey depends on keyName.
4686
+ keys[keyName] = (keys[keyName] || 0) + 1;
4687
+ // Watch the depKey
4688
+ watch(obj, depKey, meta);
4689
+ }
4690
+ }
4691
+
4692
+ __exports__.addDependentKeys = addDependentKeys;function removeDependentKeys(desc, obj, keyName, meta) {
4693
+ // the descriptor has a list of dependent keys, so
4694
+ // remove all of its dependent keys.
4695
+ var depKeys = desc._dependentKeys, depsMeta, idx, len, depKey, keys;
4696
+ if (!depKeys) return;
4697
+
4698
+ depsMeta = metaForDeps(meta);
4699
+
4700
+ for(idx = 0, len = depKeys.length; idx < len; idx++) {
4701
+ depKey = depKeys[idx];
4702
+ // Lookup keys meta for depKey
4703
+ keys = keysForDep(depsMeta, depKey);
4704
+ // Decrement the number of times depKey depends on keyName.
4705
+ keys[keyName] = (keys[keyName] || 0) - 1;
4706
+ // Unwatch the depKey
4707
+ unwatch(obj, depKey, meta);
4708
+ }
4709
+ }
4710
+ __exports__.removeDependentKeys = removeDependentKeys;
4711
+ });
4623
4712
  define("ember-metal/enumerable_utils",
4624
4713
  ["ember-metal/array","exports"],
4625
4714
  function(__dependency1__, __exports__) {
@@ -7653,6 +7742,7 @@ define("ember-metal/properties",
7653
7742
  } else {
7654
7743
  obj[keyName] = undefined; // make enumerable
7655
7744
  }
7745
+ if (desc.setup) { desc.setup(obj, keyName); }
7656
7746
  } else {
7657
7747
  descs[keyName] = undefined; // shadow descriptor in proto
7658
7748
  if (desc == null) {
@@ -9769,6 +9859,9 @@ define("ember-metal/watch_key",
9769
9859
  if (!watching[keyName]) {
9770
9860
  watching[keyName] = 1;
9771
9861
 
9862
+ var desc = m.descs[keyName];
9863
+ if (desc && desc.willWatch) { desc.willWatch(obj, keyName); }
9864
+
9772
9865
  if ('function' === typeof obj.willWatchProperty) {
9773
9866
  obj.willWatchProperty(keyName);
9774
9867
  }
@@ -9793,6 +9886,9 @@ define("ember-metal/watch_key",
9793
9886
  if (watching[keyName] === 1) {
9794
9887
  watching[keyName] = 0;
9795
9888
 
9889
+ var desc = m.descs[keyName];
9890
+ if (desc && desc.didUnwatch) { desc.didUnwatch(obj, keyName); }
9891
+
9796
9892
  if ('function' === typeof obj.didUnwatchProperty) {
9797
9893
  obj.didUnwatchProperty(keyName);
9798
9894
  }