I have just implemented the new url routing structure into Roads. Lets start with the example :

routes : {
  'users' : {
    controller : 'user',
    view : 'many',
    routes : {
      '#id' : 'one',
      'auth' : 'auth'
    }
  },
  'me' : {
    controller : 'user',
    view : 'one'
  }
}

Each key is a "URl Part". I define a URL Part here as one value in the array resulted from url.split('/');

The value for each URL Part defines the necessary information to render the url (eg "users" = "/users"). I use a standard controller/view structure for my code so you can see those keys here. Additional data (like templates, pre/post execution code, etc) could be defined here.

The "routes" key within each value defines child routes. The keys can be literals (eg "auth") or variables (eg "#id"). Variable types are defined by the first character, # means only numbers, $ means any string value that does not contain the character "/". The value of each child route can be defined identically to the parent route.

Child route values have one additional feature, they inherit any missing values from their parents. Not only are object keys inherited, but I have added an additional shortcut. Since views are likely to be the only thing that ever changes, you can forgo the objects entirely and have a route point directly to the view string (eg {"#id" : "one"} tells /users/#id to load the view "one" from within the controller "user").

So lets unwrap the gist from above so you can see what a traditional router would look like.

[{
  route : /\/users/
  controller : 'user',
  view : 'many'
}, 
{
  route : /\/users/(d+)/,
  controller : 'user',
  view : 'one',
  matches : ['id']
},
{
  route : /\/users/auth/,
  controller : 'user',
  view : 'auth'
},
{
  route : /\/me/,
  controller : 'user',
  view : 'one'
}]

In these traditional routes, you have tons of duplication, and have to iterate over every single route to find your match.

In Road's router, you have much less typing and can skip many routes. If a route does not match the url, there's no reason to check that route's children.

In the end, this feels much more powerful and much less tedious. I think it will make routes more enjoyable to write.