From a49819a73c85114e1674a735bf9808bf72bc1128 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Thu, 2 Jun 2011 12:29:56 -0500 Subject: [PATCH] Separate out language guessing --- lib/linguist/blob_helper.rb | 27 +++++++++++++++++++++------ lib/linguist/pathname.rb | 18 +++++++++++++++++- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb index 96b70a38..1d04de0e 100644 --- a/lib/linguist/blob_helper.rb +++ b/lib/linguist/blob_helper.rb @@ -224,7 +224,7 @@ module Linguist def indexable? if !text? false - elsif !Language.find_by_extension(extname) + elsif !language? false elsif !language.searchable? false @@ -262,28 +262,43 @@ module Linguist # # Returns a Language object def language + guess_language || Language['Text'] + end + + # Internal: Guess language + # + # Returns a Language or nil + def guess_language if text? # If its a header file (.h) try to guess the language if language = header_language language # See if there is a Language for the extension - elsif Language.find_by_extension(extname) - pathname.language + elsif language = Language.find_by_extension(extname) + language # Try to detect Language from shebang line elsif language = shebang_language language - # Default to Pathname#language else - pathname.language + nil end else - Language['Text'] + nil end end + # Internal: Has a language. + # + # Will return false if language was guessed to be Text. + # + # Returns true or false. + def language? + guess_language ? true : false + end + # Deprecated: Get the lexer of the blob. # # Returns a Lexer. diff --git a/lib/linguist/pathname.rb b/lib/linguist/pathname.rb index da6af487..956d41c7 100644 --- a/lib/linguist/pathname.rb +++ b/lib/linguist/pathname.rb @@ -68,6 +68,15 @@ module Linguist Language.find_by_extension(extname) || Language['Text'] end + # Internal: Has a language. + # + # Will return false if language was guessed to be Text. + # + # Returns true or false. + def language? + Language.find_by_extension(extname) ? true : false + end + # Deprecated: Get the lexer of the path # # Returns a Lexer. @@ -101,12 +110,19 @@ module Linguist @content_type ||= Mime.content_type_for(extname) 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 ||= Mime.attachment?(extname) + @attachment ||= language? ? false : Mime.attachment?(extname) end # Public: Get the Content-Disposition header value