James, I'm not very familiar with Abdera, but I have browsed the source a bit after hitting the same limitation that Jim reported, while working on Shindig. I *think* that a simple change in RouteManager could alleviate some (and for me, I think, all) of the limitation.
When resolving a route, Rails walks through its routes in the order that they are defined. RouteManager walks through the targets.entrySet, which is unordered. If RouteManager kept a targets List<> instead of a targets Map<>, it could walk through the routes in order. (There would need to be a new class defined, to hold both the Route and TargetType, but it would be very simple.) To work around the limitation Jim describes, a client would define a /base/:collection/:entry route before the /base/:collection route. WDYT? Ed James M Snell wrote: > > Ruby matching can span segments if a default value for the missing > variables is provided. We, however, don't have default values for our > variables. It would make sense for us to tighten up the matching rules. > > - James > > Jim Ancona wrote: >> I have run into some problems with my Routes matching unexpectedly. >> Before filing a bug, I thought I'd ask for feedback on whether the >> current behavior is correct. >> >> The current algorithm attempts to match the non-variable parts of the >> pattern, setting the variable to whatever is in between. >> >> So the pattern "/base/:collection/" matches both "/base/test/" and >> "/base/test/123/". In the second case, the value of the collection >> variable is "test/123". In my opinion, not allowing matches to span URI >> segments would be less prone to unintuitive results. >> >> FWIW, a quick glance at some docs on Ruby Routes seems to indicate that >> they do not span URI path segments. >> >> Thoughts? >> >> Jim >> > > -- View this message in context: http://www.nabble.com/Route-matching-too-liberal--tp15348853p17993519.html Sent from the abdera-dev mailing list archive at Nabble.com.
