module MultiMime

Constants

REQUIREMENT_MAP
SEMAPHORE
VERSION

Public Instance Methods

adapter() click to toggle source

Get the current adapter class.

# File lib/multi_mime.rb, line 38
def adapter
  use(default_adapter) unless defined?(@adapter) # load default adapter
  @adapter
end
adapter=(new_adapter)
Alias for: use
by_extension(extension, opts = {})
Alias for: type_for_extension
by_file(file, opts = {})
Alias for: type_for_file
by_path(path, opts = {})
Alias for: type_for_path
by_type(mime_type, opts = {})
Alias for: type_for
default_adapter() click to toggle source

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.

# 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_adapter() click to toggle source

Remove the currently loaded adapter

# File lib/multi_mime.rb, line 58
def reset_adapter
  remove_instance_variable :@adapter if defined?(@adapter)
end
type_for(mime_type, opts = {}) click to toggle source

Get mime type by mime type

@param [String] mime_type The mime_type to determine against @param [Hash] opts

* adapter [String] If set, the selected adapter will be used for this call.

@return [String] Mime type

# 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
Also aliased as: by_type
type_for_extension(extension, opts = {}) click to toggle source

Get mime type by extension

@param [String] extension The extension to determine against @param [Hash] opts

* adapter [String] If set, the selected adapter will be used for this call.

@return [String] Mime type

# 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
Also aliased as: by_extension
type_for_file(file, opts = {}) click to toggle source

Get mime type by file

@param [File] file The file to determine against @param [Hash] opts

* adapter [String] If set, the selected adapter will be used for this call.

@return [String] Mime type

# 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
Also aliased as: by_file
type_for_path(path, opts = {}) click to toggle source

Get mime type by path

@param [String] path The path to determine against @param [Hash] opts

* adapter [String] If set, the selected adapter will be used for this call.

@return [String] Mime type

# 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
Also aliased as: by_path
use(new_adapter) click to toggle source

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

@param [Symbol, String, Class] new_adapter

* mime_types
* mimemagic
* mime_type
* rack_mime
# File lib/multi_mime.rb, line 50
def use(new_adapter)
  SEMAPHORE.synchronize do
    @adapter = load_adapter(new_adapter)
  end
end
Also aliased as: adapter=

Private Instance Methods

current_adapter(opts = {}) click to toggle source
# File lib/multi_mime.rb, line 116
def current_adapter(opts = {})
  if new_adapter = opts.delete(:adapter)
    load_adapter(new_adapter)
  else
    adapter
  end
end
load_adapter(new_adapter) click to toggle source
# File lib/multi_mime.rb, line 124
def load_adapter(new_adapter)
  case new_adapter
  when String, Symbol
    adapter_clazz = nil
    REQUIREMENT_MAP.each do |adapter, library, clazz|
      if new_adapter.to_sym == adapter
        require library
        require "multi_mime/adapters/#{new_adapter}"
        adapter_clazz = MultiMime::Adapters.const_get(:"#{new_adapter.to_s.split('_').map { |s| s.capitalize }.join('')}")
      else
        next
      end
    end
    if adapter_clazz.nil?
      raise ::LoadError, new_adapter
    else
      return adapter_clazz
    end
  when NilClass, FalseClass
    load_adapter default_adapter
  when Class, Module
    new_adapter
  else
    raise ::LoadError, new_adapter
  end
rescue ::LoadError => exception
  raise AdapterError.build(exception)
end