bbc/flashheart

View on GitHub
docconfig/template/fixtures/base/index.js

Summary

Maintainability
A
3 hrs
Test Coverage
"use strict";
/**
 * @fileOverview This is base definition for all composed classes defined by the system
 * @module base
 * @requires base/chains
 * @requires dcl
 */

var dcl = require( "dcl" );
var chains = require( "./chains" );

/**
 * @classdesc The base of all classes in the system, this is one of the few pure "classes" in core the of the system. It is a
 * pretty clean little class whose primary purpose is to surface the composition chains and a basis for storing
 * options on mixin and subclass instances. Options are handled at the instance rather than the prototype level
 * so that multiple instances don't compete for default values.
 *
 * @exports base
 * @constructor
 * @extends base/chains
 */
var Base = dcl( [chains], /** @lends base# */{
    declaredClass     : "Base",
    /**
     * Add an option to a class. If any members of the hash already exist in `this.options`, they will be overwritten.
     * @param {hash} options A hash of options you want to set
     * @see {base#addDefaultOptions}
     */
    addOptions        : function ( options ) {
        options = options || {};
        if ( this.options ) {options = sys.extend( {}, sys.result( this, 'options' ), options );}
        this.options = options;
    },
    /**
     * Add a default option to a class. The default options are only set if there is not already a
     * value for the option.
     * @param {hash} options A hash of options you want to set
     * @see {base#addOptions}
     */
    addDefaultOptions : function ( options ) {
        options = options || {};
        if ( this.options ) {options = sys.defaults( {}, sys.result( this, 'options' ), options );}
        this.options = options;
    },

    /**
     * Call this to close your object and dispose of all maintained resources. You can define this method on your
     * own classes without having to call the superclass instance, however it is reccomended that you put
     * all disposal code in `destroy()`. You must be disciplined about calling this on your instances.
     * @see {base/chains#end}
     * @see {base/chains#destroy}
     */
    end : function () {
        this.destroy()
    },

    /**
     * Called when it is time to get rid of all of your instance level references and objects and events. You can
     * define this method on your own classes without having to call the superclass instance. It is called by
     * `instance.end()` automatically
     * @see {base/chains#end}
     * @see {base/chains#destroy}
     */
    destroy : function () {

    }


} );

Base.compose = dcl;
Base.mixin = dcl.mix;
module.exports = Base;