diff options
Diffstat (limited to 'actionpack/lib/action_controller/mime_type.rb')
-rw-r--r-- | actionpack/lib/action_controller/mime_type.rb | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/actionpack/lib/action_controller/mime_type.rb b/actionpack/lib/action_controller/mime_type.rb index 15dbc70915..ad2f5aaac5 100644 --- a/actionpack/lib/action_controller/mime_type.rb +++ b/actionpack/lib/action_controller/mime_type.rb @@ -1,44 +1,48 @@ module Mime class Type < String - def initialize(string, part_of_all = true) - @part_of_all = part_of_all + def self.lookup(string) + LOOKUP[string] + end + + def initialize(string, symbol = nil, synonyms = []) + @symbol, @synonyms = symbol, synonyms super(string) end def to_sym - SYMBOLIZED_MIME_TYPES[self] ? SYMBOLIZED_MIME_TYPES[self] : to_sym + @symbol || to_sym end def ===(list) if list.is_a?(Array) - list.include?(self) + (@synonyms + [ self ]).any? { |synonym| list.include?(synonym) } else super end end end - SYMBOLIZED_MIME_TYPES = { - "" => :unspecified, - "*/*" => :all, - "text/html" => :html, - "application/javascript" => :js, - "application/x-javascript" => :js, - "text/javascript" => :js, - "text/xml" => :xml, - "application/xml" => :xml, - "application/rss+xml" => :rss, - "application/rss+atom" => :atom, - "application/x-xml" => :xml, - "application/x-yaml" => :yaml - } + ALL = Type.new "*/*", :all + HTML = Type.new "text/html", :html + JS = Type.new "text/javascript", :js, %w( application/javascript application/x-javascript ) + XML = Type.new "text/xml", :xml, %w( application/xml application/x-xml ) + RSS = Type.new "application/rss+xml", :rss + ATOM = Type.new "application/atom+xml", :atom + YAML = Type.new "application/x-yaml", :yaml + + LOOKUP = Hash.new { |h, k| h[k] = Type.new(k) } + + LOOKUP["*/*"] = ALL + LOOKUP["text/html"] = HTML + LOOKUP["application/rss+xml"] = RSS + LOOKUP["application/atom+xml"] = ATOM + LOOKUP["application/x-yaml"] = YAML + + LOOKUP["text/javascript"] = JS + LOOKUP["application/javascript"] = JS + LOOKUP["application/x-javascript"] = JS - ALL = Type.new "*/*" - HTML = Type.new "text/html" - JS = Type.new "text/javascript" - JAVASCRIPT = Type.new "text/javascript" - XML = Type.new "application/xml" - RSS = Type.new "application/rss+xml" - ATOM = Type.new "application/atom+xml" - YAML = Type.new "application/x-yaml" + LOOKUP["text/xml"] = XML + LOOKUP["application/xml"] = XML + LOOKUP["application/x-xml"] = XML end
\ No newline at end of file |