Skip to content

Commit

Permalink
feat(package): rewritten with ES6 syntax
Browse files Browse the repository at this point in the history
BREAKING CHANGE: this breaks compability with older versions of
Node.JS due to ES6 features. This version now requires Node.JS v4.0.0
or greater to work.
  • Loading branch information
Hans Kristian Flaatten committed Jun 9, 2016
1 parent e625c0a commit e059e80
Show file tree
Hide file tree
Showing 9 changed files with 591 additions and 625 deletions.
19 changes: 19 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# vi:syntax=json
{
"extends": "airbnb-base",
"env": {
"mocha": true,
"node": true
},
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "script",
"ecmaFeatures": {
"modules": false
}
},
"rules": {
"strict": [2, "global"],
"no-param-reassign": [2, { "props": false }]
}
}
63 changes: 0 additions & 63 deletions .jshintrc

This file was deleted.

8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
# MongoDB QueryString
# MongoDB QueryString Parser

[![Build status](https://img.shields.io/wercker/ci/566dca6762f42c407207777a.svg "Build status")](https://app.wercker.com/project/bykey/a31eed21b34f26d9b7af766b4614c260)
[![Build status](https://app.wercker.com/status/b33b844c0ab10d56c318e116e587e2fa/s "wercker status")](https://app.wercker.com/project/bykey/b33b844c0ab10d56c318e116e587e2fa)
[![Codacy grade](https://img.shields.io/codacy/grade/782d0dc482ea4033892f99f968090b35.svg "Codacy grade")](https://www.codacy.com/app/DNT/node-mongo-querystring)
[![Codacy coverage](https://img.shields.io/codacy/coverage/782d0dc482ea4033892f99f968090b35.svg "Codacy coverage")](https://www.codacy.com/app/DNT/node-mongo-querystring)
[![NPM downloads](https://img.shields.io/npm/dm/mongo-querystring.svg "NPM downloads")](https://www.npmjs.com/package/mongo-querystring)
[![NPM version](https://img.shields.io/npm/v/mongo-querystring.svg "NPM version")](https://www.npmjs.com/package/mongo-querystring)
[![Node version](https://img.shields.io/node/v/mongo-querystring.svg "Node version")](https://www.npmjs.com/package/mongo-querystring)
[![Dependency status](https://img.shields.io/david/turistforeningen/node-mongo-querystring.svg "Dependency status")](https://david-dm.org/turistforeningen/node-mongo-querystring)
[![Dependency status](https://img.shields.io/david/Turistforeningen/node-mongo-querystring.svg "Dependency status")](https://david-dm.org/Turistforeningen/node-mongo-querystring)

Accept MongoDB query parameters through URI queries safe and easy. This is
useful when building an API and accepting various user specificed queries.
Expand Down
28 changes: 15 additions & 13 deletions examples/app.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,34 @@
'use strict';

var express = require('express');
var app = module.exports = express();
const express = require('express');
const app = module.exports = express();

var MongoQS = require('../index');
const JSONStream = require('JSONStream');
const MongoQS = require('../index');
const mongo = require('./db');

// Create a new Mongo QueryString parser
var qs = new MongoQS({
const qs = new MongoQS({
custom: {
bbox: 'geojson',
near: 'geojson'
}
near: 'geojson',
},
});

app.get('/api/places', function(req, res) {
app.get('/api/places', (req, res) => {
res.set('Content-Type', 'application/json');

// Parse the request query parameters
var query = qs.parse(req.query);
var collection = require('./db').db.collection('places');
var cursor = collection.find(query).limit(3);
const query = qs.parse(req.query);
const collection = mongo.db.collection('places');
const cursor = collection.find(query).limit(3);

cursor.stream().pipe(require('JSONStream').stringify()).pipe(res);
cursor.stream().pipe(JSONStream.stringify()).pipe(res);
});

if (!module.parent) {
require('./db').once('ready', function() {
mongo.once('ready', () => {
app.listen(3000);
console.log('Express started on port 3000');
console.log('Express started on port 3000'); // eslint-disable-line no-console
});
}
18 changes: 8 additions & 10 deletions examples/db.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
'use strict';

var EventEmitter = require('events').EventEmitter;
var MongoClient = require('mongodb').MongoClient;
var inherits = require('util').inherits;
const EventEmitter = require('events').EventEmitter;
const MongoClient = require('mongodb').MongoClient;
const inherits = require('util').inherits;

var Mongo = function(uri) {
function Mongo(uri) {
EventEmitter.call(this);

this.db = null;

var $this = this;

new MongoClient.connect(uri, function(err, db) {
MongoClient.connect(uri, (err, db) => {
if (err) { throw err; }

$this.db = db;
$this.emit('ready');
this.db = db;
this.emit('ready');
});

return this;
};
}

inherits(Mongo, EventEmitter);

Expand Down
100 changes: 50 additions & 50 deletions examples/test.js
Original file line number Diff line number Diff line change
@@ -1,55 +1,55 @@
'use strict';

var assert = require('assert');
var request = require('supertest');
const assert = require('assert');
const request = require('supertest');

var data = require('./data');
var app = request(require('./app'));
var db = require('./db');
const data = require('./data');
const app = request(require('./app'));
const db = require('./db');

describe('Example App', function() {
before(function(done) {
describe('Example App', () => {
before(done => {
if (db.db) { return done(); }
db.once('ready', done);
return db.once('ready', done);
});

before(function(done) {
before(done => {
db.db.dropDatabase(done);
});

before(function(done) {
db.db.collection('places').createIndex({geojson: '2dsphere'}, done);
before(done => {
db.db.collection('places').createIndex({ geojson: '2dsphere' }, done);
});

before(function(done) {
before(done => {
db.db.collection('places').insertMany(data, done);
});

var url = '/api/places';
const url = '/api/places';

it('returns all them places', function(done) {
it('returns all them places', done => {
app.get(url)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 3);
})
.end(done);
});

it('returns places matching name', function(done) {
app.get(url + '?name=Vatnane')
it('returns places matching name', done => {
app.get(`${url}?name=Vatnane`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 1);
assert.equal(res.body[0].name, 'Vatnane');
})
.end(done);
});

it('returns places near point', function(done) {
app.get(url + '?near=6.13037,61.00607')
it('returns places near point', done => {
app.get(`${url}?near=6.13037,61.00607`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 3);
assert.equal(res.body[0].name, 'Solrenningen');
assert.equal(res.body[1].name, 'Åsedalen');
Expand All @@ -58,49 +58,49 @@ describe('Example App', function() {
.end(done);
});

it('returns places near point with max distance', function(done) {
app.get(url + '?near=6.13037,61.00607,7000')
it('returns places near point with max distance', done => {
app.get(`${url}?near=6.13037,61.00607,7000`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 2);
assert.equal(res.body[0].name, 'Solrenningen');
assert.equal(res.body[1].name, 'Åsedalen');
})
.end(done);
});

it('returns places near point with max and min distance', function(done) {
app.get(url + '?near=6.13037,61.00607,7000,1000')
it('returns places near point with max and min distance', done => {
app.get(`${url}?near=6.13037,61.00607,7000,1000`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 1);
assert.equal(res.body[0].name, 'Åsedalen');
})
.end(done);
});

it('returns places inside bbox', function(done) {
var bbox = [
it('returns places inside bbox', done => {
const bbox = [
'5.5419158935546875',
'60.92859723298985',
'6.0363006591796875',
'61.018719220334525'
'61.018719220334525',
].join(',');

app.get(url + '?bbox=' + bbox)
app.get(`${url}?bbox=${bbox}`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 2);
assert.equal(res.body[0].name, 'Norddalshytten');
assert.equal(res.body[1].name, 'Vardadalsbu');
})
.end(done);
});

it('returns places with any of the following tags', function(done) {
app.get(url + '?tags[]=Båt&tags[]=Stekeovn')
it('returns places with any of the following tags', done => {
app.get(`${url}?tags[]=Båt&tags[]=Stekeovn`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 3);
assert.equal(res.body[0].name, 'Solrenningen');
assert.equal(res.body[1].name, 'Åsedalen');
Expand All @@ -109,50 +109,50 @@ describe('Example App', function() {
.end(done);
});

it('returns places with visits less than 40', function(done) {
app.get(url + '?visits=<40')
it('returns places with visits less than 40', done => {
app.get(`${url}?visits=<40`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 0);
})
.end(done);
});

it('returns places with visits less than or equal to 40', function(done) {
app.get(url + '?visits=<=40')
it('returns places with visits less than or equal to 40', done => {
app.get(`${url}?visits=<=40`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 1);
assert.equal(res.body[0].name, 'Solrenningen');
})
.end(done);
});

it('returns places with visits greater than 10,000', function(done) {
app.get(url + '?visits=>10000')
it('returns places with visits greater than 10,000', done => {
app.get(`${url}?visits=>10000`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 1);
assert.equal(res.body[0].name, 'Vardadalsbu');
})
.end(done);
});

it('returns places with visits > or equal to 10,000', function(done) {
app.get(url + '?visits=>=10000')
it('returns places with visits > or equal to 10,000', done => {
app.get(`${url}?visits=>=10000`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 2);
assert.equal(res.body[0].name, 'Åsedalen');
assert.equal(res.body[1].name, 'Vardadalsbu');
})
.end(done);
});

it('returns places with visits > 40 and < 10,000', function(done) {
app.get(url + '?visits=>40&visits=<10000')
it('returns places with visits > 40 and < 10,000', done => {
app.get(`${url}?visits=>40&visits=<10000`)
.expect(200)
.expect(function(res) {
.expect(res => {
assert.equal(res.body.length, 3);
assert.equal(res.body[0].name, 'Norddalshytten');
assert.equal(res.body[1].name, 'Vatnane');
Expand Down
Loading

0 comments on commit e059e80

Please sign in to comment.