218: def initialize(arg, &block)
219: case arg
220: when MIME::Type
221: __create(arg.content_type) do
222: init_extensions(arg.extensions)
223: init_encoding(arg.encoding)
224: init_system(arg.system)
225: end
226: when Array
227: __create(arg[0]) do
228: init_extensions(arg[1])
229: init_encoding(arg[2])
230: init_system(arg[3])
231: end
232: when Hash
233: cty = arg.key?('type') ? arg['type'] :
234: arg.key?('content-type') ? arg['content-type'] :
235: arg.key?('Content-Type') ? arg['Content-Type'] :
236: arg.key?('content_type') ? arg['content_type'] :
237: nil
238: ext = arg.key?('extensions') ? arg['extensions'] :
239: arg.key?('Extensions') ? arg['Extensions'] : nil
240: [arg['extensions']].flatten
241: enc = arg.key?('encoding') ? arg['encoding'] :
242: arg.key?('content-transfer-encoding') ?
243: arg['content-transfer-encoding'] :
244: arg.key?('Content-Transfer-Encoding') ?
245: arg['Content-Transfer-Encoding'] :
246: arg.key?('content_encoding') ?
247: arg['content_encoding'] : nil
248: osy = arg.key?('system') ? arg['system'] :
249: arg.key?('System') ? arg['System'] : nil
250:
251: __create(cty) do
252: init_extensions(ext)
253: init_encoding(enc)
254: init_system(osy)
255: end
256: when String
257: __create(arg, &block)
258: else
259: raise TypeError,
260: "Received #{arg.class} when expecting " \
261: "MIME::Type, Array, Hash, or String only."
262: end
263: end