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));