Module: MultiMime

Extended by:
MultiMime
Included in:
MultiMime
Defined in:
lib/multi_mime.rb,
lib/multi_mime/adapter.rb,
lib/multi_mime/version.rb,
lib/multi_mime/null_type.rb,
lib/multi_mime/adapters/mime_type.rb,
lib/multi_mime/adapters/mimemagic.rb,
lib/multi_mime/adapters/rack_mime.rb,
lib/multi_mime/adapters/mime_types.rb

Defined Under Namespace

Modules: Adapters Classes: Adapter, NullType

Constant Summary collapse

ADAPTERS =
i(mime_types rack_mime mimemagic mime_type)
REQUIREMENT_MAP =
[
  [:mime_types, 'mime/types', :MIME].freeze,
  [:mimemagic, 'mimemagic', :MimeMagic].freeze,
  [:mime_type, 'action_dispatch/http/mime_type', :Mime].freeze,
  [:rack_mime, 'rack/mime', :Rack].freeze
]
VERSION =
'0.0.3'

Instance Method Summary collapse

Instance Method Details

#adapterObject

Get the current adapter class.



38
39
40
41
42
# File 'lib/multi_mime.rb', line 38

def adapter
  return @adapter if defined?(@adapter) && @adapter
  use default_adapter # load default adapter
  @adapter
end

#default_adapterObject

The default adapter based on what you currently have loaded and installed. First checks to see if any adapters are already loaded, then checks to see which are installed if none are loaded.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/multi_mime.rb', line 17

def default_adapter
  return :mime_types if defined?(::MIME::Types)
  return :mimemagic if defined?(::MimeMagic)
  return :mime_type if defined?(::Mime::Type)
  return :rack_mime if defined?(::Rack::Mime)

  REQUIREMENT_MAP.each do |adapter, library, clazz|
    begin
      require library
      return adapter
    rescue ::LoadError
      next
    end
  end

  Kernel.warn '[WARNING] MultiMime hasn\'t been able to detect an adapter'

  nil
end

#reset_adapterObject

Remove the currently loaded adapter



57
58
59
# File 'lib/multi_mime.rb', line 57

def reset_adapter
  remove_instance_variable :@adapter if defined?(@adapter)
end

#type_for(mime_type, opts = {}) ⇒ String Also known as: by_type

Get mime type by mime type

Parameters:

  • mime_type (String)

    The mime_type to determine against

  • opts (Hash) (defaults to: {})
    • adapter [String] If set, the selected adapter will be used for this call.

Returns:

  • (String)

    Mime type



67
68
69
70
71
# File 'lib/multi_mime.rb', line 67

def type_for(mime_type, opts = {})
  fail ArgumentError, "Mime Type must be a String. #{mime_type.inspect} given." unless mime_type.is_a? String
  adapter = current_adapter(opts)
  adapter.type_for(mime_type, opts)
end

#type_for_extension(extension, opts = {}) ⇒ String Also known as: by_extension

Get mime type by extension

Parameters:

  • extension (String)

    The extension to determine against

  • opts (Hash) (defaults to: {})
    • adapter [String] If set, the selected adapter will be used for this call.

Returns:

  • (String)

    Mime type



80
81
82
83
84
# File 'lib/multi_mime.rb', line 80

def type_for_extension(extension, opts = {})
  fail ArgumentError, "Extension must be a String. #{extension.inspect} given." unless extension.is_a? String
  adapter = current_adapter(opts)
  adapter.type_for_extension(extension, opts)
end

#type_for_file(file, opts = {}) ⇒ String Also known as: by_file

Get mime type by file

Parameters:

  • file (File)

    The file to determine against

  • opts (Hash) (defaults to: {})
    • adapter [String] If set, the selected adapter will be used for this call.

Returns:

  • (String)

    Mime type



106
107
108
109
110
# File 'lib/multi_mime.rb', line 106

def type_for_file(file, opts = {})
  fail ArgumentError, "File must be a File. #{file.inspect} given." unless file.is_a? File
  adapter = current_adapter(opts)
  adapter.type_for_file(file, opts)
end

#type_for_path(path, opts = {}) ⇒ String Also known as: by_path

Get mime type by path

Parameters:

  • path (String)

    The path to determine against

  • opts (Hash) (defaults to: {})
    • adapter [String] If set, the selected adapter will be used for this call.

Returns:

  • (String)

    Mime type



93
94
95
96
97
# File 'lib/multi_mime.rb', line 93

def type_for_path(path, opts = {})
  fail ArgumentError, "Path must be a String. #{path.inspect} given." unless path.is_a? String
  adapter = current_adapter(opts)
  adapter.type_for_path(path, opts)
end

#use(new_adapter) ⇒ Object Also known as: adapter=

Set the Mime parser utilizing a symbol, string, or class.

Parameters:

  • new_adapter (Symbol, String, Class)
    • mime_types
    • mimemagic
    • mime_type
    • rack_mime


51
52
53
# File 'lib/multi_mime.rb', line 51

def use(new_adapter)
  @adapter = load_adapter(new_adapter)
end