class Rails::Paths::Path
def children
def children keys = @root.keys.select { |k| k.include?(@current) } keys.delete(@current) @root.values_at(*keys.sort) end
def existent
def existent expanded.select { |f| File.exists?(f) } end
def existent_directories
def existent_directories expanded.select { |d| File.directory?(d) } end
def expand_dir(path, glob)
def expand_dir(path, glob) Dir.chdir(path) do Dir.glob(@glob).map { |file| File.join path, file }.sort end end
def expand_file(path, glob)
def expand_file(path, glob) Dir[File.join(path, glob)].sort end
def expanded
def expanded raise "You need to set a path root" unless @root.path result = [] each do |p| path = File.expand_path(p, @root.path) if @glob if File.directory? path result.concat expand_dir(path, @glob) else # FIXME: I think we can remove this branch, but I'm not sure. # Say the filesystem has this file: # # /tmp/foobar # # and someone adds this path: # # /tmp/foo # # with a glob of "*", then this function will return # # /tmp/foobar # # We need to figure out if that is desired behavior. result.concat expand_file(path, @glob) end else result << path end end result.uniq! result end
def first
def first expanded.first end
def initialize(root, current, *paths)
def initialize(root, current, *paths) options = paths.last.is_a?(::Hash) ? paths.pop : {} super(paths.flatten) @current = current @root = root @glob = options[:glob] options[:autoload_once] ? autoload_once! : skip_autoload_once! options[:eager_load] ? eager_load! : skip_eager_load! options[:autoload] ? autoload! : skip_autoload! options[:load_path] ? load_path! : skip_load_path! end
def last
def last expanded.last end