Feature #8269 ยป 8269_Find_each_file.patch
| lib/find.rb | ||
|---|---|---|
|   end | ||
|   # | ||
|   # Recursively iterates over every file and directory listed as arguments, | ||
|   # calling the associated block with the name of every file encountered. | ||
|   # | ||
|   # Returns an enumerator if no block is given. | ||
|   # | ||
|   def each_file(*paths) # :yield: path | ||
|     block_given? or return enum_for(__method__, *paths) | ||
|     self.find(*paths){|f| yield f if File.file? f } | ||
|   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 | ||
| ... | ... | |
|     throw :prune | ||
|   end | ||
|   module_function :find, :prune | ||
|   module_function :find, :each_file, :prune | ||
| end | ||
| test/test_find.rb | ||
|---|---|---|
|     } | ||
|   end | ||
|   def test_each_file | ||
|     Dir.mktmpdir {|d| | ||
|       File.open("#{d}/a", "w"){} | ||
|       Dir.mkdir("#{d}/b") | ||
|       File.open("#{d}/b/a", "w"){} | ||
|       File.open("#{d}/b/b", "w"){} | ||
|       Dir.mkdir("#{d}/c") | ||
|       a = [] | ||
|       Find.each_file(d) {|f| a << f } | ||
|       assert_equal(["#{d}/a", "#{d}/b/a", "#{d}/b/b"], a) | ||
|     } | ||
|   end | ||
|   def test_each_file_enumerator | ||
|     Dir.mktmpdir {|d| | ||
|       File.open("#{d}/a", "w"){} | ||
|       Dir.mkdir("#{d}/b") | ||
|       File.open("#{d}/b/a", "w"){} | ||
|       File.open("#{d}/b/b", "w"){} | ||
|       Dir.mkdir("#{d}/c") | ||
|       e = Find.each_file(d) | ||
|       a = [] | ||
|       e.each {|f| a << f } | ||
|       assert_equal(["#{d}/a", "#{d}/b/a", "#{d}/b/b"], a) | ||
|     } | ||
|   end | ||
|   class TestInclude < Test::Unit::TestCase | ||
|     include Find | ||