39 lines
1.1 KiB
Ruby
39 lines
1.1 KiB
Ruby
class Pathname
|
|
|
|
# Recursively visit a directory located by its path, yielding each resource
|
|
# as its full matching pathname object. If called on a file, yield the file.
|
|
#
|
|
# call-seq:
|
|
# visit => yield each file
|
|
# visit(all: true) => yield visited directories as well
|
|
# visit(hidden: true) => yield hidden files and directories as well
|
|
#
|
|
# Examples
|
|
#
|
|
# # Locate any file but *.haml within app/**/*
|
|
# Pathname.new("app").visit do |f|
|
|
# next unless f.to_s =~ /\.haml$/
|
|
# f
|
|
# end
|
|
#
|
|
# TODO: Use #map instead of #each?
|
|
#
|
|
# CREDIT: Jean-Denis Vauguet
|
|
|
|
def visit(options = {:all => false, :hidden => false})
|
|
if self.directory?
|
|
children.each do |entry|
|
|
next if entry.basename.to_s[0] == "." && !options[:hidden]
|
|
yield(entry) unless entry.directory? && !options[:all]
|
|
##entry.visit(:all => options[:all]) { |sub_entry| yield sub_entry } if entry.directory?
|
|
entry.visit(:all => options[:all], :hidden => options[:hidden]) do |sub_entry|
|
|
yield(sub_entry)
|
|
end if entry.directory?
|
|
end
|
|
else
|
|
yield self
|
|
end
|
|
end
|
|
|
|
end
|