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
- #
- A
- E
- H
- L
- M
- N
- P
- R
- T
- U
Constants
| MIME_NAME | = | "[a-zA-Z0-9][a-zA-Z0-9#{Regexp.escape('!#$&-^_.+')}]{0,126}" |
| MIME_PARAMETER | = | "\s*;\s*#{MIME_NAME}(?:=#{MIME_PARAMETER_VALUE})?" |
| MIME_PARAMETER_VALUE | = | "#{Regexp.escape('"')}?#{MIME_NAME}#{Regexp.escape('"')}?" |
| MIME_REGEXP | = | /\A(?:\*\/\*|#{MIME_NAME}\/(?:\*|#{MIME_NAME})(?>#{MIME_PARAMETER})*\s*)\z/ |
| PARAMETER_SEPARATOR_REGEXP | = | /;\s*\w+="?\w+"?/ |
| TRAILING_STAR_REGEXP | = | /^(text|application)\/\*/ |
Attributes
| [R] | hash | |
| [R] | string | |
| [R] | symbol | |
| [R] | synonyms |
Class Public methods
lookup(string) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 161 def lookup(string) LOOKUP[string] || Type.new(string) end
lookup_by_extension(extension) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 165 def lookup_by_extension(extension) EXTENSION_LOOKUP[extension.to_s] end
new(string, symbol = nil, synonyms = []) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 253 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
parse(accept_header) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 189 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.split(",").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]].
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 225 def parse_data_with_trailing_star(type) Mime::SET.select { |m| m.match?(type) } end
parse_trailing_star(accept_header) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 216 def parse_trailing_star(accept_header) parse_data_with_trailing_star($1) if accept_header =~ TRAILING_STAR_REGEXP end
register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 175 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
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.
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 171 def register_alias(string, symbol, extension_synonyms = []) register(string, symbol, [], extension_synonyms, true) end
register_callback(&block) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 157 def register_callback(&block) @register_callbacks << block end
unregister(symbol) Link
This method is opposite of register method.
To unregister a MIME type:
Mime::Type.unregister(:mobile)
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 234 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
Instance Public methods
==(mime_type) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 286 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
===(list) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 278 def ===(list) if list.is_a?(Array) (@synonyms + [ self ]).any? { |synonym| list.include?(synonym) } else super end end
=~(mime_type) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 300 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
all?() Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 316 def all?; false; end
eql?(other) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 293 def eql?(other) super || (self.class == other.class && @string == other.string && @synonyms == other.synonyms && @symbol == other.symbol) end
html?() Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 312 def html? (symbol == :html) || @string.include?("html") end
match?(mime_type) Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 306 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
ref() Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 274 def ref symbol || to_s end
to_s() Link
Source: show
# File actionpack/lib/action_dispatch/http/mime_type.rb, line 262 def to_s @string end