shard-ameba/src/ameba/glob_utils.cr
Sijawusz Pur Rahnama 26d9bc0bd0 Revert "Merge pull request #394 from stufro/388-raise-on-invalid-file-path"
This reverts commit 18d193bd08, reversing
changes made to 7b8316f061.
2023-12-28 02:03:44 +01:00

36 lines
921 B
Crystal

module Ameba
# Helper module that is utilizes helpers for working with globs.
module GlobUtils
# Returns all files that match specified globs.
# Globs can have wildcards or be rejected:
#
# ```
# find_files_by_globs(["**/*.cr", "!lib"])
# ```
def find_files_by_globs(globs)
rejected = rejected_globs(globs)
selected = globs - rejected
expand(selected) - expand(rejected.map!(&.[1..-1]))
end
# Expands globs. Globs can point to files or even directories.
#
# ```
# expand(["spec/*.cr", "src"]) # => all files in src folder + first level specs
# ```
def expand(globs)
globs.flat_map do |glob|
glob += "/**/*.cr" if File.directory?(glob)
Dir[glob]
end.uniq!
end
private def rejected_globs(globs)
globs.select do |glob|
glob.starts_with?('!') && !File.exists?(glob)
end
end
end
end