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 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
  extension = path.extname
  patterns.any? {|pat| File.fnmatch(pat, string) } ||
    prefixes.any? {|prefix| string.start_with?(prefix) && extension == ext }
end