Module: Sprockets::Mime

Includes:
HTTPUtils, Utils
Included in:
Configuration, Loader
Defined in:
lib/sprockets/mime.rb

Constant Summary

Constants included from Utils

Utils::UNBOUND_METHODS_BIND_TO_ANY_OBJECT

Instance Method Summary collapse

Methods included from HTTPUtils

#find_best_mime_type_match, #find_best_q_match, #find_mime_type_matches, #find_q_matches, #match_mime_type?, #match_mime_type_keys, #parse_q_values

Methods included from Utils

#concat_javascript_sources, #dfs, #dfs_paths, #duplicable?, #hash_reassoc, #hash_reassoc1, #module_include, #normalize_extension, #string_end_with_semicolon?

Instance Method Details

#mime_extsObject

Internal: Mapping of MIME extension Strings to MIME type Strings.

Used for internal fast lookup purposes.

Examples:

mime_exts['.js'] #=> 'application/javascript'

key - MIME extension String value - MIME Type String

Returns Hash.



33
34
35
# File 'lib/sprockets/mime.rb', line 33

def mime_exts
  config[:mime_exts]
end

#mime_type_charset_detecter(mime_type) ⇒ Object

Internal: Get detecter function for MIME type.

mime_type - String MIME type

Returns Proc detector or nil if none is available.



81
82
83
84
85
86
87
# File 'lib/sprockets/mime.rb', line 81

def mime_type_charset_detecter(mime_type)
  if type = config[:mime_types][mime_type]
    if detect = type[:charset]
      return detect
    end
  end
end

#mime_typesObject

Public: Mapping of MIME type Strings to properties Hash.

key - MIME Type String value - Hash

extensions - Array of extnames
charset    - Default Encoding or function to detect encoding

Returns Hash.



17
18
19
# File 'lib/sprockets/mime.rb', line 17

def mime_types
  config[:mime_types]
end

#read_file(filename, content_type = nil) ⇒ Object

Public: Read file on disk with MIME type specific encoding.

filename - String path content_type - String MIME type

Returns String file contents transcoded to UTF-8 or in its external encoding.



96
97
98
99
100
101
102
103
104
# File 'lib/sprockets/mime.rb', line 96

def read_file(filename, content_type = nil)
  data = File.binread(filename)

  if detect = mime_type_charset_detecter(content_type)
    detect.call(data).encode(Encoding::UTF_8, :universal_newline => true)
  else
    data
  end
end

#register_mime_type(mime_type, options = {}) ⇒ Object

Public: Register a new mime type.

mime_type - String MIME Type options - Hash

extensions: Array of String extnames
charset: Proc/Method that detects the charset of a file.
         See EncodingUtils.

Returns nothing.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/sprockets/mime.rb', line 46

def register_mime_type(mime_type, options = {})
  # Legacy extension argument, will be removed from 4.x
  if options.is_a?(String)
    options = { extensions: [options] }
  end

  extnames = Array(options[:extensions]).map { |extname|
    Sprockets::Utils.normalize_extension(extname)
  }

  charset = options[:charset]
  charset ||= :default if mime_type.start_with?('text/')
  charset = EncodingUtils::CHARSET_DETECT[charset] if charset.is_a?(Symbol)

  self.computed_config = {}

  self.config = hash_reassoc(config, :mime_exts) do |mime_exts|
    extnames.each do |extname|
      mime_exts[extname] = mime_type
    end
    mime_exts
  end

  self.config = hash_reassoc(config, :mime_types) do |mime_types|
    type = { extensions: extnames }
    type[:charset] = charset if charset
    mime_types.merge(mime_type => type)
  end
end