From d1e7af71cf20a9b539f3a2c86dad71a5a9d98a91 Mon Sep 17 00:00:00 2001 From: Lance Welsh Date: Wed, 3 May 2017 08:55:04 -0700 Subject: [PATCH] Introduce starts_with query filter --- lib/query.js | 4 +++- test/runner.js | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/query.js b/lib/query.js index 521ecf5..8216691 100644 --- a/lib/query.js +++ b/lib/query.js @@ -12,7 +12,9 @@ module.exports = (function() { 'ilike': function(a, b) { return a.toLowerCase().indexOf(b.toLowerCase()) > -1; }, 'like': function(a, b) { return a.indexOf(b) > -1; }, 'in': function(a, b) { return b.indexOf(a) > -1; }, - 'not_in': function(a, b) { return b.indexOf(a) === -1; } + 'not_in': function(a, b) { return b.indexOf(a) === -1; }, + 'starts_with': function(a, b) { const re = new RegExp('^' + b, ''); return !!a.match(re); }, + 'istarts_with': function(a, b) { const re = new RegExp('^' + b, 'i'); return !!a.match(re); } }; class Query { diff --git a/test/runner.js b/test/runner.js index 1349b86..cc48664 100644 --- a/test/runner.js +++ b/test/runner.js @@ -394,6 +394,28 @@ describe('Test Suite', function() { }); + it('should filter starts_with', function() { + + expect(nc.query().filter({name__starts_with: 'Keith'}).units().length).to.equal(1); + expect(nc.query().filter({name__starts_with: 'Keith'}).first()).to.equal(nc.find(1)); + + expect(nc.query().filter({name__starts_with: 'K'}).units().length).to.equal(2); + expect(nc.query().filter({name__starts_with: 'K'}).first()).to.equal(nc.find(1)); + expect(nc.query().filter({name__starts_with: 'K'}).units()[1]).to.equal(nc.find(4)); + + }); + + it('should filter istarts_with', function() { + + expect(nc.query().filter({name__istarts_with: 'keith'}).units().length).to.equal(1); + expect(nc.query().filter({name__istarts_with: 'keith'}).first()).to.equal(nc.find(1)); + + expect(nc.query().filter({name__istarts_with: 'k'}).units().length).to.equal(2); + expect(nc.query().filter({name__istarts_with: 'k'}).first()).to.equal(nc.find(1)); + expect(nc.query().filter({name__istarts_with: 'k'}).units()[1]).to.equal(nc.find(4)); + + }); + it('should exclude as expected', function() { expect(nc.query().exclude({name__is: 'Keith'}).first()).to.equal(nc.find(2));