ArnaudBuchholz/gpf-js

View on GitHub
src/attributes/attributeforinstanceof.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * @file gpf.attributes.AttributeForInstanceOf class
 * @since 0.2.8
 */
/*#ifndef(UMD)*/
"use strict";
/*global _gpfAttributesAttributeAttribute*/ // Shortcut for gpf.attributes.AttributeAttribute
/*global _gpfAttributesCheckAppliedOnBaseClass*/ // Ensures attribute is applied on a specific base class
/*global _gpfDefine*/ // Shortcut for gpf.define
/*global _gpfIgnore*/ // Helper to remove unused parameter warning
/*exported _gpfAttributesAttributeForInstanceOf*/ // Shortcut for gpf.attributes.AttributeForInstanceOf
/*#endif*/

var _gpfAttributesAttributeForInstanceOf = _gpfDefine({
    $class: "gpf.attributes.AttributeForInstanceOf",
    $extend: _gpfAttributesAttributeAttribute,

    _BaseClass: null,

    /**
     * Attribute to restrict the use of an attribute to instance of a given class (or child classes).
     * It throws {@link gpf.Error.RestrictedBaseClassAttribute} if the target attribute is not used in a definition that
     * does not extend the expected base class (or any of its child classes).
     *
     * @param {Function} BaseClass The base class restriction
     * @throws {gpf.Error.InvalidParameter}
     * @constructor gpf.attributes.AttributeForInstanceOf
     * @extends gpf.attributes.Attribute
     * @gpf:attribute-restriction attribute,class,unique
     * @since 0.2.8
     */
    constructor: function (BaseClass) {
        if (typeof BaseClass !== "function") {
            gpf.Error.invalidParameter();
        }
        this._BaseClass = BaseClass;
    },

    /**
     * @inheritdoc
     * @since 0.2.8
     */
    _targetCheck: function (member, classDefinition) {
        _gpfIgnore(member);
        _gpfAttributesCheckAppliedOnBaseClass(classDefinition, this._BaseClass);
    }

});

gpf.attributes.AttributeForInstanceOf = _gpfAttributesAttributeForInstanceOf;