From 2e2b488a1ca3380816b2cf752469d74cda20c1ae Mon Sep 17 00:00:00 2001 From: Bulkan Evcimen Date: Wed, 21 May 2014 21:48:06 +1000 Subject: [PATCH 1/6] update minimum express version to 4 * add test command * use app.delete instead of .del --- package.json | 8 +++++--- test/namespace.test.js | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 152aa88..7d2b85c 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "description": "Express namespaced routes extension", "version": "0.1.1", "author": "TJ Holowaychuk ", + "scripts": { + "test": "make test" + }, "keywords": [ "express" ], @@ -11,8 +14,7 @@ "methods": "0.0.1" }, "devDependencies": { - "express": "3.x", - "ejs": "*", + "express": "4", "mocha": "*", "supertest": "*" }, @@ -20,4 +22,4 @@ "type": "git", "url": "https://github.com/visionmedia/express-namespace.git" } -} \ No newline at end of file +} diff --git a/test/namespace.test.js b/test/namespace.test.js index 2aa7c98..6f16c3a 100644 --- a/test/namespace.test.js +++ b/test/namespace.test.js @@ -49,7 +49,7 @@ describe('app.namespace(path, fn)', function(){ res.send('GET baz'); }); - app.del('/all', function(req, res){ + app.delete('/all', function(req, res){ res.send('DELETE all baz'); }); }) @@ -106,4 +106,4 @@ describe('app.namespace(path, fn)', function(){ .get('/forum/23') .expect('23', done); }) -}) \ No newline at end of file +}) From 5a094e6ce34e3863ce786da7a2c94eb188aca35f Mon Sep 17 00:00:00 2001 From: Bulkan Evcimen Date: Wed, 21 May 2014 21:57:21 +1000 Subject: [PATCH 2/6] update methods to latest version * include test from visionmedia/express-namespace#42 --- package.json | 46 +++++++++++++++++++++--------------------- test/namespace.test.js | 11 ++++++++++ 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 7d2b85c..a55b547 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,25 @@ { - "name": "express-namespace", - "description": "Express namespaced routes extension", - "version": "0.1.1", - "author": "TJ Holowaychuk ", - "scripts": { - "test": "make test" - }, - "keywords": [ - "express" - ], - "main": "index", - "dependencies": { - "methods": "0.0.1" - }, - "devDependencies": { - "express": "4", - "mocha": "*", - "supertest": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/express-namespace.git" - } + "name": "express-namespace", + "description": "Express namespaced routes extension", + "version": "0.1.1", + "author": "TJ Holowaychuk ", + "scripts": { + "test": "make test" + }, + "keywords": [ + "express" + ], + "main": "index", + "dependencies": { + "methods": "^1.0.0" + }, + "devDependencies": { + "express": "4", + "mocha": "*", + "supertest": "*" + }, + "repository": { + "type": "git", + "url": "https://github.com/visionmedia/express-namespace.git" + } } diff --git a/test/namespace.test.js b/test/namespace.test.js index 6f16c3a..9325848 100644 --- a/test/namespace.test.js +++ b/test/namespace.test.js @@ -106,4 +106,15 @@ describe('app.namespace(path, fn)', function(){ .get('/forum/23') .expect('23', done); }) + + it('should support VERB methods as express', function(){ + var app = express(); + + app.namespace('/method', function(){ + app.all('/', function(){ }); + }); + for(var method in app.routes) { + assert.equal(app.routes[method][0].path, '/method', 'not support method ' + method); + } + }) }) From 05a7281fa3db3acf64ff9e453171f5a2ec8619c9 Mon Sep 17 00:00:00 2001 From: Bulkan Evcimen Date: Wed, 21 May 2014 22:33:48 +1000 Subject: [PATCH 3/6] a few more tests for routes with regexp's * no code changes needed to be done * relates to visionmedia/express-namespace#5, closes visionmedia/express-namespace#41 --- test/namespace.test.js | 49 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/test/namespace.test.js b/test/namespace.test.js index 9325848..af0813a 100644 --- a/test/namespace.test.js +++ b/test/namespace.test.js @@ -117,4 +117,53 @@ describe('app.namespace(path, fn)', function(){ assert.equal(app.routes[method][0].path, '/method', 'not support method ' + method); } }) + + + describe('routes with regexp', function(){ + + it('should allow regexp routes', function(done){ + var app = express(); + done = pending(2, done); + + app.namespace('/forum/:id', function(){ + app.get('/((view)?)', function(req, res){ + res.send('' + req.params.id); + }); + }); + + request(app) + .get('/forum/23/') + .expect('23', done); + + request(app) + .get('/forum/23/view') + .expect('23', done); + + }) + + it('should allow for complex regexp in routes', function(done){ + var app = express(); + + done = pending(2, done); + + app.namespace('/blog/:id', function(){ + app.get('/((:page)?)', function(req, res){ + if (req.params.page){ + return res.send('' + req.params.page); + } + res.send('' + req.params.id); + }) + }); + + request(app) + .get('/blog/23/') + .expect('23', done); + + request(app) + .get('/blog/23/12') + .expect('12', done); + + }); + }) + }) From 60a6bc12250019605b384013fb842b73adc90aa3 Mon Sep 17 00:00:00 2001 From: Bulkan Evcimen Date: Wed, 21 May 2014 23:01:12 +1000 Subject: [PATCH 4/6] added change & tests from visionmedia/express-namespace#37 --- index.js | 1 + test/namespace.test.js | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/index.js b/index.js index 42154ae..923090c 100644 --- a/index.js +++ b/index.js @@ -54,6 +54,7 @@ methods.forEach(function(method){ this.namespace(path, function(){ path = this._ns.join('/').replace(/\/\//g, '/').replace(/\/$/, '') || '/'; + path = 'string' !== typeof path ? path : this._ns.join('/').replace(/\/\//g, '/').replace(/\/$/, '') || '/'; args.forEach(function(fn){ orig.call(self, path, fn); }); diff --git a/test/namespace.test.js b/test/namespace.test.js index af0813a..1da4880 100644 --- a/test/namespace.test.js +++ b/test/namespace.test.js @@ -119,6 +119,39 @@ describe('app.namespace(path, fn)', function(){ }) + it('should not die with regexes, but they ignore namespacing', function(done){ + var app = express(); + done = pending(3, done); + + app.get(/test\d\d\d/, function(req, res) { + res.send("GET test"); + }); + + app.namespace('/forum/:id', function(){ + + app.get('/', function(req, res){ + res.send('' + req.params.id); + }); + + app.get(/^\/((?!login$|account\/login$|logout$)(.*))/, function(req, res) { + res.send("crazy reg"); + }); + + }); + + request(app) + .get('/forum/23') + .expect('23', done); + + request(app) + .get('/test123') + .expect('GET test', done); + + request(app) + .get('/account/123') + .expect('crazy reg', done); + }) + describe('routes with regexp', function(){ it('should allow regexp routes', function(done){ From 16bd4f99481eb5116b2be6d066a9a1d3399dc22a Mon Sep 17 00:00:00 2001 From: Bulkan Evcimen Date: Wed, 21 May 2014 23:06:35 +1000 Subject: [PATCH 5/6] fix from visionmedia/express-namespace#35 --- test/namespace.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/namespace.test.js b/test/namespace.test.js index 1da4880..f04feb1 100644 --- a/test/namespace.test.js +++ b/test/namespace.test.js @@ -33,7 +33,7 @@ describe('app.namespace(path, fn)', function(){ it('should prefix within .namespace()', function(done){ var app = express(); - done = pending(4, done); + done = pending(6, done); app.get('/one', function(req, res){ res.send('GET one'); From 18364139ebdc8f2d29ffb5a993792aae09e04348 Mon Sep 17 00:00:00 2001 From: Bulkan Evcimen Date: Wed, 21 May 2014 23:20:33 +1000 Subject: [PATCH 6/6] use better semver syntax for express * forgot to commit the removal of previos `path` assignment --- index.js | 3 +-- package.json | 14 +++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index 923090c..59abf36 100644 --- a/index.js +++ b/index.js @@ -53,7 +53,6 @@ methods.forEach(function(method){ , self = this; this.namespace(path, function(){ - path = this._ns.join('/').replace(/\/\//g, '/').replace(/\/$/, '') || '/'; path = 'string' !== typeof path ? path : this._ns.join('/').replace(/\/\//g, '/').replace(/\/$/, '') || '/'; args.forEach(function(fn){ orig.call(self, path, fn); @@ -63,4 +62,4 @@ methods.forEach(function(method){ return this; }; }); -}); \ No newline at end of file +}); diff --git a/package.json b/package.json index a55b547..8a53dbd 100644 --- a/package.json +++ b/package.json @@ -7,19 +7,19 @@ "test": "make test" }, "keywords": [ - "express" + "express" ], "main": "index", "dependencies": { - "methods": "^1.0.0" + "express": "^4.3.0", + "methods": "^1.0.0" }, "devDependencies": { - "express": "4", - "mocha": "*", - "supertest": "*" + "mocha": "*", + "supertest": "*" }, "repository": { - "type": "git", - "url": "https://github.com/visionmedia/express-namespace.git" + "type": "git", + "url": "https://github.com/visionmedia/express-namespace.git" } }