def _accept_types
accept = request.accept
MIME_MUTEX.synchronize do
return ACCEPT_RESULTS[accept] if ACCEPT_RESULTS[accept]
end
types = request.accept.split(Merb::Const::ACCEPT_SPLIT).map do |entry|
entry =~ Merb::Const::MEDIA_RANGE
media_range, quality = $1, $3
kind, sub_type = media_range.split(Merb::Const::SLASH_SPLIT)
mime_sym = Merb.available_accepts[media_range]
mime = Merb.available_mime_types[mime_sym]
(quality ||= 0.0) if media_range == "*/*"
quality = quality ? (quality.to_f * 100).to_i : 100
quality *= (mime && mime[:default_quality] || 1)
[quality, mime_sym, media_range, kind, sub_type, mime]
end
accepts = types.sort_by {|x| x.first }.reverse!.map! {|x| x[1]}
MIME_MUTEX.synchronize do
ACCEPT_RESULTS[accept] = accepts.freeze
end
accepts
end