# MultiMime A generic swappable back-end for MIME type detection Lots of ruby libraries utilize MIME type detection in some form. In order to best support multiple MIME type detection libraries, `multi_mime` is a general-purpose, swappable, MIME type detection backend library. eg [MultiJson](https://github.com/intridea/multi_json) for MIME types. ## Installation ```ruby gem 'multi_mime', '~> 1.1' ``` ```ruby require 'multi_mime' ``` ## Features / Usage Examples Part of utilizing various MIME type libraries is the need for a common interface. `MultiMime` provides just that with following methods. ```ruby MultiMime.type_for('text/html') # 'text/html' # alias :by_type MultiMime.type_for_extension('.html') # 'text/html' # alias :by_extension MultiMime.type_for_path('/usr/local/foo/bar/foo.html') # 'text/html' # alias :by_path MultiMime.type_for_file(File.open('foo.html', 'w')) # 'text/html' # alias :by_file ``` `MultiMime` tries to have intelligent defaulting. That is, if you have any of the supported engines already loaded, it will utilize them before attempting to load any. When loading, libraries are ordered in the same order as [Supported Mime Engines](https://github.com/karlfreeman/multi_mime#supported-mime-engines). Lets try using `MultiMime` with `Rack::Mime` loaded, then switch it to `MIME::Types`. ```ruby require 'rack/mime' # true MultiMime.default_adapter # ':rack_mime' MultiMime.adapter # MultiMime::Adapters::RackMime MultiMime.reset_adapter # MultiMime::Adapters::RackMime MultiMime.adapter = :mime_types # `:mime_types` require 'mime/types' # false (eg loaded) MultiMime.adapter # MultiMime::Adapters::MimeTypes MultiMime.type_for_extension('.json') # 'application/json' ``` When MultiMime fails to load the specified adapter, it'll throw `MultiMime::AdapterError` which inherits from `ArgumentError`. ## Badges [![Gem Version](http://img.shields.io/gem/v/multi_mime.svg)][gem] [![Build Status](http://img.shields.io/travis/karlfreeman/multi_mime.svg)][travis] [![Code Quality](http://img.shields.io/codeclimate/github/karlfreeman/multi_mime.svg)][codeclimate] [![Code Coverage](http://img.shields.io/codeclimate/coverage/github/karlfreeman/multi_mime.svg)][codeclimate] [![Gittip](http://img.shields.io/gittip/karlfreeman.svg)][gittip] ## Supported MIME Engines * [MIME::Types](https://github.com/halostatue/mime-types) * [MagicMime](https://github.com/minad/mimemagic) * [Rails](http://api.rubyonrails.org/classes/Mime/Type.html) (ActionDispatch::Http::Mime) * [Rack](http://rack.rubyforge.org/doc/Rack/Mime.html) (Rack::Mime) ## Supported Ruby Versions This library aims to support and is [tested against][travis] the following Ruby implementations: - Ruby 2.3.0 - Ruby 2.2.0 - Ruby 2.1.0 - Ruby 2.0.0 - Ruby 1.9.3 - [JRuby][jruby] - [Rubinius][rubinius] # Credits Inspiration: - [MultiJSON](https://github.com/intridea/multi_json) - [MultiXML](https://github.com/sferik/multi_xml) Cribbed: - [MultiJSON](https://github.com/intridea/multi_json) - [Asset_Sync's MultiMime module](https://github.com/rumblelabs/asset_sync/commit/9333bd01ae1a7cf2ffa046b8390fbc4165c38030) [gem]: https://rubygems.org/gems/multi_mime [travis]: http://travis-ci.org/karlfreeman/multi_mime [codeclimate]: https://codeclimate.com/github/karlfreeman/multi_mime [gittip]: https://www.gittip.com/karlfreeman [jruby]: http://www.jruby.org [rubinius]: http://rubini.us