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