mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Extract BlobHelper mixin
This commit is contained in:
		| @@ -2,6 +2,7 @@ module Linguist | ||||
| end | ||||
|  | ||||
| require 'linguist/blob' | ||||
| require 'linguist/blob_helper' | ||||
| require 'linguist/language' | ||||
| require 'linguist/mime' | ||||
| require 'linguist/pathname' | ||||
|   | ||||
| @@ -1,11 +1,9 @@ | ||||
| require 'linguist/language' | ||||
| require 'linguist/mime' | ||||
| require 'linguist/pathname' | ||||
|  | ||||
| require 'escape_utils' | ||||
| require 'linguist/blob_helper' | ||||
|  | ||||
| module Linguist | ||||
|   class Blob | ||||
|     include BlobHelper | ||||
|  | ||||
|     def initialize(blob) | ||||
|       @blob = blob | ||||
|     end | ||||
| @@ -14,134 +12,12 @@ module Linguist | ||||
|       @blob.name | ||||
|     end | ||||
|  | ||||
|     def pathname | ||||
|       Pathname.new(name || "") | ||||
|     end | ||||
|  | ||||
|     def mime_type | ||||
|       Mime.lookup(pathname.extname) | ||||
|     end | ||||
|  | ||||
|     def disposition | ||||
|       case mime_type | ||||
|       when 'application/octet-stream', 'application/java-archive' | ||||
|         "attachment; filename=#{EscapeUtils.escape_url(pathname.basename)}" | ||||
|       else | ||||
|         'inline' | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     def data | ||||
|       @blob.data | ||||
|     end | ||||
|  | ||||
|     def lines | ||||
|       @lines ||= data ? data.split("\n", -1) : [] | ||||
|     end | ||||
|  | ||||
|     def size | ||||
|       @blob.size | ||||
|     end | ||||
|  | ||||
|     def loc | ||||
|       lines.size | ||||
|     end | ||||
|  | ||||
|     def sloc | ||||
|       lines.grep(/\S/).size | ||||
|     end | ||||
|  | ||||
|     def submodule? | ||||
|       defined?(Grit::Submodule) && @blob.kind_of?(Grit::Submodule) | ||||
|     end | ||||
|  | ||||
|     def binary? | ||||
|       mime_type == 'octet-stream' || !(text? || image?) | ||||
|     end | ||||
|  | ||||
|     def file? | ||||
|       image? || binary? | ||||
|     end | ||||
|  | ||||
|     def text? | ||||
|       return false if submodule? | ||||
|  | ||||
|       pathname.media_type == 'text' || | ||||
|         pathname.mime_type == 'application/json' | ||||
|     end | ||||
|  | ||||
|     def image? | ||||
|       ['.png', '.jpg', '.jpeg', '.gif'].include?(pathname.extname) | ||||
|     end | ||||
|  | ||||
|     MEGABYTE = 1024 * 1024 | ||||
|  | ||||
|     def large? | ||||
|       size.to_i > MEGABYTE | ||||
|     end | ||||
|  | ||||
|     def viewable? | ||||
|       !file? && !large? | ||||
|     end | ||||
|  | ||||
|     def language | ||||
|       if text? | ||||
|         shebang_language || pathname.language | ||||
|       else | ||||
|         Language['Text'] | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     def lexer | ||||
|       language.lexer | ||||
|     end | ||||
|  | ||||
|     def shebang_script | ||||
|       return if !text? || large? | ||||
|  | ||||
|       if (match = data.match(/(.+)\n?/)) && (bang = match[0]) =~ /^#!/ | ||||
|         bang.sub!(/^#! /, '#!') | ||||
|         tokens = bang.split(' ') | ||||
|         pieces = tokens.first.split('/') | ||||
|         if pieces.size > 1 | ||||
|           script = pieces.last | ||||
|         else | ||||
|           script = pieces.first.sub('#!', '') | ||||
|         end | ||||
|  | ||||
|         script = script == 'env' ? tokens[1] : script | ||||
|  | ||||
|         # python2.4 => python | ||||
|         if script =~ /((?:\d+\.?)+)/ | ||||
|           script.sub! $1, '' | ||||
|         end | ||||
|  | ||||
|         script | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     def shebang_language | ||||
|       if script = shebang_script | ||||
|         case script | ||||
|         when 'bash' | ||||
|           Language['Shell'] | ||||
|         when 'groovy' | ||||
|           Language['Java'] | ||||
|         when 'macruby' | ||||
|           Language['Ruby'] | ||||
|         when 'node' | ||||
|           Language['JavaScript'] | ||||
|         when 'rake' | ||||
|           Language['Ruby'] | ||||
|         when 'sh' | ||||
|           Language['Shell'] | ||||
|         when 'zsh' | ||||
|           Language['Shell'] | ||||
|         else | ||||
|           lang = Language.find_by_lexer(shebang_script) | ||||
|           lang != Language['Text'] ? lang : nil | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|   | ||||
							
								
								
									
										125
									
								
								lib/linguist/blob_helper.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								lib/linguist/blob_helper.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | ||||
| require 'linguist/language' | ||||
| require 'linguist/mime' | ||||
| require 'linguist/pathname' | ||||
|  | ||||
| require 'escape_utils' | ||||
|  | ||||
| module Linguist | ||||
|   module BlobHelper | ||||
|     def pathname | ||||
|       Pathname.new(name || "") | ||||
|     end | ||||
|  | ||||
|     def mime_type | ||||
|       @mime_type ||= Mime.lookup(pathname.extname) | ||||
|     end | ||||
|  | ||||
|     def disposition | ||||
|       case mime_type | ||||
|       when 'application/octet-stream', 'application/java-archive' | ||||
|         "attachment; filename=#{EscapeUtils.escape_url(pathname.basename)}" | ||||
|       else | ||||
|         'inline' | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     def lines | ||||
|       @lines ||= data ? data.split("\n", -1) : [] | ||||
|     end | ||||
|  | ||||
|     def loc | ||||
|       lines.size | ||||
|     end | ||||
|  | ||||
|     def sloc | ||||
|       lines.grep(/\S/).size | ||||
|     end | ||||
|  | ||||
|     def binary? | ||||
|       mime_type == 'octet-stream' || !(text? || image?) | ||||
|     end | ||||
|  | ||||
|     def file? | ||||
|       image? || binary? | ||||
|     end | ||||
|  | ||||
|     def text? | ||||
|       pathname.media_type == 'text' || | ||||
|         pathname.mime_type == 'application/json' | ||||
|     end | ||||
|  | ||||
|     def image? | ||||
|       ['.png', '.jpg', '.jpeg', '.gif'].include?(pathname.extname) | ||||
|     end | ||||
|  | ||||
|     MEGABYTE = 1024 * 1024 | ||||
|  | ||||
|     def large? | ||||
|       size.to_i > MEGABYTE | ||||
|     end | ||||
|  | ||||
|     def viewable? | ||||
|       !file? && !large? | ||||
|     end | ||||
|  | ||||
|     def language | ||||
|       if text? | ||||
|         shebang_language || pathname.language | ||||
|       else | ||||
|         Language['Text'] | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     def lexer | ||||
|       language.lexer | ||||
|     end | ||||
|  | ||||
|     def shebang_script | ||||
|       return if !text? || large? | ||||
|  | ||||
|       if (match = data.match(/(.+)\n?/)) && (bang = match[0]) =~ /^#!/ | ||||
|         bang.sub!(/^#! /, '#!') | ||||
|         tokens = bang.split(' ') | ||||
|         pieces = tokens.first.split('/') | ||||
|         if pieces.size > 1 | ||||
|           script = pieces.last | ||||
|         else | ||||
|           script = pieces.first.sub('#!', '') | ||||
|         end | ||||
|  | ||||
|         script = script == 'env' ? tokens[1] : script | ||||
|  | ||||
|         # python2.4 => python | ||||
|         if script =~ /((?:\d+\.?)+)/ | ||||
|           script.sub! $1, '' | ||||
|         end | ||||
|  | ||||
|         script | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     def shebang_language | ||||
|       if script = shebang_script | ||||
|         case script | ||||
|         when 'bash' | ||||
|           Language['Shell'] | ||||
|         when 'groovy' | ||||
|           Language['Java'] | ||||
|         when 'macruby' | ||||
|           Language['Ruby'] | ||||
|         when 'node' | ||||
|           Language['JavaScript'] | ||||
|         when 'rake' | ||||
|           Language['Ruby'] | ||||
|         when 'sh' | ||||
|           Language['Shell'] | ||||
|         when 'zsh' | ||||
|           Language['Shell'] | ||||
|         else | ||||
|           lang = Language.find_by_lexer(shebang_script) | ||||
|           lang != Language['Text'] ? lang : nil | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
		Reference in New Issue
	
	Block a user