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
]
SEMAPHORE =
Mutex.new
VERSION =
'1.1.0'

Instance Method Summary collapse

Instance Method Details

#adapterObject

Get the current adapter class.



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

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.



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

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



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

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



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

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



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

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



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

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



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

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


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

def use(new_adapter)
  SEMAPHORE.synchronize do
    @adapter = load_adapter(new_adapter)
  end
end