class Mime::Type

end
end
end
format.xml { render xml: @post }
format.ics { render body: @post.to_ics, mime_type: Mime::Type.lookup(“text/calendar”) }
format.html
respond_to do |format|
@post = Post.find(params)
def show
class PostsController < ActionController::Base
Encapsulates the notion of a MIME type. Can be used at render time, for example, with:

def ==(mime_type)

def ==(mime_type)
  return false unless mime_type
  (@synonyms + [ self ]).any? do |synonym|
    synonym.to_s == mime_type.to_s || synonym.to_sym == mime_type.to_sym
  end
end

def ===(list)

def ===(list)
  if list.is_a?(Array)
    (@synonyms + [ self ]).any? { |synonym| list.include?(synonym) }
  else
    super
  end
end

def =~(mime_type)

def =~(mime_type)
  return false unless mime_type
  regexp = Regexp.new(Regexp.quote(mime_type.to_s))
  @synonyms.any? { |synonym| synonym.to_s =~ regexp } || @string =~ regexp
end

def all?; false; end

def all?; false; end

def eql?(other)

def eql?(other)
  super || (self.class == other.class &&
            @string    == other.string &&
            @synonyms  == other.synonyms &&
            @symbol    == other.symbol)
end

def html?

def html?
  (symbol == :html) || @string.include?("html")
end

def initialize(string, symbol = nil, synonyms = [])

def initialize(string, symbol = nil, synonyms = [])
  unless MIME_REGEXP.match?(string)
    raise InvalidMimeType, "#{string.inspect} is not a valid MIME type"
  end
  @symbol, @synonyms = symbol, synonyms
  @string = string
  @hash = [@string, @synonyms, @symbol].hash
end

def lookup(string)

def lookup(string)
  # fallback to the media-type without parameters if it was not found
  LOOKUP[string] || LOOKUP[string.split(";", 2)[0]&.rstrip] || Type.new(string)
end

def lookup_by_extension(extension)

def lookup_by_extension(extension)
  EXTENSION_LOOKUP[extension.to_s]
end

def match?(mime_type)

def match?(mime_type)
  return false unless mime_type
  regexp = Regexp.new(Regexp.quote(mime_type.to_s))
  @synonyms.any? { |synonym| synonym.to_s.match?(regexp) } || @string.match?(regexp)
end

def method_missing(method, *args)

def method_missing(method, *args)
  if method.end_with?("?")
    method[0..-2].downcase.to_sym == to_sym
  else
    super
  end
end

def parse(accept_header)

def parse(accept_header)
  if !accept_header.include?(",")
    if (index = accept_header.index(PARAMETER_SEPARATOR_REGEXP))
      accept_header = accept_header[0, index]
    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

def parse_data_with_trailing_star(type)

Mime[:xml], Mime[:yaml], Mime[:atom], Mime[:json], Mime[:rss], Mime[:url_encoded_form]].
For an input of 'application', returns [Mime[:html], Mime[:js],

Mime[:html], Mime[:css], Mime[:csv], Mime[:js], Mime[:yaml], Mime[:text]]
.
For an input of 'text', returns [Mime[:json], Mime[:xml], Mime[:ics],
def parse_data_with_trailing_star(type)
  Mime::SET.select { |m| m.match?(type) }
end

def parse_trailing_star(accept_header)

def parse_trailing_star(accept_header)
  parse_data_with_trailing_star($1) if accept_header =~ TRAILING_STAR_REGEXP
end

def ref

def ref
  symbol || to_s
end

def register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false)

def register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false)
  new_mime = Type.new(string, symbol, mime_type_synonyms)
  SET << new_mime
  ([string] + mime_type_synonyms).each { |str| LOOKUP[str] = new_mime } unless skip_lookup
  ([symbol] + extension_synonyms).each { |ext| EXTENSION_LOOKUP[ext.to_s] = new_mime }
  @register_callbacks.each do |callback|
    callback.call(new_mime)
  end
  new_mime
end

def register_alias(string, symbol, extension_synonyms = [])

rendering different HTML versions depending on the user agent, like an iPhone.
Registers an alias that's not used on MIME type lookup, but can be referenced directly. Especially useful for
def register_alias(string, symbol, extension_synonyms = [])
  register(string, symbol, [], extension_synonyms, true)
end

def register_callback(&block)

def register_callback(&block)
  @register_callbacks << block
end

def respond_to_missing?(method, include_private = false)

def respond_to_missing?(method, include_private = false)
  method.end_with?("?") || super
end

def to_a; end

def to_a; end

def to_ary; end

def to_ary; end

def to_s

def to_s
  @string
end

def to_str

def to_str
  to_s
end

def to_sym

def to_sym
  @symbol
end

def unregister(symbol)

Mime::Type.unregister(:mobile)

To unregister a MIME type:

This method is opposite of register method.
def unregister(symbol)
  symbol = symbol.downcase
  if mime = Mime[symbol]
    SET.delete_if { |v| v.eql?(mime) }
    LOOKUP.delete_if { |_, v| v.eql?(mime) }
    EXTENSION_LOOKUP.delete_if { |_, v| v.eql?(mime) }
  end
end