Вы указали, что опция -v
не имеет аргумента:
opts.on("-v", ...
Если вы хотите принять аргумент, вы должны сказать так:
opts.on("-v n", "--verbose=n", ...
#-----------^
А если вы хотите, чтобы n
было целым числом, тогда:
opts.on('-v n', '--verbose=n', OptionParser::DecimalInteger, ...
Вы хотите начать чтение с документов make_switch
(как оно есть), а затем выполнить обратный инжиниринг примеров.
Не расстраивайтесь из-за путаницы, документация OptionParser - не самая лучшая вещь.