diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2008-11-26 02:05:53 -0800 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-11-26 02:05:53 -0800 |
commit | 133c349b0af1c46d26f83c19e6b583062db931e4 (patch) | |
tree | 7b4a02ea90b09a2ad90ae013d5880e56e397611c /actionpack/lib/action_controller/routing/segments.rb | |
parent | a88094fd7a19a4b2d5c5b5044b10146e6c5c7245 (diff) | |
parent | fef6c32afe2276dffa0347e25808a86e7a101af1 (diff) | |
download | rails-133c349b0af1c46d26f83c19e6b583062db931e4.tar.gz rails-133c349b0af1c46d26f83c19e6b583062db931e4.tar.bz2 rails-133c349b0af1c46d26f83c19e6b583062db931e4.zip |
Merge branch 'master' of git@github.com:rails/rails
Diffstat (limited to 'actionpack/lib/action_controller/routing/segments.rb')
-rw-r--r-- | actionpack/lib/action_controller/routing/segments.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/routing/segments.rb b/actionpack/lib/action_controller/routing/segments.rb index f6b03edcca..5dda3d4d00 100644 --- a/actionpack/lib/action_controller/routing/segments.rb +++ b/actionpack/lib/action_controller/routing/segments.rb @@ -308,5 +308,36 @@ module ActionController end end end + + # The OptionalFormatSegment allows for any resource route to have an optional + # :format, which decreases the amount of routes created by 50%. + class OptionalFormatSegment < DynamicSegment + + def initialize(key = nil, options = {}) + super(:format, {:optional => true}.merge(options)) + end + + def interpolation_chunk + "." + super + end + + def regexp_chunk + '(\.[^/?\.]+)?' + end + + def to_s + '(.:format)?' + end + + #the value should not include the period (.) + def match_extraction(next_capture) + %[ + if (m = match[#{next_capture}]) + params[:#{key}] = URI.unescape(m.from(1)) + end + ] + end + end + end end |