Kill attachment stuff, just use viewable

This commit is contained in:
Joshua Peek
2011-06-02 12:42:56 -05:00
parent 60f958e733
commit a12bde58e0
4 changed files with 71 additions and 153 deletions

View File

@@ -62,7 +62,11 @@ module Linguist
# #
# Returns a content disposition String. # Returns a content disposition String.
def disposition def disposition
pathname.disposition if viewable?
'inline'
else
"attachment; filename=#{EscapeUtils.escape_url(pathname.basename)}"
end
end end
# Public: Is the blob text? # Public: Is the blob text?

View File

@@ -15,16 +15,6 @@ module MIME
@encoding == 'base64' @encoding == 'base64'
end end
end end
attr_accessor :attachment
def attachment?
if defined? @attachment
@attachment
else
binary?
end
end
end end
end end
@@ -35,8 +25,7 @@ mime_extensions.each do |mime_type, options|
(options['extensions'] || []).each { |ext| mime.extensions << ext } (options['extensions'] || []).each { |ext| mime.extensions << ext }
mime.binary = options['binary'] if options.key?('binary') mime.binary = options['binary'] if options.key?('binary')
mime.attachment = options['attachment'] if options.key?('attachment')
MIME::Types.add_type_variant(mime) MIME::Types.add_type_variant(mime)
MIME::Types.index_extensions(mime) MIME::Types.index_extensions(mime)
@@ -58,9 +47,8 @@ module Linguist
# #
# Return mime type String otherwise falls back to 'text/plain'. # Return mime type String otherwise falls back to 'text/plain'.
def self.mime_for(ext) def self.mime_for(ext)
ext ||= '' mime_type = lookup_mime_type_for(ext)
guesses = ::MIME::Types.type_for(ext) mime_type ? mime_type.simplified : 'text/plain'
guesses.first ? guesses.first.simplified : 'text/plain'
end end
Special = YAML.load_file(File.expand_path("../content_types.yml", __FILE__)) Special = YAML.load_file(File.expand_path("../content_types.yml", __FILE__))
@@ -103,25 +91,6 @@ module Linguist
mime_type.nil? || mime_type.binary? mime_type.nil? || mime_type.binary?
end end
# Internal: Determine if extension or mime type is an attachment.
#
# ext_or_mime_type - A file extension ".txt" or mime type "text/plain".
#
# Attachments are files that should be downloaded rather than be
# displayed in the browser.
#
# This is used to set our Content-Disposition headers.
#
# Attachment files should generally binary files but non-
# attachments do not imply plain text. For an example Images are
# not treated as attachments.
#
# Returns true or false
def self.attachment?(ext_or_mime_type)
mime_type = lookup_mime_type_for(ext_or_mime_type)
mime_type.nil? || mime_type.attachment?
end
# Internal: Lookup mime type for extension or mime type # Internal: Lookup mime type for extension or mime type
# #
# Returns a MIME::Type # Returns a MIME::Type

View File

@@ -110,37 +110,6 @@ module Linguist
@content_type ||= Mime.content_type_for(extname) @content_type ||= Mime.content_type_for(extname)
end end
# Public: Determine if the Pathname is a binary mime type.
#
# Returns true or false.
def binary?
@binary ||= language? ? false : Mime.binary?(extname)
end
# Public: Determine if the Pathname should be served as an
# attachment.
#
# Returns true or false.
def attachment?
@attachment ||= language? ? false : Mime.attachment?(extname)
end
# Public: Get the Content-Disposition header value
#
# This value is used when serving raw blobs.
#
# # => "attachment; filename=file.tar"
# # => "inline"
#
# Returns a content disposition String.
def disposition
if attachment?
"attachment; filename=#{EscapeUtils.escape_url(basename)}"
else
'inline'
end
end
def to_s def to_s
@path.dup @path.dup
end end

View File

