class Chef::ChefFS::FileSystem::Lister
Attributes
Public Class Methods
Source
# File lib/chef/chef_fs/file_system.rb, line 43 def initialize(root, pattern) @root = root @pattern = pattern end
Public Instance Methods
Source
# File lib/chef/chef_fs/file_system.rb, line 51 def each(&block) list_from(root, &block) end
Source
# File lib/chef/chef_fs/file_system.rb, line 55 def list_from(entry, &block) # Include self in results if it matches if pattern.match?(entry.display_path) yield(entry) end if pattern.could_match_children?(entry.display_path) # If it's possible that our children could match, descend in and add matches. exact_child_name = pattern.exact_child_name_under(entry.display_path) # If we've got an exact name, don't bother listing children; just grab the # child with the given name. if exact_child_name exact_child = entry.child(exact_child_name) if exact_child list_from(exact_child, &block) end # Otherwise, go through all children and find any matches elsif entry.dir? results = entry.children.parallel_map { |child| Chef::ChefFS::FileSystem.list(child, pattern) } results.flat_each(&block) end end end