Fastflux Home Reference Source Repository

src/core/observable/subscription.js

import Observable from './base.js';

/**
 * @example
 * let emitter = new Observable;
 * let log = (v) => console.log("Received:", v);
 *
 * let subscription = new Subscription(emitter, log);
 * assert(!subscription.isActive());
 *
 * subscription.activate();
 * assert(subscription.isActive());
 *
 * subscription.terminate();
 * assert(!subscription.isActive());
 */
export default class Subscription {

  /**
   * @param {Observable} source
   * @param {function} subscriber
   */
  constructor(source, subscriber) {
    this._source = source;
    this._subscriber = subscriber;
  }

  /**
   * Equivalent to `source.hasSubscribed(subscriber)`
   *
   * See {@link Observable#hasSubscribed}
   * @returns {boolean}
   */
  isActive() {
    return this._source.hasSubscribed(this._subscriber);
  }

  /**
   * Equivalent to `source.subscribe(subscriber)`
   *
   * See {@link Observable#subscribe}
   */
  activate() {
    this._source.subscribe(this._subscriber);
  }

  /**
   * Equivalent to `source.unsubscribe(subscriber)`
   *
   * See {@link Observable#unsubscribe}
   */
  terminate() {
    this._source.unsubscribe(this._subscriber);
  }
}