shard-ameba/src/ameba/glob_utils.cr
Sijawusz Pur Rahnama 19c370aee0
Misc refactors (#180)
* Optimize Severity#symbol

* Remove empty else branches

* Optimize map+compact/flatten calls

* Misc stylistic refactors
2021-01-11 20:13:58 +02:00

37 lines
939 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! { |p| p[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