moray-filter
Version:
API for handling Moray-style filters
73 lines (55 loc) • 1.46 kB
JavaScript
// Copyright 2014 Mark Cavage, Inc. All rights reserved.
// Copyright 2015 Patrick Mooney
// Copyright 2016 Joyent, Inc.
var util = require('util');
var assert = require('assert-plus');
var helpers = require('./helpers');
///--- Internal
function toJSON(filter) {
return filter.json;
}
///--- API
function OrFilter(options) {
assert.optionalObject(options);
options = options || {};
assert.optionalArrayOfObject(options.filters);
this.filters = options.filters ? options.filters.slice() : [];
}
util.inherits(OrFilter, helpers.Filter);
Object.defineProperties(OrFilter.prototype, {
type: {
get: function getType() { return 'or'; },
configurable: false
},
json: {
get: function getJson() {
return {
type: 'Or',
filters: this.filters.map(toJSON)
};
},
configurable: false
}
});
OrFilter.prototype.toString = function toString() {
var str = '(|';
this.filters.forEach(function (f) {
str += f.toString();
});
str += ')';
return str;
};
OrFilter.prototype.matches = function matches(target, strictAttrCase) {
assert.object(target, 'target');
for (var i = 0; i < this.filters.length; i++) {
if (this.filters[i].matches(target, strictAttrCase))
return true;
}
return false;
};
OrFilter.prototype.addFilter = function addFilter(filter) {
assert.object(filter, 'filter');
this.filters.push(filter);
};
///--- Exports
module.exports = OrFilter;