// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of observe;

/**
 * Forwards an observable property from one object to another. For example:
 *
 *     class MyModel extends ObservableBase {
 *       StreamSubscription _sub;
 *       MyOtherModel _otherModel;
 *
 *       MyModel() {
 *         ...
 *         _sub = onPropertyChange(_otherModel, const Symbol('value'),
 *             () => notifyProperty(this, const Symbol('prop'));
 *       }
 *
 *       String get prop => _otherModel.value;
 *       set prop(String value) { _otherModel.value = value; }
 *     }
 *
 * See also [notifyProperty].
 */
// TODO(jmesserly): make this an instance method?
StreamSubscription onPropertyChange(Observable source, Symbol sourceName,
    void callback()) {
  return source.changes.listen((records) {
    for (var record in records) {
      if (record.changes(sourceName)) {
        callback();
      }
    }
  });
}
