From d336d7cbbd126dfa8a50da1572944714ca4a085f Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Sat, 26 Jan 2019 01:09:16 -0500 Subject: [PATCH] Functioning 'exclude' --- src/tests/paramParser.spec.js | 20 +++++++++++++++++++- src/utils/paramParser.js | 7 +++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/tests/paramParser.spec.js b/src/tests/paramParser.spec.js index 05a4bf8045..485668eb3d 100644 --- a/src/tests/paramParser.spec.js +++ b/src/tests/paramParser.spec.js @@ -42,6 +42,11 @@ describe('Param Parser', () => { let parsed = paramParser(Page, {likes: '{gte}50{lt}100'}); expect(parsed.searchParams).toEqual({likes: {'$gte': '50', '$lt': '100'}}); }); + + it('Like', () => { + let parsed = paramParser(Page, {title: '{like}This'}); + expect(parsed.searchParams).toEqual({title: { '$regex': 'This', '$options': '-i' }}); + }) }); describe('Include', () => { @@ -55,7 +60,20 @@ describe('Param Parser', () => { expect(parsed.searchParams) .toEqual({'$or':[{_id: 'SomeId'},{_id: 'SomeSecondId'}]}); }); - }) + }); + + describe('Exclude', () => { + it('Exclude Single', () => { + let parsed = paramParser(Page, {exclude: 'SomeId'}); + expect(parsed.searchParams).toEqual({_id: { '$ne': 'SomeId'}}); + }); + + it('Exclude Multiple', () => { + let parsed = paramParser(Page, {exclude: 'SomeId,SomeSecondId'}); + expect(parsed.searchParams) + .toEqual({'$and':[{_id: { '$ne': 'SomeId'}},{_id: { '$ne': 'SomeSecondId'}}]}); + }); + }); describe('Pagination / Limits', () => { it('Page number', () => { diff --git a/src/utils/paramParser.js b/src/utils/paramParser.js index fbb2e04b93..32ab9c3897 100644 --- a/src/utils/paramParser.js +++ b/src/utils/paramParser.js @@ -70,6 +70,13 @@ function parseParam(key, val, model, query) { query = addSearchParam(query, '$or', orArray); } else query.searchParams['_id'] = val; + } else if (lcKey === 'exclude') { + if (val.match(',')) { + let andArray = []; + val.split(',').map(id => andArray.push({_id: {$ne: id}})); + query = addSearchParam(query, '$and', andArray); + } else + query.searchParams['_id'] = {$ne: val}; } else { query = parseSchemaForKey(model.schema, query, '', lcKey, val, operator); }