class Shrine::Plugins::TypePredicates::MimeDatabase

Constants

SUPPORTED_TOOLS

Public Class Methods

new(tool) click to toggle source
# File lib/shrine/plugins/type_predicates.rb, line 63
def initialize(tool)
  raise Error, "unknown type database #{tool.inspect}, supported databases are: #{SUPPORTED_TOOLS.join(",")}" unless SUPPORTED_TOOLS.include?(tool)

  @tool = tool
end

Public Instance Methods

call(extension) click to toggle source
# File lib/shrine/plugins/type_predicates.rb, line 69
def call(extension)
  send(:"lookup_with_#{@tool}", extension)
end

Private Instance Methods

lookup_with_marcel(extension) click to toggle source
# File lib/shrine/plugins/type_predicates.rb, line 96
def lookup_with_marcel(extension)
  require "marcel"

  type = Marcel::MimeType.for(extension: ".#{extension}")
  type unless type == "application/octet-stream"
end
lookup_with_mime_types(extension) click to toggle source
# File lib/shrine/plugins/type_predicates.rb, line 82
def lookup_with_mime_types(extension)
  require "mime/types"

  mime_type = MIME::Types.of(".#{extension}").first
  mime_type&.content_type
end
lookup_with_mimemagic(extension) click to toggle source
# File lib/shrine/plugins/type_predicates.rb, line 89
def lookup_with_mimemagic(extension)
  require "mimemagic"

  magic = MimeMagic.by_extension(".#{extension}")
  magic&.type
end
lookup_with_mini_mime(extension) click to toggle source
# File lib/shrine/plugins/type_predicates.rb, line 75
def lookup_with_mini_mime(extension)
  require "mini_mime"

  info = MiniMime.lookup_by_extension(extension)
  info&.content_type
end
lookup_with_rack_mime(extension) click to toggle source
# File lib/shrine/plugins/type_predicates.rb, line 103
def lookup_with_rack_mime(extension)
  require "rack/mime"

  Rack::Mime.mime_type(".#{extension}", nil)
end