Ohm-Management - Projektarbeit B-ME
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

and_filter.js 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2014 Mark Cavage, Inc. All rights reserved.
  2. // Copyright 2014 Patrick Mooney. All rights reserved.
  3. var util = require('util');
  4. var assert = require('assert-plus');
  5. var helpers = require('./helpers');
  6. ///--- API
  7. function AndFilter(options) {
  8. if (typeof (options) === 'object') {
  9. assert.arrayOfObject(options.filters, 'options.filters');
  10. } else {
  11. options = {};
  12. }
  13. this.__defineGetter__('type', function () { return 'and'; });
  14. this.filters = options.filters ? options.filters.slice() : [];
  15. var self = this;
  16. this.__defineGetter__('json', function () {
  17. return {
  18. type: 'And',
  19. filters: self.filters
  20. };
  21. });
  22. }
  23. util.inherits(AndFilter, helpers.Filter);
  24. AndFilter.prototype.toString = function () {
  25. var str = '(&';
  26. this.filters.forEach(function (f) {
  27. str += f.toString();
  28. });
  29. str += ')';
  30. return str;
  31. };
  32. AndFilter.prototype.matches = function (target, strictAttrCase) {
  33. assert.object(target, 'target');
  34. if (this.filters.length === 0) {
  35. /* true per RFC4526 */
  36. return true;
  37. }
  38. for (var i = 0; i < this.filters.length; i++) {
  39. if (!this.filters[i].matches(target, strictAttrCase))
  40. return false;
  41. }
  42. return true;
  43. };
  44. AndFilter.prototype.addFilter = function (filter) {
  45. assert.object(filter, 'filter');
  46. this.filters.push(filter);
  47. };
  48. ///--- Exports
  49. module.exports = AndFilter;