'use strict' var url = require('url') var RouteNode = require('./route-node') var utils = require('./utils') var assign = utils.assign var noop = utils.noop function Router(options) { options = options || {} this.routes = new RouteNode() } assign(Router.prototype, { add: function add(path, handler) { return this.routes.add(this._uriToParts(path), handler) }, route: function route(path, done) { var parts = this._uriToParts(path) done = done || noop return this.routes.get(parts, [], function (err, func, context, args) { if (err) { return done(err) } else { return done(null, func.apply(context, args)) } }) }, _uriToParts: function _uriToParts(uri) { return url.parse(uri) .pathname .split('/') .filter(function (str) { return str !== ''}) } }) module.exports = Router