This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
module FileUtils
|
||||
|
||||
module_function
|
||||
|
||||
# An intergrated glob like method that takes a set of include globs,
|
||||
# exclude globs and ignore globs to produce a collection of paths.
|
||||
#
|
||||
# The ignore_globs differ from exclude_globs in that they match by
|
||||
# the basename of the path rather than the whole pathname.
|
||||
#
|
||||
# TODO: Should ignore be based on any portion of the path, not just the basename?
|
||||
#
|
||||
def amass(include_globs, exclude_globs=[], ignore=[])
|
||||
|
||||
include_files = [include_globs].flatten.map{ |g| Dir.glob(g) }.flatten.uniq
|
||||
exclude_files = [exclude_globs].flatten.map{ |g| Dir.glob(g) }.flatten.uniq
|
||||
|
||||
include_files = include_files.map{ |f| File.directory?(f) ? File.join(f, '**/*') : f } # Recursive!
|
||||
exclude_files = exclude_files.map{ |f| File.directory?(f) ? File.join(f, '**/*') : f } # Recursive!
|
||||
|
||||
include_files = include_files.flatten.map{ |g| Dir.glob(g) }.flatten.uniq
|
||||
exclude_files = exclude_files.flatten.map{ |g| Dir.glob(g) }.flatten.uniq
|
||||
|
||||
files = include_files - exclude_files
|
||||
|
||||
files = files.reject{ |f| [ignore].flatten.any?{ |x| File.fnmatch?(x, File.basename(f)) } }
|
||||
|
||||
files
|
||||
end
|
||||
|
||||
# Make public (for all submodules too).
|
||||
public :amass
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user