MIME types are used in MIME-compliant communications, as in e-mail or HTTP traffic, to indicate the type of content which is transmitted. MIME::Types provides the ability for detailed information about MIME entities (provided as a set of MIME::Type objects) to be determined and used programmatically. There are many types defined by RFCs and vendors, so the list is long but not complete; don’t hesitate to ask to add additional information. This library follows the IANA collection of MIME types (see below for reference).
MIME types are used in MIME entities, as in email or HTTP traffic. It is useful at times to have information available about MIME types (or, inversely, about files). A MIME::Type stores the known information about one MIME type.
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 == 'text/plain' # => true puts MIME::Type.simplified('x-appl/x-zip') # => 'appl/zip'
This module is built to conform to the MIME types of RFCs 2045 and 2231. It follows the official IANA registry at www.iana.org/assignments/media-types/ and ftp.iana.org/assignments/media-types with some unofficial types added from the the collection at www.ltsw.se/knbase/internet/mime.htp
This is originally based on Perl MIME::Types by Mark Overmeer.
Copyright |
Copyright 2002–2013 by Austin Ziegler |
Version | 1.20.1 |
Licence | See Licence.rdoc |
See Also | www.iana.org/assignments/media-types/ www.ltsw.se/knbase/internet/mime.htp |
The released version of Ruby MIME::Types
The regular expression used to match a file-based MIME type definition.
Returns a list of MIME::Type objects, which may be empty. The optional flag parameters are :complete (finds only complete MIME::Type objects) and :platform (finds only MIME::Types for the current platform). It is possible for multiple matches to be returned for either type (in the example below, ‘text/plain’ returns two values — one for the general case, and one for VMS systems.
puts "\nMIME::Types['text/plain']" MIME::Types['text/plain'].each { |t| puts t.to_a.join(", ") } puts "\nMIME::Types[/^image/, :complete => true]" MIME::Types[/^image/, :complete => true].each do |t| puts t.to_a.join(", ") end
# File lib/mime/types.rb, line 819 819: def [](type_id, flags = {}) 820: @__types__[type_id, flags] 821: end
Add one or more MIME::Type objects to the set of known types. Each type should be experimental (e.g., ‘application/x-ruby’). If the type is already known, a warning will be displayed.
Please inform the maintainer of this module when registered types are missing.
# File lib/mime/types.rb, line 848 848: def add(*types) 849: @__types__.add(*types) 850: end
# File lib/mime/types.rb, line 582 582: def initialize(data_version = nil) 583: @type_variants = Hash.new { |h, k| h[k] = [] } 584: @extension_index = Hash.new { |h, k| h[k] = [] } 585: @data_version = data_version 586: end
A synonym for MIME::Types.type_for
# File lib/mime/types.rb, line 838 838: def of(filename, platform = false) 839: @__types__.type_for(filename, platform) 840: end
Return the list of MIME::Types which belongs to the file based on its filename extension. If platform is true, then only file types that are specific to the current platform will be returned.
This will always return an array.
puts "MIME::Types.type_for('citydesk.xml') => [application/xml, text/xml] puts "MIME::Types.type_for('citydesk.gif') => [image/gif]
# File lib/mime/types.rb, line 833 833: def type_for(filename, platform = false) 834: @__types__.type_for(filename, platform) 835: end
Returns a list of MIME::Type objects, which may be empty. The optional flag parameters are :complete (finds only complete MIME::Type objects) and :platform (finds only MIME::Types for the current platform). It is possible for multiple matches to be returned for either type (in the example below, ‘text/plain’ returns two values — one for the general case, and one for VMS systems.
puts "\nMIME::Types['text/plain']" MIME::Types['text/plain'].each { |t| puts t.to_a.join(", ") } puts "\nMIME::Types[/^image/, :complete => true]" MIME::Types[/^image/, :complete => true].each do |t| puts t.to_a.join(", ") end
If multiple type definitions are returned, returns them sorted as follows:
1. Complete definitions sort before incomplete ones; 2. IANA-registered definitions sort before LTSW-recorded definitions. 3. Generic definitions sort before platform-specific ones; 4. Current definitions sort before obsolete ones; 5. Obsolete definitions with use-instead clauses sort before those without; 6. Obsolete definitions use-instead clauses are compared. 7. Sort on name.
# File lib/mime/types.rb, line 628 628: def [](type_id, flags = {}) 629: if type_id.kind_of?(Regexp) 630: matches = [] 631: @type_variants.each_key do |k| 632: matches << @type_variants[k] if k =~ type_id 633: end 634: matches.flatten! 635: elsif type_id.kind_of?(MIME::Type) 636: matches = [type_id] 637: else 638: matches = @type_variants[MIME::Type.simplified(type_id)] 639: end 640: 641: matches.delete_if { |e| not e.complete? } if flags[:complete] 642: matches.delete_if { |e| not e.platform? } if flags[:platform] 643: 644: matches.sort { |a, b| a.priority_compare(b) } 645: end
Add one or more MIME::Type objects to the set of known types. Each type should be experimental (e.g., ‘application/x-ruby’). If the type is already known, a warning will be displayed.
Please inform the maintainer of this module when registered types are missing.
# File lib/mime/types.rb, line 675 675: def add(*types) 676: types.each do |mime_type| 677: if mime_type.kind_of? MIME::Types 678: add(*mime_type.defined_types) 679: else 680: if @type_variants.include?(mime_type.simplified) 681: if @type_variants[mime_type.simplified].include?(mime_type) 682: warn "Type #{mime_type} already registered as a variant of #{mime_type.simplified}." unless defined? MIME::Types::STARTUP 683: end 684: end 685: add_type_variant(mime_type) 686: index_extensions(mime_type) 687: end 688: end 689: end
A synonym for MIME::Types.type_for
# File lib/mime/types.rb, line 665 665: def of(filename, platform = false) 666: type_for(filename, platform) 667: end
Return the list of MIME::Types which belongs to the file based on its filename extension. If platform is true, then only file types that are specific to the current platform will be returned.
This will always return an array.
puts "MIME::Types.type_for('citydesk.xml') => [application/xml, text/xml] puts "MIME::Types.type_for('citydesk.gif') => [image/gif]
# File lib/mime/types.rb, line 657 657: def type_for(filename, platform = false) 658: ext = filename.chomp.downcase.gsub(/.*\./, '') 659: list = @extension_index[ext] 660: list.delete_if { |e| not e.platform? } if platform 661: list 662: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.