class Utils::Grepper

def initialize(opts = {})

def initialize(opts = {})
  @args  = opts[:args] || {}
  @roots = opts[:roots] || []
  @config = opts[:config] || Utils::Config::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'],
  }
  @pattern = @args['R'] ?
    FuzzyPattern.new(pattern_opts) :
    RegexpPattern.new(pattern_opts)
  @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