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/adapter_error.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, AdapterError, NullType

Constant Summary collapse

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 =
'1.0.1'

Instance Method Summary collapse

Instance Method Details

#adapterObject

Get the current adapter class.



36
37
38
39
# File 'lib/multi_mime.rb', line 36

def adapter
  use(default_adapter) unless defined?(@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
# 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
  fail 'MultiMime hasn\'t been able to detect a default_adapter'
  nil
end

#reset_adapterObject

Remove the currently loaded adapter



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

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



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

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



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

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



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

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



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

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


48
49
50
51
52
# File 'lib/multi_mime.rb', line 48

def use(new_adapter)
  Thread.exclusive do
    @adapter = load_adapter(new_adapter)
  end
end