diff options
Diffstat (limited to 'actionpack/lib/action_controller')
-rw-r--r-- | actionpack/lib/action_controller/mime_responds.rb | 7 | ||||
-rw-r--r-- | actionpack/lib/action_controller/mime_type.rb | 17 |
2 files changed, 23 insertions, 1 deletions
diff --git a/actionpack/lib/action_controller/mime_responds.rb b/actionpack/lib/action_controller/mime_responds.rb index ff4837896c..e1e6790381 100644 --- a/actionpack/lib/action_controller/mime_responds.rb +++ b/actionpack/lib/action_controller/mime_responds.rb @@ -110,7 +110,12 @@ module ActionController #:nodoc: def initialize(block_binding) @block_binding = block_binding - @mime_type_priority = eval("request.accepts", block_binding) + @mime_type_priority = eval( + "(params[:format] && Mime::EXTENSION_LOOKUP[params[:format]]) ? " + + "[ Mime::EXTENSION_LOOKUP[params[:format]] ] : request.accepts", + block_binding + ) + @order = [] @responses = {} end diff --git a/actionpack/lib/action_controller/mime_type.rb b/actionpack/lib/action_controller/mime_type.rb index 30cea88a44..ff65e18e44 100644 --- a/actionpack/lib/action_controller/mime_type.rb +++ b/actionpack/lib/action_controller/mime_type.rb @@ -119,6 +119,7 @@ module Mime ATOM = Type.new "application/atom+xml", :atom YAML = Type.new "application/x-yaml", :yaml, %w( text/yaml ) + LOOKUP = Hash.new { |h, k| h[k] = Type.new(k) } LOOKUP["*/*"] = ALL @@ -139,4 +140,20 @@ module Mime LOOKUP["application/rss+xml"] = RSS LOOKUP["application/atom+xml"] = ATOM + + + EXTENSION_LOOKUP = Hash.new { |h, k| h[k] = Type.new(k) } + + EXTENSION_LOOKUP["html"] = HTML + EXTENSION_LOOKUP["xhtml"] = HTML + + EXTENSION_LOOKUP["xml"] = XML + + EXTENSION_LOOKUP["js"] = JS + + EXTENSION_LOOKUP["yml"] = YAML + EXTENSION_LOOKUP["yaml"] = YAML + + EXTENSION_LOOKUP["rss"] = RSS + EXTENSION_LOOKUP["atom"] = ATOM end
\ No newline at end of file |