Class: Mime::Type
Relationships & Source Files | |
Inherits: | Object |
Defined in: | actionpack/lib/action_dispatch/http/mime_type.rb |
Overview
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 text: @post.to_ics, mime_type: Mime::Type["text/calendar"] }
format.xml { render xml: @post }
end
end
end
Constant Summary
-
PARAMETER_SEPARATOR_REGEXP =
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 142/;\s*\w="?\w"?/
-
TRAILING_STAR_REGEXP =
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 141/(text|application)\/\*/
Class Attribute Summary
- .html_types (also: #html_types) readonly
Class Method Summary
- .lookup(string)
- .lookup_by_extension(extension)
- .new(string, symbol = nil, synonyms = []) ⇒ Type constructor
- .parse(accept_header)
-
.parse_data_with_trailing_star(input)
For an input of
'text'
, returns[Mime::JSON, {Mime::XML}, {Mime::ICS}, {Mime::HTML}, {Mime::CSS}, {Mime::CSV}, {Mime::JS}, {Mime::YAML}, Mime::TEXT]
. - .parse_trailing_star(accept_header)
- .register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false)
-
.register_alias(string, symbol, extension_synonyms = [])
Registers an alias that's not used on mime type lookup, but can be referenced directly.
- .register_callback(&block)
-
.unregister(symbol)
This method is opposite of register method.
Instance Attribute Summary
- #hash readonly
- #html? ⇒ Boolean readonly
- #html_types readonly
- #symbol readonly
Instance Method Summary
Constructor Details
.new(string, symbol = nil, synonyms = []) ⇒ Type
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) (private)
[ GitHub ]Class Attribute Details
.html_types (readonly) Also known as: #html_types
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 55
cattr_reader :html_types
Class Method Details
.lookup(string)
[ GitHub ].lookup_by_extension(extension)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 152
def lookup_by_extension(extension) EXTENSION_LOOKUP[extension.to_s] end
.parse(accept_header)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 176
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
.parse_data_with_trailing_star(input)
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)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 199
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)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 162
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
.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 rendering different HTML versions depending on the user agent, like an iPhone.
.register_callback(&block)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 144
def register_callback(&block) @register_callbacks << block end
.unregister(symbol)
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 217
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
Instance Attribute Details
#hash (readonly)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 228
attr_reader :hash
#html? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 282
def html? @@html_types.include?(to_sym) || @string =~ /html/ end
#html_types (readonly)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 55
cattr_reader :html_types
#symbol (readonly)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 57
attr_reader :symbol
Instance Method Details
#==(mime_type)
[ GitHub ]#===(list)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 252
def ===(list) if list.is_a?(Array) (@synonyms + [ self ]).any? { |synonym| list.include?(synonym) } else super end end
#=~(mime_type)
[ GitHub ]
#eql?(other) ⇒ Boolean
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 267
def eql?(other) super || (self.class == other.class && @string == other.string && @synonyms == other.synonyms && @symbol == other.symbol) end
#ref
[ GitHub ]#to_s
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 236
def to_s @string end
#to_str
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 240
def to_str to_s end
#to_sym
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 244
def to_sym @symbol end