aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/routing/segments.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2008-11-26 02:05:53 -0800
committerJeremy Kemper <jeremy@bitsweat.net>2008-11-26 02:05:53 -0800
commit133c349b0af1c46d26f83c19e6b583062db931e4 (patch)
tree7b4a02ea90b09a2ad90ae013d5880e56e397611c /actionpack/lib/action_controller/routing/segments.rb
parenta88094fd7a19a4b2d5c5b5044b10146e6c5c7245 (diff)
parentfef6c32afe2276dffa0347e25808a86e7a101af1 (diff)
downloadrails-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.rb31
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