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)
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 = [])
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)
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