aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/http
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2012-08-14 22:09:43 -0500
committerDavid Heinemeier Hansson <david@loudthinking.com>2012-08-14 22:09:43 -0500
commit0d0d46222cb87032e76bad42ef812b7ee7367873 (patch)
treec8a698ff486b33c894ef5ead6966cf799781835a /actionpack/lib/action_dispatch/http
parent6f7b651c3e43f43db6faebb39a4c9f99e50c3400 (diff)
downloadrails-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/action_dispatch/http')
-rw-r--r--actionpack/lib/action_dispatch/http/mime_negotiation.rb21
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.
#