Skip to content

Instantly share code, notes, and snippets.

@pfrazee
Last active December 16, 2015 17:09
Show Gist options
  • Save pfrazee/5467955 to your computer and use it in GitHub Desktop.
Save pfrazee/5467955 to your computer and use it in GitHub Desktop.
YARD (yet another router design)
ROUTE(request,
{ head: 'get', put: 'set', patch: 'set', post:'postTo' },
{
'/': service,
'/products': products,
'/products/:pid': productItems,
'/session': session,
'/:collection': collection,
'/:collection/:item': item
}
);
var service = {
get: function(request, response) { }
};
var products = {
get: function(request, response) { }
};
var productItems = {
get: function(request, response, pid) { }
};
var session = {
get: function(request, response) { },
set: function(request, response) { }
};
var collection = {
get: function(request, response, cid) { },
postTo: function(request, response, cid) { }
};
var item = {
get: function(request, response, cid, iid) { },
set: function(request, response, cid, iid) { },
'delete': function(request, response, cid, iid) { }
};
// -- inlined --
ROUTE(request,
{ head: 'get', put: 'set', patch: 'set', 'delete': del },
{
'/': { get:getService },
'/products': { get:getProducts, post:addProduct },
'/products/:pid': { get:getProduct, set:setProduct, del:delProduct },
'/session': { get:getSession, set:setSession },
'/:collection': { get:getCollection, /* ... */ },
'/:collection/:item': { get:getItem, /* ... */ }
}
);
// -- name trailers --
ROUTE(request,
{ head: 'get', put: 'set', patch: 'set', post:'postTo' },
{
'/': service,
'/session': session,
'/products': products,
'/products/:pid': [products, 'Product'],
'/:collection': collection,
'/:collection/:item': [collection, 'Item']
}
);
var service = {
get: function(request, response) { }
};
var session = {
get: function(request, response) { },
set: function(request, response) { }
};
var products = {
get: function(request, response) { }
getProduct: function(request, response, pid) { }
};
var collection = {
get: function(request, response, cid) { },
postTo: function(request, response, cid) { },
getItem: function(request, response, cid, iid) { },
setItem: function(request, response, cid, iid) { },
deleteItem: function(request, response, cid, iid) { }
};
// -- another use of name trailers --
MyServer.prototype.handleHttpRequest = function(request, response) {
ROUTE(request,
{ head: 'get', put: 'set', patch: 'set', post:'postTo' },
{
'/': [this, 'Service'],
'/products': [this, 'Products'],
'/products/:pid': [this, 'Product'],
}
);
};
MyServer.prototype.getService = function(request, response) { };
MyServer.prototype.getProducts = function(request, response) { };
MyServer.prototype.postToProducts = function(request, response) { };
MyServer.prototype.getProduct = function(request, response, pid) { };
MyServer.prototype.setProduct = function(request, response, pid) { };
MyServer.prototype.deleteProduct = function(request, response, pid) { };
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment