Sha256: 44666fa704dd6a983ce68cf461ce9c6cdc2846db5c12a33e9bb98208654a3d48

Contents?: true

Size: 1.53 KB

Versions: 37

Compression:

Stored size: 1.53 KB

Contents

module Utils
  module Find
    #
    # Calls the associated block with the name of every file and directory listed
    # as arguments, then recursively on their subdirectories, and so on.
    #
    # See the +Find+ module documentation for an example.
    #
    def find(*paths) # :yield: path
      paths.collect!{|d| d.dup}
      while file = paths.shift
        catch(:prune) do
          yield file.dup.taint
          next unless File.exist? file
          begin
            if File.stat(file).directory? then
              d = Dir.open(file)
              begin
                for f in d
                  next if f == "." or f == ".."
                  if File::ALT_SEPARATOR and file =~ /^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then
                    f = file + f
                  elsif file == "/" then
                    f = "/" + f
                  else
                    f = File.join(file, f)
                  end
                  paths.unshift f.untaint
                end
              ensure
                d.close
              end
            end
          rescue Errno::ENOENT, Errno::EACCES
          end
        end
      end
    end

    #
    # Skips the current file or directory, restarting the loop with the next
    # entry. If the current file is a directory, that directory will not be
    # recursively entered. Meaningful only within the block associated with
    # Find::find.
    #
    # See the +Find+ module documentation for an example.
    #
    def prune
      throw :prune
    end

    module_function :find, :prune
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
utils-0.0.39 lib/utils/find.rb
utils-0.0.38 lib/utils/find.rb
utils-0.0.37 lib/utils/find.rb
utils-0.0.36 lib/utils/find.rb
utils-0.0.35 lib/utils/find.rb
utils-0.0.34 lib/utils/find.rb
utils-0.0.33 lib/utils/find.rb
utils-0.0.32 lib/utils/find.rb
utils-0.0.31 lib/utils/find.rb
utils-0.0.30 lib/utils/find.rb
utils-0.0.29 lib/utils/find.rb
utils-0.0.28 lib/utils/find.rb
utils-0.0.27 lib/utils/find.rb
utils-0.0.26 lib/utils/find.rb
utils-0.0.25 lib/utils/find.rb
utils-0.0.24 lib/utils/find.rb
utils-0.0.23 lib/utils/find.rb
utils-0.0.22 lib/utils/find.rb
utils-0.0.21 lib/utils/find.rb
utils-0.0.20 lib/utils/find.rb