Sha256: 41cacec6465710fd6f707ba1acbddf1990b72aec2a1a955b26a505b4a796b9b3
Contents?: true
Size: 1.71 KB
Versions: 14
Compression:
Stored size: 1.71 KB
Contents
require 'pathname' module Bibliothecary # A representation of a file on the filesystem, with location information # and package manager information if needed. class FileInfo attr_reader :folder_path attr_reader :relative_path attr_reader :full_path attr_accessor :package_manager 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 contents = Bibliothecary.utf8_string(File.open(@full_path).read) end end end # 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. 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 def groupable? @package_manager&.groupable?(self) end end end
Version data entries
14 entries across 14 versions & 1 rubygems