diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..da23d0d --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# Deployed apps should consider commenting this line out: +# see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git +node_modules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8f90ea5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 retraceio + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a53cd42 --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# Search query parser + +A simple parser for advanced search query syntax. + +It parses a string like +``` +from:hi@retrace.io,foo@gmail.com to:me subject:vacations date:1/10/2013-15/04/2014 photos +``` + +To return an object like this + +```javascript +{ + from: ['hi@retrace.io', 'foo@gmail.com'], + to: 'me', + subject: 'vacations', + date: { + from: '1/10/2013', + to: '15/04/2014' + }, + text: 'photos' +} +``` + +## Installation + +```shell +$ npm install search-query-parser +``` + +## Usage + +```javascript +var searchQuery = require('search-query-parser'); + +var query = 'from:hi@retrace.io,foo@gmail.com to:me subject:vacations date:1/10/2013-15/04/2014 photos'; +var options = {keywords: ['from', 'to', 'subject'], ranges: ['date']} + +var searchQueryObj = searchQuery.parse(query, options); + +// searchQueryObj.from is now ['hi@retrace.io', 'foo@gmail.com'] +// searchQueryObj.top is now 'me' +// searchQueryObj.date is now {from: '1/10/2013', to: '15/04/2014'} +// searchQueryObj.text is now 'photos' +``` + +You can configure what keywords and ranges the parser should accept with the options argument. +It accepts 2 values: + * `keywords`, that can be separated by commas (,) + * `ranges`, that can be separated by a hyphen (-) +Both values take an array of strings, as in the example just above. + +## Testing + +The 15 tests are written using the BDD testing framework should.js. Run `npm install --dev` to install it. Ensure you also have Mocha installed (`node install -g mocha`). + +Run tests with `mocha -R spec`. + +## License + +The MIT License (MIT) + +Copyright (c) 2014 retraceio + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.