@@ -54,12 +54,58 @@ class TestMime < Test::Unit::TestCase
assert Mime.binary?("application/octet-stream") assert Mime.binary?("application/octet-stream")
assert !Mime.binary?("text/plain") assert !Mime.binary?("text/plain")
assert Mime.binary?("application/java-archive")
assert Mime.binary?("application/ogg")
assert Mime.binary?("application/pdf")
assert Mime.binary?("application/x-gzip")
assert Mime.binary?("application/zip")
assert Mime.binary?("audio/mp4")
assert Mime.binary?("image/gif") assert Mime.binary?("image/gif")
assert Mime.binary?("image/jpeg") assert Mime.binary?("image/jpeg")
assert Mime.binary?("image/png") assert Mime.binary?("image/png")
assert Mime.binary?("java-archive") assert Mime.binary?("java-archive")
assert Mime.binary?("x-shockwave-flash") assert Mime.binary?("x-shockwave-flash")
assert Mime.binary?(".a")
assert Mime.binary?(".air")
assert Mime.binary?(".blend")
assert Mime.binary?(".crx")
assert Mime.binary?(".deb")
assert Mime.binary?(".dmg")
assert Mime.binary?(".exe")
assert Mime.binary?(".gem")
assert Mime.binary?(".graffle")
assert Mime.binary?(".gz")
assert Mime.binary?(".icns")
assert Mime.binary?(".ipa")
assert Mime.binary?(".lib")
assert Mime.binary?(".mcz")
assert Mime.binary?(".mov")
assert Mime.binary?(".mp3")
assert Mime.binary?(".nib")
assert Mime.binary?(".o")
assert Mime.binary?(".odp")
assert Mime.binary?(".ods")
assert Mime.binary?(".odt")
assert Mime.binary?(".ogg")
assert Mime.binary?(".ogv")
assert Mime.binary?(".otf")
assert Mime.binary?(".pfx")
assert Mime.binary?(".pigx")
assert Mime.binary?(".plgx")
assert Mime.binary?(".pptx")
assert Mime.binary?(".psd")
assert Mime.binary?(".sib")
assert Mime.binary?(".so")
assert Mime.binary?(".spl")
assert Mime.binary?(".sqlite3")
assert Mime.binary?(".swc")
assert Mime.binary?(".swf")
assert Mime.binary?(".tar")
assert Mime.binary?(".ucode")
assert Mime.binary?(".xpi")
assert Mime.binary?(".zip")
assert !Mime.binary?("application/atom+xml") assert !Mime.binary?("application/atom+xml")
assert !Mime.binary?("application/javascript") assert !Mime.binary?("application/javascript")
assert !Mime.binary?("application/json") assert !Mime.binary?("application/json")
@@ -68,97 +114,27 @@ class TestMime < Test::Unit::TestCase
assert !Mime.binary?("application/x-perl") assert !Mime.binary?("application/x-perl")
assert !Mime.binary?("application/x-python") assert !Mime.binary?("application/x-python")
assert !Mime.binary?("application/x-ruby") assert !Mime.binary?("application/x-ruby")
assert !Mime.binary?("application/xhtml+xml")
assert !Mime.binary?("application/xml")
assert !Mime.binary?("text/css")
assert !Mime.binary?("text/csv")
assert !Mime.binary?("text/html")
assert !Mime.binary?("text/javascript")
assert !Mime.binary?("text/plain")
assert !Mime.binary?(".js")
assert !Mime.binary?(".latex")
assert !Mime.binary?(".ms") assert !Mime.binary?(".ms")
assert !Mime.binary?(".nc") assert !Mime.binary?(".nc")
assert !Mime.binary?(".pl")
assert !Mime.binary?(".ps")
assert !Mime.binary?(".py")
assert !Mime.binary?(".rb")
assert !Mime.binary?(".sh")
assert !Mime.binary?(".src") assert !Mime.binary?(".src")
assert !Mime.binary?(".tcl")
assert !Mime.binary?(".texi")
assert !Mime.binary?(".texinfo")
assert !Mime.binary?(".xul") assert !Mime.binary?(".xul")
end end
def test_attachment
assert Mime.attachment?("application/octet-stream")
assert !Mime.attachment?("text/plain")
assert Mime.attachment?("application/java-archive")
assert Mime.attachment?("application/ogg")
assert Mime.attachment?("application/pdf")
assert Mime.attachment?("application/x-gzip")
assert Mime.attachment?("application/zip")
assert Mime.attachment?("audio/mp4")
assert Mime.attachment?(".a")
assert Mime.attachment?(".air")
assert Mime.attachment?(".blend")
assert Mime.attachment?(".crx")
assert Mime.attachment?(".deb")
assert Mime.attachment?(".dmg")
assert Mime.attachment?(".exe")
assert Mime.attachment?(".gem")
assert Mime.attachment?(".graffle")
assert Mime.attachment?(".gz")
assert Mime.attachment?(".icns")
assert Mime.attachment?(".ipa")
assert Mime.attachment?(".lib")
assert Mime.attachment?(".mcz")
assert Mime.attachment?(".mov")
assert Mime.attachment?(".mp3")
assert Mime.attachment?(".nib")
assert Mime.attachment?(".o")
assert Mime.attachment?(".odp")
assert Mime.attachment?(".ods")
assert Mime.attachment?(".odt")
assert Mime.attachment?(".ogg")
assert Mime.attachment?(".ogv")
assert Mime.attachment?(".otf")
assert Mime.attachment?(".pfx")
assert Mime.attachment?(".pigx")
assert Mime.attachment?(".plgx")
assert Mime.attachment?(".pptx")
assert Mime.attachment?(".psd")
assert Mime.attachment?(".sib")
assert Mime.attachment?(".so")
assert Mime.attachment?(".spl")
assert Mime.attachment?(".sqlite3")
assert Mime.attachment?(".swc")
assert Mime.attachment?(".swf")
assert Mime.attachment?(".tar")
assert Mime.attachment?(".ucode")
assert Mime.attachment?(".xpi")
assert Mime.attachment?(".zip")
assert !Mime.attachment?("application/atom+xml")
assert !Mime.attachment?("application/javascript")
assert !Mime.attachment?("application/json")
assert !Mime.attachment?("application/rdf+xml")
assert !Mime.attachment?("application/sh")
assert !Mime.attachment?("application/xhtml+xml")
assert !Mime.attachment?("application/xml")
assert !Mime.attachment?("image/gif")
assert !Mime.attachment?("image/jpeg")
assert !Mime.attachment?("image/png")
assert !Mime.attachment?("text/css")
assert !Mime.attachment?("text/csv")
assert !Mime.attachment?("text/html")
assert !Mime.attachment?("text/javascript")
assert !Mime.attachment?("text/plain")
assert !Mime.attachment?(".gif")
assert !Mime.attachment?(".jpeg")
assert !Mime.attachment?(".jpg")
assert !Mime.attachment?(".js")
assert !Mime.attachment?(".latex")
assert !Mime.attachment?(".ms")
assert !Mime.attachment?(".nc")
assert !Mime.attachment?(".pl")
assert !Mime.attachment?(".png")
assert !Mime.attachment?(".ps")
assert !Mime.attachment?(".py")
assert !Mime.attachment?(".rb")
assert !Mime.attachment?(".sh")
assert !Mime.attachment?(".src")
assert !Mime.attachment?(".tcl")
assert !Mime.attachment?(".texi")
assert !Mime.attachment?(".texinfo")
assert !Mime.attachment?(".xul")
end
end end