all files / lib/waterline/query/finders/ helpers.js

84.38% Statements 27/32
50% Branches 5/10
100% Functions 8/8
100% Lines 27/27
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75                                                                                               
/**
 * Finder Helper Queries
 *
 * (these call other collection-level methods)
 */
 
var usageError = require('../../utils/usageError');
var utils = require('../../utils/helpers');
var normalize = require('../../utils/normalize');
 
module.exports = {
 
  // Return models where ALL of the specified attributes match queryString
 
  findOneLike: function(criteria, options, cb) {
    var usage = utils.capitalize(this.identity) + '.findOneLike([criteria],[options],callback)';
 
    // Normalize criteria
    criteria = normalize.likeCriteria(criteria, this._schema.schema);
    Iif (!criteria) return usageError('Criteria must be an object!', usage, cb);
 
    this.findOne(criteria, options, cb);
  },
 
  findLike: function(criteria, options, cb) {
    var usage = utils.capitalize(this.identity) + '.findLike([criteria],[options],callback)';
 
    // Normalize criteria
    criteria = normalize.likeCriteria(criteria, this._schema.schema);
    Iif (!criteria) return usageError('Criteria must be an object!', usage, cb);
 
    this.find(criteria, options, cb);
  },
 
  // Return models where >= 1 of the specified attributes start with queryString
  startsWith: function(criteria, options, cb) {
    var usage = utils.capitalize(this.identity) + '.startsWith([criteria],[options],callback)';
 
    criteria = normalize.likeCriteria(criteria, this._schema.schema, function applyStartsWith(criteria) {
      return criteria + '%';
    });
 
    Iif (!criteria) return usageError('Criteria must be an object!', usage, cb);
 
    this.find(criteria, options, cb);
  },
 
  // Return models where >= 1 of the specified attributes end with queryString
  endsWith: function(criteria, options, cb) {
    var usage = utils.capitalize(this.identity) + '.startsWith([criteria],[options],callback)';
 
    criteria = normalize.likeCriteria(criteria, this._schema.schema, function applyEndsWith(criteria) {
      return '%' + criteria;
    });
 
    Iif (!criteria) return usageError('Criteria must be an object!', usage, cb);
 
    this.find(criteria, options, cb);
  },
 
  // Return models where >= 1 of the specified attributes contain queryString
  contains: function(criteria, options, cb) {
    var usage = utils.capitalize(this.identity) + '.startsWith([criteria],[options],callback)';
 
    criteria = normalize.likeCriteria(criteria, this._schema.schema, function applyContains(criteria) {
      return '%' + criteria + '%';
    });
 
    Iif (!criteria) return usageError('Criteria must be an object!', usage, cb);
 
    this.find(criteria, options, cb);
  }
 
};