function Route(spec) {
  var route;
  if (this) {
    // constructor called with new
    route = this;
  } else {
    // constructor called as a function
    route = Object.create(Route.prototype);
  }
  if (typeof spec === 'undefined') {
    throw new Error('A route spec is required');
  }
  route.spec = spec;
  route.ast = Parser.parse(spec);
  return route;
}
function Route(spec) {
  var route;
  if (this) {
    
    route = this;
  } else {
    
    route = Object.create(Route.prototype);
  }
  if (typeof spec === 'undefined') {
    throw new Error('A route spec is required');
  }
  route.spec = spec;
  route.ast = Parser.parse(spec);
  return route;
}
function Route ( spec ) { var route ; if ( this ) { // constructor called with new route = this ; } else { // constructor called as a function route = Object . create ( Route . prototype ) ; } if ( typeof spec === 'undefined' ) { throw new Error ( 'A route spec is required' ) ; } route . spec = spec ; route . ast = Parser . parse ( spec ) ; return route ; }
Represents a route
@example
var route = Route('/:foo/:bar');
@example
var route = Route('/:foo/:bar');
@param {string} spec -  the string specification of the route.
use :param for single portion captures, *param for splat style captures,
and () for optional route branches
@constructor
Represents a route