class Mime::Type - actionpack-4.2.4 Documentation

# class Mime::Type

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

### Constants

PARAMETER_SEPARATOR_REGEXP
TRAILING_STAR_REGEXP

### Attributes

symbol[R]

### Public Class Methods

lookup(string) click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 148
    def lookup(string)
      LOOKUP[string]
    end

lookup_by_extension(extension) click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 152
    def lookup_by_extension(extension)
      EXTENSION_LOOKUP[extension.to_s]
    end

new(string, symbol = nil, synonyms = []) click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 228
    def initialize(string, symbol = nil, synonyms = [])
      @symbol, @synonyms = symbol, synonyms
      @string = string
    end

parse(accept_header) click to toggle source

    # File 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) click to toggle source

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]`.

    # File lib/action_dispatch/http/mime_type.rb, line 208
    def parse_data_with_trailing_star(input)
      Mime::SET.select { |m| m =~ input }
    end

parse_trailing_star(accept_header) click to toggle source

    # File 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) click to toggle source

    # File 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 = []) click to toggle source

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 lib/action_dispatch/http/mime_type.rb, line 158
    def register_alias(string, symbol, extension_synonyms = [])
      register(string, symbol, [], extension_synonyms, true)
    end

register_callback(&block) click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 144
    def register_callback(&block)
      @register_callbacks << block
    end

unregister(symbol) click to toggle source

This method is opposite of register method.

Usage:

    Mime::Type.unregister(:mobile)

    # File 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

### Public Instance Methods

==(mime_type) click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 257
    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

===(list) click to toggle source
Calls superclass method

    # File lib/action_dispatch/http/mime_type.rb, line 249
    def ===(list)
      if list.is_a?(Array)
        (@synonyms + [ self ]).any? { |synonym| list.include?(synonym) }
      else
        super
      end
    end

=~(mime_type) click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 264
    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

html?() click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 272
    def html?
      @@html_types.include?(to_sym) || @string =~ /html/
    end

ref() click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 245
    def ref
      to_sym || to_s
    end

to_s() click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 233
    def to_s
      @string
    end

to_str() click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 237
    def to_str
      to_s
    end

to_sym() click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 241
    def to_sym
      @symbol
    end

### Private Instance Methods

method_missing(method, *args) click to toggle source
Calls superclass method

    # File lib/action_dispatch/http/mime_type.rb, line 282
    def method_missing(method, *args)
      if method.to_s.ends_with? '?'
        method[0..-2].downcase.to_sym == to_sym
      else
        super
      end
    end

to_a() click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 280
    def to_a; end

to_ary() click to toggle source

    # File lib/action_dispatch/http/mime_type.rb, line 279
    def to_ary; end