module Tangle::Mixin::Directory::Graph

Tangle::Graph mixin for loading a directory structure

Attributes

root_directory[R]

Private Instance Methods

initialize_kwarg_directory(options) click to toggle source
# File lib/tangle/mixin/directory.rb, line 43
def initialize_kwarg_directory(options)
  @root_directory = options.fetch(:root)
  @directory_loaders = options.fetch(:loaders)
  @follow_directory_links = options[:follow_links]
  @exclude_root = options[:exclude_root]
  load_directory_graph(@root_directory)
end
load_directory_graph(path, parent = nil) click to toggle source
# File lib/tangle/mixin/directory.rb, line 51
def load_directory_graph(path, parent = nil)
  return unless load_directory_object(path, parent)

  Dir.each_child(path) do |file|
    load_directory_graph(File.join(path, file), path)
  end
end
load_directory_object(path, parent = nil) click to toggle source

Load a filesystem object into the graph, returning true if the object was a directory (or link to one, and we're following links).

# File lib/tangle/mixin/directory.rb, line 62
def load_directory_object(path, parent = nil)
  if @exclude_root
    return true if path == @root_directory

    parent = nil if parent == @root_directory
  end

  try_directory_loaders(path, parent)
end
try_directory_loaders(path, parent) click to toggle source

Try each directory loader, returning true if the object has children to follow

# File lib/tangle/mixin/directory.rb, line 74
def try_directory_loaders(path, parent)
  stat = lstat = File.lstat(path)
  stat = File.stat(path) if lstat.symlink?

  @directory_loaders.any? do |loader|
    loader.to_proc.call(self, path: path, parent: parent,
                              lstat: lstat, stat: stat)
  end

  return if lstat.symlink? && !@follow_directory_links

  stat.directory?
end