class Steep::Project::Pattern

def =~(path)

def =~(path)
  unless path.is_a?(Pathname)
    path = Pathname(path.to_s)
  end
  match?(path) && !ignore?(path)
end

def empty?

def empty?
  patterns.empty?
end

def ignore?(path)

def ignore?(path)
  test_string(path, ignores, ignore_prefixes)
end

def initialize(patterns:, ignores: [], ext:)

def initialize(patterns:, ignores: [], ext:)
  @patterns = patterns
  @ignores = ignores
  @ext = ext
  @prefixes = patterns.map do |pat|
    if pat == "." || pat == "./"
      ""
    else
      pat.delete_prefix("./").delete_suffix(File::Separator) << File::Separator
    end
  end
  @ignore_prefixes = ignores.map do |pat|
    if pat == "." || pat == "./"
      ""
    else
      pat.delete_prefix("./").delete_suffix(File::Separator) << File::Separator
    end
  end
end

def match?(path)

def match?(path)
  test_string(path, patterns, prefixes)
end

def test_string(path, patterns, prefixes)

def test_string(path, patterns, prefixes)
  string = path.to_s
  patterns.any? {|pat| File.fnmatch(pat, string, File::FNM_PATHNAME) } ||
    prefixes.any? {|prefix| File.fnmatch("#{prefix}**/*#{ext}", string, File::FNM_PATHNAME) }
end