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?, #parse_q_values

Methods included from Utils

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

Instance Method Details

#encodingsObject

Public: Mapping of supported HTTP Content/Transfer encodings

key - String name value - Method/Proc to encode data

Returns Hash.



110
111
112
# File 'lib/sprockets/mime.rb', line 110

def encodings
  config[:encodings]
end

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



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

def mime_type_charset_detecter(mime_type)
  if type = 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.



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

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_encoding(name, encode) ⇒ Object

Public: Register a new encoding.

Examples

register_encoding :gzip, EncodingUtils::GZIP

key - String name encode - Method/Proc to encode data

Returns nothing.



124
125
126
127
128
# File 'lib/sprockets/mime.rb', line 124

def register_encoding(name, encode)
  self.config = hash_reassoc(config, :encodings) do |encodings|
    encodings.merge(name.to_s => encode)
  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
# 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.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