From 40efc2bd4414243a7b49b9e28667c36e1416671a Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Fri, 3 Jun 2011 10:44:21 -0500 Subject: [PATCH] Use mime binary --- lib/linguist/blob_helper.rb | 20 ++++++++++---------- lib/linguist/pathname.rb | 7 +++++++ test/test_blob.rb | 5 +++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb index 0f16d69c..d6f18852 100644 --- a/lib/linguist/blob_helper.rb +++ b/lib/linguist/blob_helper.rb @@ -62,18 +62,25 @@ module Linguist # # Returns a content disposition String. def disposition - if viewable? + if image? || viewable? 'inline' else "attachment; filename=#{EscapeUtils.escape_url(pathname.basename)}" end end + # Public: Is the blob binary? + # + # Return true or false + def binary? + pathname.binary? + end + # Public: Is the blob text? # # Return true or false def text? - content_type[/(text|json)/] + !binary? end # Public: Is the blob a supported image format? @@ -83,13 +90,6 @@ module Linguist ['.png', '.jpg', '.jpeg', '.gif'].include?(extname) end - # Public: Is the blob binary? - # - # Return true or false - def binary? - content_type.include?('octet') || !(text? || image?) - end - MEGABYTE = 1024 * 1024 # Public: Is the blob too big to load? @@ -105,7 +105,7 @@ module Linguist # # Return true or false def viewable? - !image? && !binary? && !large? + text? && !large? end vendored_paths = YAML.load_file(File.expand_path("../vendor.yml", __FILE__)) diff --git a/lib/linguist/pathname.rb b/lib/linguist/pathname.rb index 31a84a4b..3272427c 100644 --- a/lib/linguist/pathname.rb +++ b/lib/linguist/pathname.rb @@ -110,6 +110,13 @@ module Linguist @content_type ||= Mime.content_type_for(extname) end + # Public: Is the path binary? + # + # Return true or false + def binary? + @binary ||= Mime.binary?(extname) + end + def to_s @path.dup end diff --git a/test/test_blob.rb b/test/test_blob.rb index 24e8001b..867a29f4 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -43,9 +43,10 @@ class TestBlob < Test::Unit::TestCase assert_equal "attachment; filename=foo.bin", blob("foo.bin").disposition assert_equal "attachment; filename=linguist.gem", blob("pkg/linguist.gem").disposition assert_equal "attachment; filename=foo+bar.jar", blob("foo bar.jar").disposition + assert_equal "inline", blob("README").disposition assert_equal "inline", blob("foo.txt").disposition assert_equal "inline", blob("grit.rb").disposition - assert_equal "inline", blob("README").disposition + assert_equal "inline", blob("octocat.png").disposition end def test_data @@ -72,10 +73,10 @@ class TestBlob < Test::Unit::TestCase assert blob("linguist.gem").binary? assert blob("git.deb").binary? assert blob("git.exe").binary? + assert blob("octocat.png").binary? assert !blob("README").binary? assert !blob("file.txt").binary? assert !blob("foo.rb").binary? - assert !blob("octocat.png").binary? assert !blob("script.pl").binary? end