Class: Mime::Type
Relationships & Source Files | |
Namespace Children | |
Exceptions:
| |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
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 body: @post.to_ics, mime_type: Mime::Type.lookup("text/calendar") }
format.xml { render xml: @post }
end
end
end
Constant Summary
-
ACCEPT_HEADER_REGEXP =
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 161/[^,\s"](?:[^,"]|"[^"]*")*/
-
MIME_NAME =
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 257"[a-zA-Z0-9][a-zA-Z0-9#{Regexp.escape('!#$&-^_.+')}]{0,126}"
-
MIME_PARAMETER =
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 259"\s*;\s*#{MIME_NAME}(?:=#{MIME_PARAMETER_VALUE})?"
-
MIME_PARAMETER_VALUE =
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 258"(?:#{MIME_NAME}|\"[^\"\r\\\\]*\")"
-
MIME_REGEXP =
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 260/\A(?:\*\/\*|#{MIME_NAME}\/(?:\*|#{MIME_NAME})(?>#{MIME_PARAMETER})*\s*)\z/
-
PARAMETER_SEPARATOR_REGEXP =
all media-type parameters need to be before the q-parameter www.rfc-editor.org/rfc/rfc7231#section-5.3.2
/;\s*q="?/
-
TRAILING_STAR_REGEXP =
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 157/^(text|application)\/\*/
Class Method Summary
- .lookup(string)
- .lookup_by_extension(extension)
- .new(string, symbol = nil, synonyms = []) ⇒ Type constructor
- .parse(accept_header)
- .parse_data_with_trailing_star(type)
- .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
- #all? ⇒ Boolean readonly
- #hash readonly
- #html? ⇒ Boolean readonly
- #symbol readonly
Instance Method Summary
Constructor Details
.new(string, symbol = nil, synonyms = []) ⇒ Type
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 264
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
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method) (private)
[ GitHub ]Class Method Details
.lookup(string)
[ GitHub ].lookup_by_extension(extension)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 175
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 200
def parse(accept_header) if !accept_header.include?(",") if (index = accept_header.index(PARAMETER_SEPARATOR_REGEXP)) accept_header = accept_header[0, index].strip 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
.parse_data_with_trailing_star(type)
.parse_trailing_star(accept_header)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 227
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 186
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 = [])
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 163
def register_callback(&block) @register_callbacks << block end
.unregister(symbol)
This method is opposite of register method.
To unregister a MIME type:
Mime::Type.unregister(:mobile)
Instance Attribute Details
#all? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 327
def all?; false; end
#hash (readonly)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 255
attr_reader :hash
#html? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 323
def html? (symbol == :html) || @string.include?("html") end
#symbol (readonly)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 85
attr_reader :symbol
Instance Method Details
#==(mime_type)
[ GitHub ]#===(list)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 289
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 304
def eql?(other) super || (self.class == other.class && @string == other.string && @synonyms == other.synonyms && @symbol == other.symbol) end
#match?(mime_type) ⇒ Boolean
#ref
[ GitHub ]#to_s
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 273
def to_s @string end
#to_str
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 277
def to_str to_s end
#to_sym
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/mime_type.rb', line 281
def to_sym @symbol end