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

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
  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
  }