Speed up Request#formats

This commit is contained in:
Jeremy Kemper 2009-05-23 19:11:14 -07:00
parent a78b0a40c6
commit 6e039e863a

@ -3,7 +3,9 @@
require 'strscan'
require 'active_support/memoizable'
require 'active_support/core_ext/array/wrap'
require 'active_support/core_ext/hash/indifferent_access'
require 'active_support/core_ext/object/tap'
module ActionDispatch
class Request < Rack::Request
@ -173,15 +175,21 @@ def format(view_path = [])
def formats
if ActionController::Base.use_accept_header
ret = Array(Mime[parameters[:format]] || accepts)
if defined?(ActionController::Http)
if all = ret.index(Mime::ALL)
ret.delete(Mime::ALL) && ret.insert(all, *Mime::SET)
if param = parameters[:format]
Array.wrap(Mime[param])
else
accepts.dup
end.tap do |ret|
if defined?(ActionController::Http)
if ret == ONLY_ALL
ret.replace Mime::SET
elsif all = ret.index(Mime::ALL)
ret.delete_at(all) && ret.insert(all, *Mime::SET)
end
end
end
ret
else
[format] + Mime::SET
[format] + Mime::SET
end
end