1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // Copyright 2014 Mark Cavage, Inc. All rights reserved.
- // Copyright 2014 Patrick Mooney. All rights reserved.
-
- var util = require('util');
-
- var assert = require('assert-plus');
-
- var helpers = require('./helpers');
-
-
- ///--- API
-
- function AndFilter(options) {
- if (typeof (options) === 'object') {
- assert.arrayOfObject(options.filters, 'options.filters');
- } else {
- options = {};
- }
-
- this.__defineGetter__('type', function () { return 'and'; });
- this.filters = options.filters ? options.filters.slice() : [];
-
- var self = this;
- this.__defineGetter__('json', function () {
- return {
- type: 'And',
- filters: self.filters
- };
- });
- }
- util.inherits(AndFilter, helpers.Filter);
-
-
- AndFilter.prototype.toString = function () {
- var str = '(&';
- this.filters.forEach(function (f) {
- str += f.toString();
- });
- str += ')';
-
- return str;
- };
-
-
- AndFilter.prototype.matches = function (target, strictAttrCase) {
- assert.object(target, 'target');
-
- if (this.filters.length === 0) {
- /* true per RFC4526 */
- return true;
- }
-
- for (var i = 0; i < this.filters.length; i++) {
- if (!this.filters[i].matches(target, strictAttrCase))
- return false;
- }
-
- return true;
- };
-
-
- AndFilter.prototype.addFilter = function (filter) {
- assert.object(filter, 'filter');
-
- this.filters.push(filter);
- };
-
-
- ///--- Exports
-
- module.exports = AndFilter;
|