module Rack::Mime

Constants

MIME_TYPES

List of most common mime-types, selected various sources according to their usefulness in a webserving scope for Ruby users.

To amend this list with your local mime.types list you can use:

require 'webrick/httputils'
list = WEBrick::HTTPUtils.load_mime_types('/etc/mime.types')
Rack::Mime::MIME_TYPES.merge!(list)

N.B. On Ubuntu the mime.types file does not include the leading period, so users may need to modify the data before merging into the hash.

Public Class Methods

match?(value, matcher) click to toggle source

Returns true if the given value is a mime match for the given mime match specification, false otherwise.

Rack::Mime.match?('text/html', 'text/*') => true
Rack::Mime.match?('text/plain', '*') => true
Rack::Mime.match?('text/html', 'application/json') => false
# File lib/rack/mime.rb, line 29
def match?(value, matcher)
  v1, v2 = value.split('/', 2)
  m1, m2 = matcher.split('/', 2)

  (m1 == '*' || v1 == m1) && (m2.nil? || m2 == '*' || m2 == v2)
end
mime_type(ext, fallback = 'application/octet-stream') click to toggle source

Returns String with mime type if found, otherwise use fallback. ext should be filename extension in the '.ext' format that

File.extname(file) returns.

fallback may be any object

Also see the documentation for MIME_TYPES

Usage:

Rack::Mime.mime_type('.foo')

This is a shortcut for:

Rack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream')
# File lib/rack/mime.rb, line 17
def mime_type(ext, fallback = 'application/octet-stream')
  MIME_TYPES.fetch(ext.to_s.downcase, fallback)
end

Private Instance Methods

match?(value, matcher) click to toggle source

Returns true if the given value is a mime match for the given mime match specification, false otherwise.

Rack::Mime.match?('text/html', 'text/*') => true
Rack::Mime.match?('text/plain', '*') => true
Rack::Mime.match?('text/html', 'application/json') => false
# File lib/rack/mime.rb, line 29
def match?(value, matcher)
  v1, v2 = value.split('/', 2)
  m1, m2 = matcher.split('/', 2)

  (m1 == '*' || v1 == m1) && (m2.nil? || m2 == '*' || m2 == v2)
end
mime_type(ext, fallback = 'application/octet-stream') click to toggle source

Returns String with mime type if found, otherwise use fallback. ext should be filename extension in the '.ext' format that

File.extname(file) returns.

fallback may be any object

Also see the documentation for MIME_TYPES

Usage:

Rack::Mime.mime_type('.foo')

This is a shortcut for:

Rack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream')
# File lib/rack/mime.rb, line 17
def mime_type(ext, fallback = 'application/octet-stream')
  MIME_TYPES.fetch(ext.to_s.downcase, fallback)
end