code: function Route() {
      var methods = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
      var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
      var host = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
      var requirements = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
      var attributes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
      var middlewares = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
  
      _classCallCheck(this, Route);
  
      this.setName(null);
      this.setMethods(methods);
      this.setPath(path);
      this.setHost(host);
      this.setPort(null);
      this.setRequirements(requirements);
      this.setAttributes(attributes);
      this.setMiddlewares(middlewares);
      this.setMatches({});
    }
docs: Constructor
  @example
  let route = new Route(
  ['GET', 'POST'],
  '/accounts/{id}',
  '{language}.domain.com',
  6969,
  {id: /\d+/, language: /[a-zA-Z]{2}/},
  {controller: new SomeController(), action: "someAction"}
  )
  
  @param {Array|string} [methods=null] Accepted methods for route
  @param {string} [path=''] Path of route, regexp string is allowed
  @param {?string} [host=null] Expected host, default is null to ignore host
  @param {Object} [requirements={}] Requirements of matching, it is optional of have pre-defined required properties of matching
  @param {Object} [attributes={}] Additional attributes of route, it would be merged with matches result
  @param {Array} [middlewares=[]] Route's middlewares