"use strict"; var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var _isType = require("./isType"); var isObject = _isType.isObject; var isString = _isType.isString; /** * Represents an Item of an Enum. * @param {String} key The Enum key. * @param {Number} value The Enum value. */ var EnumItem = (function () { /*constructor reference so that, this.constructor===EnumItem//=>true */ function EnumItem(key, value) { var options = arguments[2] === undefined ? {} : arguments[2]; _classCallCheck(this, EnumItem); this.key = key; this.value = value; this._options = options; this._options.ignoreCase = this._options.ignoreCase || false; } /** * Checks if the flagged EnumItem has the passing object. * @param {EnumItem || String || Number} value The object to check with. * @return {Boolean} The check result. */ EnumItem.prototype.has = function has(value) { if (EnumItem.isEnumItem(value)) { return (this.value & value.value) !== 0; } else if (isString(value)) { if (this._options.ignoreCase) { return this.key.toLowerCase().indexOf(value.toLowerCase()) >= 0; } return this.key.indexOf(value) >= 0; } else { return (this.value & value) !== 0; } }; /** * Checks if the EnumItem is the same as the passing object. * @param {EnumItem || String || Number} key The object to check with. * @return {Boolean} The check result. */ EnumItem.prototype.is = function is(key) { if (EnumItem.isEnumItem(key)) { return this.key === key.key; } else if (isString(key)) { if (this._options.ignoreCase) { return this.key.toLowerCase() === key.toLowerCase(); } return this.key === key; } else { return this.value === key; } }; /** * Returns String representation of this EnumItem. * @return {String} String representation of this EnumItem. */ EnumItem.prototype.toString = function toString() { return this.key; }; /** * Returns JSON object representation of this EnumItem. * @return {String} JSON object representation of this EnumItem. */ EnumItem.prototype.toJSON = function toJSON() { return this.key; }; /** * Returns the value to compare with. * @return {String} The value to compare with. */ EnumItem.prototype.valueOf = function valueOf() { return this.value; }; EnumItem.isEnumItem = function isEnumItem(value) { return value instanceof EnumItem || isObject(value) && value.key !== undefined && value.value !== undefined; }; return EnumItem; })(); module.exports = EnumItem;