mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	The second negative argument to split instructs it to preserve null fields in the returned array
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'linguist/blob_helper'
 | |
| 
 | |
| module Linguist
 | |
|   # A Blob is a wrapper around the content of a file to make it quack
 | |
|   # like a Grit::Blob. It provides the basic interface: `name`,
 | |
|   # `data`, `path` and `size`.
 | |
|   class Blob
 | |
|     include BlobHelper
 | |
| 
 | |
|     # Public: Initialize a new Blob.
 | |
|     #
 | |
|     # path    - A path String (does not necessarily exists on the file system).
 | |
|     # content - Content of the file.
 | |
|     #
 | |
|     # Returns a Blob.
 | |
|     def initialize(path, content)
 | |
|       @path = path
 | |
|       @content = content
 | |
|     end
 | |
| 
 | |
|     # Public: Filename
 | |
|     #
 | |
|     # Examples
 | |
|     #
 | |
|     #   Blob.new("/path/to/linguist/lib/linguist.rb", "").path
 | |
|     #   # =>  "/path/to/linguist/lib/linguist.rb"
 | |
|     #
 | |
|     # Returns a String
 | |
|     attr_reader :path
 | |
| 
 | |
|     # Public: File name
 | |
|     #
 | |
|     # Returns a String
 | |
|     def name
 | |
|       File.basename(@path)
 | |
|     end
 | |
| 
 | |
|     # Public: File contents.
 | |
|     #
 | |
|     # Returns a String.
 | |
|     def data
 | |
|       @content
 | |
|     end
 | |
| 
 | |
|     # Public: Get byte size
 | |
|     #
 | |
|     # Returns an Integer.
 | |
|     def size
 | |
|       @content.bytesize
 | |
|     end
 | |
| 
 | |
|     # Public: Get file extension.
 | |
|     #
 | |
|     # Returns a String.
 | |
|     def extension
 | |
|       extensions.last || ""
 | |
|     end
 | |
| 
 | |
|     # Public: Return an array of the file extensions
 | |
|     #
 | |
|     #     >> Linguist::Blob.new("app/views/things/index.html.erb").extensions
 | |
|     #     => [".html.erb", ".erb"]
 | |
|     #
 | |
|     # Returns an Array
 | |
|     def extensions
 | |
|       _, *segments = name.downcase.split(".", -1)
 | |
| 
 | |
|       segments.map.with_index do |segment, index|
 | |
|         "." + segments[index..-1].join(".")
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |