aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch
diff options
context:
space:
mode:
authorNeeraj Singh <neerajdotname@gmail.com>2010-11-22 11:34:37 -0500
committerJosé Valim <jose.valim@gmail.com>2010-11-22 23:06:13 +0100
commit6f6e754bac4c78f657feb0ea119447546aa87197 (patch)
tree83acc0518f03df6d481082e558bbc18f06fa7090 /actionpack/lib/action_dispatch
parentb798a59bd582d8590d4fb8df44885d41cd5299f3 (diff)
downloadrails-6f6e754bac4c78f657feb0ea119447546aa87197.tar.gz
rails-6f6e754bac4c78f657feb0ea119447546aa87197.tar.bz2
rails-6f6e754bac4c78f657feb0ea119447546aa87197.zip
implement code that handles text/*, appplication/*,
and image/* Signed-off-by: José Valim <jose.valim@gmail.com>
Diffstat (limited to 'actionpack/lib/action_dispatch')
-rw-r--r--actionpack/lib/action_dispatch/http/mime_type.rb17
1 files changed, 16 insertions, 1 deletions
diff --git a/actionpack/lib/action_dispatch/http/mime_type.rb b/actionpack/lib/action_dispatch/http/mime_type.rb
index 8f1c9b6691..3b5c1d50f2 100644
--- a/actionpack/lib/action_dispatch/http/mime_type.rb
+++ b/actionpack/lib/action_dispatch/http/mime_type.rb
@@ -103,9 +103,14 @@ module Mime
([symbol.to_s] + extension_synonyms).each { |ext| EXTENSION_LOOKUP[ext] = SET.last }
end
+
def parse(accept_header)
if accept_header !~ /,/
- [Mime::Type.lookup(accept_header)]
+ if result = Regexp.new('(\w+)\/\*').match(accept_header)
+ parse_data_with_trailing_star(result[1])
+ else
+ [Mime::Type.lookup(accept_header)]
+ end
else
# keep track of creation order to keep the subsequent sort stable
list = []
@@ -160,6 +165,16 @@ module Mime
list
end
end
+
+ # input: 'text'
+ # returend value: [Mime::JSON, Mime::XML, Mime::ICS, Mime::HTML, Mime::CSS, Mime::CSV, Mime::JS, Mime::YAML, Mime::TEXT]
+ #
+ # input: 'application'
+ # returend value: [Mime::HTML, Mime::JS, Mime::XML, Mime::YAML, Mime::ATOM, Mime::JSON, Mime::RSS, Mime::URL_ENCODED_FORM
+ def parse_data_with_trailing_star(input)
+ keys = Mime::LOOKUP.keys.select{|k| Regexp.new(input).match(k)}
+ Mime::LOOKUP.select {|k,_| keys.include?(k)}.collect{|i| i[1]}.inject([]){|all,e| all.include?(e) ? all : all << e}
+ end
end
def initialize(string, symbol = nil, synonyms = [])