mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
72 lines
1.6 KiB
Ruby
72 lines
1.6 KiB
Ruby
require 'linguist/blob_helper'
|
|
|
|
module Linguist
|
|
# A FileBlob is a wrapper around a File object to make it quack
|
|
# like a Grit::Blob. It provides the basic interface: `name`,
|
|
# `data`, and `size`.
|
|
class FileBlob
|
|
include BlobHelper
|
|
|
|
# Public: Initialize a new FileBlob from a path
|
|
#
|
|
# path - A path String that exists on the file system.
|
|
# base_path - Optional base to relativize the path
|
|
#
|
|
# Returns a FileBlob.
|
|
def initialize(path, base_path = nil)
|
|
@path = path
|
|
@name = base_path ? path.sub("#{base_path}/", '') : path
|
|
end
|
|
|
|
# Public: Filename
|
|
#
|
|
# Examples
|
|
#
|
|
# FileBlob.new("/path/to/linguist/lib/linguist.rb").name
|
|
# # => "/path/to/linguist/lib/linguist.rb"
|
|
#
|
|
# FileBlob.new("/path/to/linguist/lib/linguist.rb",
|
|
# "/path/to/linguist").name
|
|
# # => "lib/linguist.rb"
|
|
#
|
|
# Returns a String
|
|
attr_reader :name
|
|
|
|
# Public: Read file permissions
|
|
#
|
|
# Returns a String like '100644'
|
|
def mode
|
|
File.stat(@path).mode.to_s(8)
|
|
end
|
|
|
|
# Public: Read file contents.
|
|
#
|
|
# Returns a String.
|
|
def data
|
|
File.read(@path)
|
|
end
|
|
|
|
# Public: Get byte size
|
|
#
|
|
# Returns an Integer.
|
|
def size
|
|
File.size(@path)
|
|
end
|
|
|
|
# Public: Get file extension.
|
|
#
|
|
# Returns a String.
|
|
def extension
|
|
# File.extname returns nil if the filename is an extension.
|
|
extension = File.extname(name)
|
|
basename = File.basename(name)
|
|
# Checks if the filename is an extension.
|
|
if extension.empty? && basename[0] == "."
|
|
basename
|
|
else
|
|
extension
|
|
end
|
|
end
|
|
end
|
|
end
|