aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/routing/route_set.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-01-23 17:14:30 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2012-01-23 17:21:29 -0800
commit3913b510b7136a90113fecf2699ea218e849aaa7 (patch)
tree0719158763dd102dcc6a6468624c15cc985ae29e /actionpack/lib/action_dispatch/routing/route_set.rb
parentb84046192ba25667d3f1b48b46d47747b829b144 (diff)
downloadrails-3913b510b7136a90113fecf2699ea218e849aaa7.tar.gz
rails-3913b510b7136a90113fecf2699ea218e849aaa7.tar.bz2
rails-3913b510b7136a90113fecf2699ea218e849aaa7.zip
Added custom regexps to ASTs that have literal nodes on either side of
symbol nodes. Fixes #4585
Diffstat (limited to 'actionpack/lib/action_dispatch/routing/route_set.rb')
-rw-r--r--actionpack/lib/action_dispatch/routing/route_set.rb21
1 files changed, 20 insertions, 1 deletions
diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb
index 4760887456..b67a2d01b9 100644
--- a/actionpack/lib/action_dispatch/routing/route_set.rb
+++ b/actionpack/lib/action_dispatch/routing/route_set.rb
@@ -367,7 +367,26 @@ module ActionDispatch
SEPARATORS,
anchor)
- Journey::Path::Pattern.new(strexp)
+ pattern = Journey::Path::Pattern.new(strexp)
+
+ builder = Journey::GTG::Builder.new pattern.spec
+
+ # Get all the symbol nodes followed by literals that are not the
+ # dummy node.
+ symbols = pattern.spec.grep(Journey::Nodes::Symbol).find_all { |n|
+ builder.followpos(n).first.literal?
+ }
+
+ # Get all the symbol nodes preceded by literals.
+ symbols.concat pattern.spec.find_all(&:literal?).map { |n|
+ builder.followpos(n).first
+ }.find_all(&:symbol?)
+
+ symbols.each { |x|
+ x.regexp = /(?:#{Regexp.union(x.regexp, '-')})+/
+ }
+
+ pattern
end
private :build_path