diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2012-08-14 22:09:43 -0500 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2012-08-14 22:09:43 -0500 |
commit | 0d0d46222cb87032e76bad42ef812b7ee7367873 (patch) | |
tree | c8a698ff486b33c894ef5ead6966cf799781835a /actionpack/lib | |
parent | 6f7b651c3e43f43db6faebb39a4c9f99e50c3400 (diff) | |
download | rails-0d0d46222cb87032e76bad42ef812b7ee7367873.tar.gz rails-0d0d46222cb87032e76bad42ef812b7ee7367873.tar.bz2 rails-0d0d46222cb87032e76bad42ef812b7ee7367873.zip |
Add Request#formats=(extensions) that lets you set multiple formats directly in a prioritized order
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_dispatch/http/mime_negotiation.rb | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/actionpack/lib/action_dispatch/http/mime_negotiation.rb b/actionpack/lib/action_dispatch/http/mime_negotiation.rb index e31f3b823d..0f98e84788 100644 --- a/actionpack/lib/action_dispatch/http/mime_negotiation.rb +++ b/actionpack/lib/action_dispatch/http/mime_negotiation.rb @@ -80,6 +80,27 @@ module ActionDispatch @env["action_dispatch.request.formats"] = [Mime::Type.lookup_by_extension(parameters[:format])] end + # Sets the \formats by string extensions. This differs from #format= by allowing you + # to set multiple, ordered formats, which is useful when you want to have a fallback. + # + # In this example, the :iphone format will be used if it's available, otherwise it'll fallback + # to the :html format. + # + # class ApplicationController < ActionController::Base + # before_filter :adjust_format_for_iphone_with_html_fallback + # + # private + # def adjust_format_for_iphone_with_html_fallback + # request.formats = [ :iphone, :html ] if request.env["HTTP_USER_AGENT"][/iPhone/] + # end + # end + def formats=(extensions) + parameters[:format] = extensions.first.to_s + @env["action_dispatch.request.formats"] = extensions.collect do |extension| + Mime::Type.lookup_by_extension(extension) + end + end + # Receives an array of mimes and return the first user sent mime that # matches the order array. # |