Sha256: bfcca5480cdf8062156795e3ee93155bd1bfaced698b1796465de6495809bfbf

Contents?: true

Size: 1.56 KB

Versions: 1

Compression:

Stored size: 1.56 KB

Contents

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)
      # Guard against unintentionally shelling out (leading '|') and path
      # traversal
      full_path = path.start_with?('/') ? path : File.join(Dir.pwd, path)
      if path.start_with?('|') || File.absolute_path(full_path) != full_path
        raise "Invalid path: #{path}"
      end

      @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
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gitlab-linguist-3.0.1 lib/linguist/file_blob.rb