class Mime::Type
end
end
end
format.xml { render xml: @post }
format.ics { render text: @post.to_ics, mime_type: Mime::Type }
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 if mime_type.blank? (@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 if mime_type.blank? regexp = Regexp.new(Regexp.quote(mime_type.to_s)) (@synonyms + [ self ]).any? do |synonym| synonym.to_s =~ regexp end end
def html?
def html? @@html_types.include?(to_sym) || @string =~ /html/ end
def initialize(string, symbol = nil, synonyms = [])
def initialize(string, symbol = nil, synonyms = []) @symbol, @synonyms = symbol, synonyms @string = string end
def lookup(string)
def lookup(string) LOOKUP[string] end
def lookup_by_extension(extension)
def lookup_by_extension(extension) EXTENSION_LOOKUP[extension.to_s] end
def method_missing(method, *args)
def method_missing(method, *args) if method.to_s.ends_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?(',') accept_header = accept_header.split(PARAMETER_SEPARATOR_REGEXP).first parse_trailing_star(accept_header) || [Mime::Type.lookup(accept_header)].compact else list, index = AcceptList.new, 0 accept_header.split(',').each do |header| params, q = header.split(PARAMETER_SEPARATOR_REGEXP) if params.present? params.strip! params = parse_trailing_star(params) || [params] params.each do |m| list << AcceptItem.new(index, m.to_s, q) index += 1 end end end list.assort! end end
def parse_data_with_trailing_star(input)
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(input) Mime::SET.select { |m| m =~ input } 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 to_sym || 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) Mime.const_set(symbol.upcase, Type.new(string, symbol, mime_type_synonyms)) new_mime = Mime.const_get(symbol.upcase) SET << new_mime ([string] + mime_type_synonyms).each { |str| LOOKUP[str] = SET.last } unless skip_lookup ([symbol] + extension_synonyms).each { |ext| EXTENSION_LOOKUP[ext.to_s] = SET.last } @register_callbacks.each do |callback| callback.call(new_mime) end 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) #:nodoc:
def respond_to_missing?(method, include_private = false) #:nodoc: method.to_s.ends_with? '?' 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)
Usage:
This method is opposite of register method.
def unregister(symbol) symbol = symbol.upcase mime = Mime.const_get(symbol) Mime.instance_eval { remove_const(symbol) } SET.delete_if { |v| v.eql?(mime) } LOOKUP.delete_if { |_,v| v.eql?(mime) } EXTENSION_LOOKUP.delete_if { |_,v| v.eql?(mime) } end