EventName(eventName:string, delimiter:string|null|undefined?) class
extends
.expand()
returns
array
Expands this.name into all possible event name segments
.filter(eventNames:array)
returns
array
Filters an array of event names returning those that are under the namespace of this.name
.isNamespaced()
returns
boolean
Tests for the presence of this.delimiter in this.name
.toString()
returns
string
return this.name
/* istanbul ignore if */
if (typeof define !== "function") {
var define = require("amdefine")(module);
}
define(function (require) {
"use strict";
require("../abstract/base");
require("../string/contains");
require("../string/interpolate");
require("../regexp/escape");
var EventName,
createClass = require("../class"),
meta = require("../meta");
meta.setRequire(require);
EventName = createClass(
meta({
"name": "EventName",
"extends": "../abstract/base",
"properties": {
"name": "string",
"delimiter": "string"
},
"arguments": [{
"name": "eventName",
"type": "string"
}, {
"name": "delimiter",
"type": "string",
"default": "."
}]
}),
init
);
EventName.method(
meta({
"name": "expand",
"description": "Expands this.name into all possible event name segments",
"arguments": [],
"returns": "array"
}),
expand
);
EventName.method(
meta({
"name": "filter",
"description": "Filters an array of event names returning those that are under the namespace of this.name",
"arguments": [{
"name": "eventNames",
"type": "array"
}],
"returns": "array"
}),
filter
);
EventName.method(
meta({
"name": "isNamespaced",
"description": "Tests for the presence of this.delimiter in this.name",
"arguments": [],
"returns": "boolean"
}),
isNamespaced
);
EventName.method(
meta({
"name": "toString",
"description": "return this.name",
"arguments": [],
"returns": "string"
}),
toString
);
function init (name, delimiter) {
this.name = name;
this.delimiter = delimiter;
}
function expand () {
return this.name.split(this.delimiter).map(toExpanded, this);
}
function filter (eventNames) {
this.invoke(createTester);
return eventNames.filter(underNamespace, this);
}
function isNamespaced () {
return this.name.contains(this.delimiter);
}
function toString () {
return this.name;
}
function toExpanded (segment, index, segments) {
return segments.slice(0, index + 1).join(this.delimiter);
}
function createTester () {
var pattern = "^{name}(?:{delimiter}|$)".interpolate({
name: RegExp.escape(this.name),
delimiter: RegExp.escape(this.delimiter)
});
this.tester = new RegExp(pattern);
}
function underNamespace (eventName) {
return this.tester.test(eventName);
}
return EventName;
});