diffusion
Version:
Diffusion JavaScript client
61 lines (48 loc) • 1.44 kB
JavaScript
var inherits = require('inherits');
var regex = require('util/regex');
var utils = require('topics/topic-path-utils');
var TopicSelector = require('../../selectors/topic-selector');
var DQ = utils.DescendantQualifier;
function SplitPathSelector(components) {
this.qualifier = components.qualifier;
this.patterns = [];
var parts = utils.split(components.base);
parts.forEach(function (p) {
this.patterns.push(regex(p));
}.bind(this));
TopicSelector.call(
this,
components.type,
components.prefix,
components.expression);
}
inherits(SplitPathSelector, TopicSelector);
SplitPathSelector.prototype.doSelects = function (topicPath) {
var length = this.patterns.length,
parts = topicPath.split(utils.PATH_SEPARATOR);
switch (this.qualifier) {
case DQ.MATCH :
if (parts.length !== length) {
return false;
}
break;
case DQ.DESCENDANTS_OF_MATCH :
if (parts.length <= length) {
return false;
}
break;
case DQ.MATCH_AND_DESCENDANTS :
if (parts.length < length) {
return false;
}
break;
}
var i = 0;
for (; i < length; ++i) {
if (!this.patterns[i](parts[i])) {
return false;
}
}
return true;
};
module.exports = SplitPathSelector;