connect-traversal
Advanced tools
Comparing version 0.1.1 to 0.2.1
module.exports = process.env.CONNECT_TRAVERSAL_COV | ||
? require('./lib-cov/traversal') | ||
: require('./lib/traversal'); |
@@ -0,1 +1,6 @@ | ||
'use strict'; | ||
var util = require('util'); | ||
/** | ||
@@ -45,3 +50,16 @@ * Resource. | ||
/** | ||
* Traverse to resource. | ||
* @param resourceId resource id. | ||
*/ | ||
Resource.prototype.traverseTo = function (resourceId) { | ||
function _traverseTo(resource) { | ||
if(resource.resource === resourceId) return resource; | ||
return resource && resource.parent ? _traverseTo(resource.parent) : null; | ||
} | ||
return _traverseTo(this.parent); | ||
}; | ||
/** | ||
* Traversal object. | ||
@@ -80,9 +98,12 @@ * @constructor | ||
Inheritance.prototype = Resource.prototype; | ||
obj.prototype = new Inheritance(); | ||
obj.prototype.__constructor__ = obj; | ||
obj.prototype = new Inheritance; | ||
obj.prototype.constructor = obj; | ||
obj.prototype.__traversal__ = this; | ||
obj.__super__ = Resource; | ||
for (var k in proto) { | ||
obj.prototype[k] = proto[k]; | ||
} | ||
Object.getOwnPropertyNames(proto).forEach(function(name) { | ||
obj.prototype[name] = proto[name]; | ||
}); | ||
obj.prototype.toString = function() { | ||
return util.format('#<Resource[%s]>', this.resource); | ||
}; | ||
this.resources[id] = obj; | ||
@@ -188,3 +209,3 @@ }; | ||
*/ | ||
Traversal.prototype.clear = function(){ | ||
Traversal.prototype.clear = function (){ | ||
this.resources = {}; | ||
@@ -213,3 +234,3 @@ this.paths = {}; | ||
return '/' + parts.join('/'); | ||
} | ||
}; | ||
@@ -233,11 +254,12 @@ var traversal = new Traversal; | ||
var i = -1; | ||
function _callback() { | ||
i++; | ||
(i+1) == callbacks.length | ||
? callbacks[i](req, res, next) | ||
: callbacks[i](req, res, _callback); | ||
} | ||
return _callback(); | ||
} | ||
} | ||
function _callback() { | ||
i++; | ||
(i+1) == callbacks.length | ||
? callbacks[i](req, res, next) | ||
: callbacks[i](req, res, _callback); | ||
} | ||
return next(); | ||
@@ -244,0 +266,0 @@ }; |
{ | ||
"name": "connect-traversal", | ||
"version": "0.1.1", | ||
"description": "Middleware for Connect that allows to use URL traversal instead of URL dispatching.", | ||
"version": "0.2.1", | ||
"description": "Middleware for Connect and Express application which allows to use URL traversal instead of URL dispatching.", | ||
"keywords": [ | ||
"traverse", | ||
"traversal", | ||
"traversing", | ||
"connect", | ||
"express", | ||
"dispatch" | ||
"dispatch", | ||
"dispatching" | ||
], | ||
@@ -19,5 +21,5 @@ "author": "Dmitry Sedelnikov <dmnorc@gmail.com>", | ||
"devDependencies": { | ||
"mocha": "1.x", | ||
"mocha": ">= 1.x", | ||
"connect": ">= 1.x", | ||
"supertest": "0.8.2" | ||
"supertest": "0.11" | ||
}, | ||
@@ -37,6 +39,6 @@ "scripts": { | ||
], | ||
"engines": "node >= 0.6.x", | ||
"engines": "node >= 0.8.x", | ||
"readmeFilename": "README.md", | ||
"_id": "connect-traversal@0.1.1", | ||
"_id": "connect-traversal@0.2.1", | ||
"_from": "connect-traversal@latest" | ||
} |
@@ -1,3 +0,4 @@ | ||
connect-traversal | ||
Traversal for Connect application. v0.2 [![Build Status](https://travis-ci.org/dmnorc/connect-traversal.png)](https://travis-ci.org/dmnorc/connect-traversal) | ||
================= | ||
[![NPM](https://nodei.co/npm/connect-traversal.png?stars&downloads)](https://nodei.co/npm/connect-traversal/) | ||
@@ -85,3 +86,3 @@ connect-traversal is a middleware for Connect and Express framework that allows to use URL traversal instead of URL dispatching. | ||
For auto-creation resource chain on the url in Connect application, this app should use traversal middleware. | ||
For auto-generating resource chain based on the url in Connect application (in other words to include traversing into Connect-Express app), this app should use traversal middleware. | ||
``` | ||
@@ -100,21 +101,25 @@ var traversal = require('connect-traversal'); | ||
traverse.registerPath('userResource', {method: 'get'}, function(req, res) { | ||
var userResource = req.resource //UserResource for user 123 | ||
var userResource = req.resource //userResource for user 123 | ||
var parent = resource.parent //UsersResource | ||
parent.createUser({id: '222'}); | ||
var anotherUserResource = parent.get('222'); //UserResource for user 222 | ||
var anotherUserResource = parent.get('222'); //userResource for user 222 | ||
// req.buildResourceUrl(userResource) is '/users/user/123' | ||
// req.buildResourceUrl(userResource, 'blabla') is '/users/user/123/blabla' | ||
// req.buildResourceUrl(userResource.parent) is '/users/' | ||
}); | ||
// will trigger for POST /users/users/create with special appendix path name only | ||
// will trigger for POST /users/create with special appendix path name only | ||
traverse.registerPath('usersResource', {method: 'post', name: 'create'}, function(req, res) { | ||
// req.pathname = 'create' | ||
var resource = req.resource //UsersResource | ||
var resource = req.resource //usersResource | ||
}); | ||
// will trigger for GET /users/users/random/222/333 with special appendix path name only | ||
traverse.registerPath('users', {method: 'post', name: 'random'}, function(req, res) { | ||
// req.pathname = 'random' | ||
// will trigger for GET /users/random/222/333 with special appendix path name only | ||
traverse.registerPath('usersResource', {method: 'post', name: 'random'}, function(req, res) { | ||
// req.pathname == 'random' | ||
// req.resource //UsersResource | ||
// also contains subpath list | ||
// req.subpath = ['222', '333'] | ||
var resource = req.resource //UsersResource | ||
// req.subpath == ['222', '333'] | ||
var resource = req.resource //usersResource | ||
res.send('users'); | ||
@@ -125,5 +130,5 @@ }); | ||
// but not for /news because of specified parent resource. | ||
traverse.registerPath('news', {parent: 'userResource'}, function(req, res) { | ||
req.parent // RootResource | ||
var resource = req.resource //NewsResource | ||
traverse.registerPath('newsResource', {parent: 'userResource'}, function(req, res) { | ||
var resource = req.resource // newsResource | ||
resource.parent // userResource | ||
res.send(resource.getNews()); | ||
@@ -130,0 +135,0 @@ }); |
Sorry, the diff of this file is not supported yet
56477
16
243
137