Source: filters/elemMatchFilter.js

'use strict';
var _ = require('lodash');
var util = require('../util');
var NestedFilter = require('./nestedFilter');
var AndFilter = require('./andFilter');

/**
 * @class Abstraction that mimics mongoDB's $elemMatch.
 * @augments {Filter}
 * Creates a nested "AND" filter including each property.
 */
function ElemMatchFilter(nestPath, element) {
  var attributesFilter = new AndFilter();
  _.each(element, function(value, key) {
    var unnested = (key.indexOf('.') < 0);
    attributesFilter.addTerm(nestPath + '.' + key, value, unnested);
  });

  util.createNonEnumerableProperty(this, 'attributesFilter', attributesFilter);
  util.merge(this, new NestedFilter(nestPath, attributesFilter));
  return this;
}

module.exports = ElemMatchFilter;


ElemMatchFilter.prototype.addFilter = function addFilter(filter) {
  this.attributesFilter.addFilter(filter);
  return this;
};