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 => @people.to_xml }
      end
    end
  end
Methods
Public Class methods
lookup(string)
    # File actionpack/lib/action_controller/mime_type.rb, line 65
65:       def lookup(string)
66:         LOOKUP[string]
67:       end
lookup_by_extension(extension)
    # File actionpack/lib/action_controller/mime_type.rb, line 69
69:       def lookup_by_extension(extension)
70:         EXTENSION_LOOKUP[extension]
71:       end
new(string, symbol = nil, synonyms = [])
     # File actionpack/lib/action_controller/mime_type.rb, line 147
147:     def initialize(string, symbol = nil, synonyms = [])
148:       @symbol, @synonyms = symbol, synonyms
149:       @string = string
150:     end
parse(accept_header)
     # File actionpack/lib/action_controller/mime_type.rb, line 88
 88:       def parse(accept_header)
 89:         if accept_header !~ /,/
 90:           [Mime::Type.lookup(accept_header)]
 91:         else
 92:           # keep track of creation order to keep the subsequent sort stable
 93:           list = []
 94:           accept_header.split(/,/).each_with_index do |header, index| 
 95:             params, q = header.split(/;\s*q=/)       
 96:             if params
 97:               params.strip!          
 98:               list << AcceptItem.new(index, params, q) unless params.empty?
 99:             end
100:           end
101:           list.sort!
102: 
103:           # Take care of the broken text/xml entry by renaming or deleting it
104:           text_xml = list.index("text/xml")
105:           app_xml = list.index(Mime::XML.to_s)
106: 
107:           if text_xml && app_xml
108:             # set the q value to the max of the two
109:             list[app_xml].q = [list[text_xml].q, list[app_xml].q].max
110: 
111:             # make sure app_xml is ahead of text_xml in the list
112:             if app_xml > text_xml
113:               list[app_xml], list[text_xml] = list[text_xml], list[app_xml]
114:               app_xml, text_xml = text_xml, app_xml
115:             end
116: 
117:             # delete text_xml from the list
118:             list.delete_at(text_xml)
119: 
120:           elsif text_xml
121:             list[text_xml].name = Mime::XML.to_s
122:           end
123: 
124:           # Look for more specific XML-based types and sort them ahead of app/xml
125: 
126:           if app_xml
127:             idx = app_xml
128:             app_xml_type = list[app_xml]
129: 
130:             while(idx < list.length)
131:               type = list[idx]
132:               break if type.q < app_xml_type.q
133:               if type.name =~ /\+xml$/
134:                 list[app_xml], list[idx] = list[idx], list[app_xml]
135:                 app_xml = idx
136:               end
137:               idx += 1
138:             end
139:           end
140: 
141:           list.map! { |i| Mime::Type.lookup(i.name) }.uniq!
142:           list
143:         end
144:       end
register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false)
    # File actionpack/lib/action_controller/mime_type.rb, line 79
79:       def register(string, symbol, mime_type_synonyms = [], extension_synonyms = [], skip_lookup = false)
80:         Mime.instance_eval { const_set symbol.to_s.upcase, Type.new(string, symbol, mime_type_synonyms) }
81: 
82:         SET << Mime.const_get(symbol.to_s.upcase)
83: 
84:         ([string] + mime_type_synonyms).each { |string| LOOKUP[string] = SET.last } unless skip_lookup
85:         ([symbol.to_s] + extension_synonyms).each { |ext| EXTENSION_LOOKUP[ext] = SET.last }
86:       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.

    # File actionpack/lib/action_controller/mime_type.rb, line 75
75:       def register_alias(string, symbol, extension_synonyms = [])
76:         register(string, symbol, [], extension_synonyms, true)
77:       end
unverifiable_types()
    # File actionpack/lib/action_controller/mime_type.rb, line 33
33:     def self.unverifiable_types
34:       ActiveSupport::Deprecation.warn("unverifiable_types is deprecated and has no effect", caller)
35:       @@unverifiable_types
36:     end
Public Instance methods
==(mime_type)
     # File actionpack/lib/action_controller/mime_type.rb, line 172
172:     def ==(mime_type)
173:       return false if mime_type.blank?
174:       (@synonyms + [ self ]).any? do |synonym| 
175:         synonym.to_s == mime_type.to_s || synonym.to_sym == mime_type.to_sym 
176:       end
177:     end
===(list)
     # File actionpack/lib/action_controller/mime_type.rb, line 164
164:     def ===(list)
165:       if list.is_a?(Array)
166:         (@synonyms + [ self ]).any? { |synonym| list.include?(synonym) }
167:       else
168:         super
169:       end
170:     end
=~(mime_type)
     # File actionpack/lib/action_controller/mime_type.rb, line 179
179:     def =~(mime_type)
180:       return false if mime_type.blank?
181:       regexp = Regexp.new(Regexp.quote(mime_type.to_s))
182:       (@synonyms + [ self ]).any? do |synonym|
183:         synonym.to_s =~ regexp
184:       end
185:     end
browser_generated?()
     # File actionpack/lib/action_controller/mime_type.rb, line 197
197:     def browser_generated?
198:       @@browser_generated_types.include?(to_sym)
199:     end
html?()
     # File actionpack/lib/action_controller/mime_type.rb, line 193
193:     def html?
194:       @@html_types.include?(to_sym) || @string =~ /html/
195:     end
to_s()
     # File actionpack/lib/action_controller/mime_type.rb, line 152
152:     def to_s
153:       @string
154:     end
to_str()
     # File actionpack/lib/action_controller/mime_type.rb, line 156
156:     def to_str
157:       to_s
158:     end
to_sym()
     # File actionpack/lib/action_controller/mime_type.rb, line 160
160:     def to_sym
161:       @symbol || @string.to_sym
162:     end
verify_request?()

Returns true if Action Pack should check requests using this Mime Type for possible request forgery. See ActionController::RequestForgeryProtection.

     # File actionpack/lib/action_controller/mime_type.rb, line 189
189:     def verify_request?
190:       browser_generated?
191:     end