Encapsulates the notion of a MIME type. Can be used at render time, for example, with:
class PostsController < ActionController::Base def show @post = Post.find(params[:id]) respond_to do |format| format.html format.ics { render body: @post.to_ics, mime_type: Mime::Type.lookup("text/calendar") } format.xml { render xml: @post } end end end
Namespace
Methods
- #
- A
- E
- H
- L
- M
- N
- P
- R
- T
- U
Constants
| ACCEPT_HEADER_REGEXP | = | /[^,\s"](?:[^,"]|"[^"]*")*/ |
| MIME_NAME | = | "[a-zA-Z0-9][a-zA-Z0-9#{Regexp.escape('!#$&-^_.+')}]{0,126}".freeze |
| MIME_PARAMETER | = | "\s*;\s*#{MIME_NAME}(?:=#{MIME_PARAMETER_VALUE})?".freeze |
| MIME_PARAMETER_VALUE | = | "(?:#{MIME_NAME}|\"[^\"\r\\\\]*\")".freeze |
| MIME_REGEXP | = | /\A(?:\*\/\*|#{MIME_NAME}\/(?:\*|#{MIME_NAME})(?>#{MIME_PARAMETER})*\s*)\z/ |
| PARAMETER_SEPARATOR_REGEXP | = | /;\s*q="?/ |
all media-type parameters need to be before the q-parameter www.rfc-editor.org/rfc/rfc7231#section-5.3.2 |
||
| TRAILING_STAR_REGEXP | = | /^(text|application)\/\*/ |
Attributes
| [R] | hash | |
| [R] | string | |
| [R] | symbol | |
| [R] | synonyms |
Class Public methods
lookup(string) Link
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 235 def lookup(string) lookup = Mime.lookup_by_string return lookup[string] if lookup.key?(string) return WILDCARD if string == "*/*" # fallback to the media-type without parameters if it was not found string = string.split(";", 2)[0]&.rstrip lookup[string] || Type.new(string) end
lookup_by_extension(extension) Link
new(string, symbol = nil, synonyms = nil) Link
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 341 def initialize(string, symbol = nil, synonyms = nil) unless MIME_REGEXP.match?(string) raise InvalidMimeType, "#{string.inspect} is not a valid MIME type" end @symbol = symbol @synonyms = if synonyms&.any? synonyms.map { |synonym| synonym.dup.freeze }.freeze else [].freeze end @string = string.dup.freeze @hash = [@string, @synonyms, @symbol].hash freeze end
parse(accept_header) Link
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 271 def parse(accept_header) if !accept_header.include?(",") if (index = accept_header.index(PARAMETER_SEPARATOR_REGEXP)) accept_header = accept_header[0, index].strip end return [] if accept_header.blank? parse_trailing_star(accept_header) || Array(Mime::Type.lookup(accept_header)) else list, index = [], 0 accept_header.scan(ACCEPT_HEADER_REGEXP).each do |header| params, q = header.split(PARAMETER_SEPARATOR_REGEXP) next unless params params.strip! next if params.empty? params = parse_trailing_star(params) || [params] params.each do |m| list << AcceptItem.new(index, m.to_s, q) index += 1 end end AcceptList.sort! list end end
parse_data_with_trailing_star(type) Link
For an input of 'text', returns [Mime[:json], Mime[:xml], Mime[:ics], Mime[:html], Mime[:css], Mime[:csv], Mime[:js], Mime[:yaml], Mime[:text]].
For an input of 'application', returns [Mime[:html], Mime[:js], Mime[:xml], Mime[:yaml], Mime[:atom], Mime[:json], Mime[:rss], Mime[:url_encoded_form]].
parse_trailing_star(accept_header) Link
register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false) Link
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 256 def register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false) new_mime = Type.new(string, symbol, mime_type_synonyms) Mime.update do |registry, string_lookup, extension_lookup| registry << new_mime ([string] + mime_type_synonyms).each { |str| string_lookup[-str] = new_mime } unless skip_lookup ([symbol] + extension_synonyms).each { |ext| extension_lookup[-ext.to_s] = new_mime } end @on_change_callbacks.each do |callback| callback.call(new_mime, true) end new_mime end
register_alias(string, symbol, extension_synonyms = []) Link
Registers an alias that’s not used on MIME type lookup, but can be referenced directly. Especially useful for rendering different HTML versions depending on the user agent, like an iPhone.
register_callback(&block) Link
unregister(symbol) Link
This method is opposite of register method.
To unregister a MIME type:
Mime::Type.unregister(:mobile)
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 316 def unregister(symbol) symbol = symbol.downcase if mime = Mime[symbol] Mime.update do |registry, string_lookup, extension_lookup| registry.delete_if { |v| v.eql?(mime) } string_lookup.delete_if { |_, v| v.eql?(mime) } extension_lookup.delete_if { |_, v| v.eql?(mime) } end @on_change_callbacks.each do |callback| callback.call(mime, false) end end end
Instance Public methods
==(mime_type) Link
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 386 def ==(mime_type) return false unless mime_type if mime_type.is_a?(Symbol) # `format == :json` is the common call. Compare the symbol directly, and # use `Symbol#name` so that the string comparison doesn't allocate. return true if @symbol == mime_type mime_string = mime_type.name else mime_string = mime_type.to_s end return true if @string == mime_string || @synonyms.include?(mime_string) mime_symbol = mime_type.to_sym @symbol == mime_symbol || @synonyms.any? { |synonym| synonym.to_sym == mime_symbol } end