class MIME::Types

MIME::Types is a registry of MIME types. It is both a class (created with MIME::Types.new) and a default registry (loaded automatically or through interactions with MIME::Types.[] and MIME::Types.type_for).

The Default mime-types Registry

The default mime-types registry is loaded automatically when the library is required (require 'mime/types'), but it may be lazily loaded (loaded on first use) with the use of the environment variable RUBY_MIME_TYPES_LAZY_LOAD having any value other than false. The initial startup is about 14× faster (~10 ms vs ~140 ms), but the registry will be loaded at some point in the future.

The default mime-types registry can also be loaded from a Marshal cache file specific to the version of MIME::Types being loaded. This will be handled automatically with the use of a file referred to in the environment variable RUBY_MIME_TYPES_CACHE. MIME::Types will attempt to load the registry from this cache file (MIME::Type::Cache.load); if it cannot be loaded (because the file does not exist, there is an error, or the data is for a different version of mime-types), the default registry will be loaded from the normal JSON version and then the cache file will be written to the location indicated by RUBY_MIME_TYPES_CACHE. Cache file loads just over 4½× faster (~30 ms vs ~140 ms). loads.

Notes:

Usage

require 'mime/types'

plaintext = MIME::Types['text/plain']
print plaintext.media_type           # => 'text'
print plaintext.sub_type             # => 'plain'

puts plaintext.extensions.join(" ")  # => 'asc txt c cc h hh cpp'

puts plaintext.encoding              # => 8bit
puts plaintext.binary?               # => false
puts plaintext.ascii?                # => true
puts plaintext.obsolete?             # => false
puts plaintext.registered?           # => true
puts plaintext.provisional?          # => false
puts plaintext == 'text/plain'       # => true
puts MIME::Type.simplified('x-appl/x-zip') # => 'appl/zip'