aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_controller')
-rw-r--r--actionpack/lib/action_controller/mime_responds.rb7
-rw-r--r--actionpack/lib/action_controller/mime_type.rb17
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