Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

57 lines (45 sloc) 1.111 kb
module Paperclip
class ContentTypeDetector
EMPTY_TYPE = "inode/x-empty"
SENSIBLE_DEFAULT = "application/octet-stream"
def initialize(filename)
@filename = filename
end
def detect
if blank?
SENSIBLE_DEFAULT
elsif empty?
EMPTY_TYPE
elsif !match?
type_from_file_command
elsif !multiple?
possible_types.first
else
best_type_match
end.to_s
end
private
def empty?
File.exists?(@filename) && File.size(@filename) == 0
end
def blank?
@filename.nil? || @filename.empty?
end
def possible_types
@possible_types ||= MIME::Types.type_for(@filename)
end
def match?
possible_types.length > 0
end
def multiple?
possible_types.length > 1
end
def best_type_match
official_types = possible_types.reject {|type| type.content_type.match(/\/x-/) }
(official_types.first || possible_types.first).content_type
end
def type_from_file_command
FileCommandContentTypeDetector.new(@filename).detect
end
end
end
Jump to Line
Something went wrong with that request. Please try again.