1require 'optparse'
2
3class OptionParser::AC < OptionParser
4  private
5
6  def _check_ac_args(name, block)
7    unless /\A\w[-\w]*\z/ =~ name
8      raise ArgumentError, name
9    end
10    unless block
11      raise ArgumentError, "no block given", ParseError.filter_backtrace(caller)
12    end
13  end
14
15  def _ac_arg_enable(prefix, name, help_string, block)
16    _check_ac_args(name, block)
17
18    sdesc = []
19    ldesc = ["--#{prefix}-#{name}"]
20    desc = [help_string]
21    q = name.downcase
22    enable = Switch::NoArgument.new(nil, proc {true}, sdesc, ldesc, nil, desc, block)
23    disable = Switch::NoArgument.new(nil, proc {false}, sdesc, ldesc, nil, desc, block)
24    top.append(enable, [], ["enable-" + q], disable, ['disable-' + q])
25    enable
26  end
27
28  public
29
30  def ac_arg_enable(name, help_string, &block)
31    _ac_arg_enable("enable", name, help_string, block)
32  end
33
34  def ac_arg_disable(name, help_string, &block)
35    _ac_arg_enable("disable", name, help_string, block)
36  end
37
38  def ac_arg_with(name, help_string, &block)
39    _check_ac_args(name, block)
40
41    sdesc = []
42    ldesc = ["--with-#{name}"]
43    desc = [help_string]
44    q = name.downcase
45    with = Switch::PlacedArgument.new(*search(:atype, String), sdesc, ldesc, nil, desc, block)
46    without = Switch::NoArgument.new(nil, proc {}, sdesc, ldesc, nil, desc, block)
47    top.append(with, [], ["with-" + q], without, ['without-' + q])
48    with
49  end
50end
51