mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
26d9bc0bd0
This reverts commit18d193bd08
, reversing changes made to7b8316f061
.
35 lines
921 B
Crystal
35 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
|