diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-01-23 17:14:30 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-01-23 17:21:29 -0800 |
commit | 3913b510b7136a90113fecf2699ea218e849aaa7 (patch) | |
tree | 0719158763dd102dcc6a6468624c15cc985ae29e /actionpack/lib/action_dispatch | |
parent | b84046192ba25667d3f1b48b46d47747b829b144 (diff) | |
download | rails-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')
-rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 21 |
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 |