class Tins::Find::Finder
def find(*paths)
def find(*paths) block_given? or return enum_for(__method__, *paths) paths.collect! { |d| d.dup } while path = paths.shift path = prepare_path(path) catch(:prune) do path.stat or next yield path if path.stat.directory? begin ps = Dir.entries(path) rescue EXPECTED_STANDARD_ERRORS @raise_errors ? raise : next end ps.sort! ps.reverse_each do |p| next if p == "." or p == ".." next if !@show_hidden && p.start_with?('.') p = File.join(path, p) paths.unshift p.untaint end end end end end
def initialize(opts = {})
def initialize(opts = {}) @show_hidden = opts.fetch(:show_hidden) { true } @raise_errors = opts.fetch(:raise_errors) { false } @follow_symlinks = opts.fetch(:follow_symlinks) { true } end
def prepare_path(path)
def prepare_path(path) path = path.dup.taint path.extend PathExtension path.finder = self path end