class Bibliothecary::FileInfo

A representation of a file on the filesystem, with location information and package manager information if needed.

Attributes

folder_path[R]
full_path[R]
package_manager[RW]
relative_path[R]

Public Class Methods

new(folder_path, full_path, contents = nil) click to toggle source

If the FileInfo represents an actual file on disk, the contents can be nil and lazy-loaded; we allow contents to be passed in here to allow pulling them from somewhere other than the disk.

# File lib/bibliothecary/file_info.rb, line 29
def initialize(folder_path, full_path, contents = nil)
  # Note that cleanpath does NOT touch the filesystem,
  # leaving the lazy-load of file contents as the only
  # time we touch the filesystem.

  full_pathname = Pathname.new(full_path)
  @full_path = full_pathname.cleanpath.to_path

  if folder_path.nil?
    # this is the case where we e.g. have filenames from the GitHub API
    # and don't have a local folder
    @folder_path = nil
    @relative_path = @full_path
  else
    folder_pathname = Pathname.new(folder_path)
    @folder_path = folder_pathname.cleanpath.to_path
    @relative_path = full_pathname.relative_path_from(folder_pathname).cleanpath.to_path
  end

  @contents = contents

  @package_manager = nil
end

Public Instance Methods

contents() click to toggle source
# File lib/bibliothecary/file_info.rb, line 12
def contents
  @contents ||=
    begin
      if @folder_path.nil?
        # if we have no folder_path then we aren't dealing with a
        # file that's actually on the filesystem
        nil
      else
        Bibliothecary.utf8_string(File.open(@full_path).read)
      end
    end
end
groupable?() click to toggle source
# File lib/bibliothecary/file_info.rb, line 53
def groupable?
  @package_manager&.groupable?(self)
end