class Utils::Grepper

def initialize(opts = {})

def initialize(opts = {})
  @args  = opts[:args] || {}
  @roots = discover_roots(opts[:roots])
  @config = opts[:config] || Utils::ConfigFile.new
  if n = @args.values_at(*%w[A B C]).compact.first
    if n.to_s =~ /\A\d+\Z/ and (n = n.to_i) >= 1
      @queue = Queue.new n
    else
      raise ArgumentError, "needs to be an integer number >= 1"
    end
  end
  @paths  = []
  pattern_opts = opts.subhash(:pattern) | {
    :cset  => @args[?a],
    :icase => @args[?i] != ?n,
  }
  @pattern = choose(@args[?p], pattern_opts, default: ?r)
  @name_pattern =
    if name_pattern = @args[?N]
      RegexpPattern.new(:pattern => name_pattern)
    elsif name_pattern = @args[?n]
      FuzzyPattern.new(:pattern => name_pattern)
    end
  @skip_pattern =
    if skip_pattern = @args[?S]
      RegexpPattern.new(:pattern => skip_pattern)
    elsif skip_pattern = @args[?s]
      FuzzyPattern.new(:pattern => skip_pattern)
    end
end