From: merch-redmine@... Date: 2019-07-11T02:00:04+00:00 Subject: [ruby-core:93656] [Ruby master Bug#10021] OptParse does not handle missing arguments bracketed by valid option switches Issue #10021 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Open to Closed I believe this is the intended behavior. You are using a required argument for the `-r` option, so for `--re-run x --rerun y -r --debug` the `-r` option arguments are `['x', 'y', '--debug']`, with no regular arguments. For `--re-run x -r --rerun y`, the `-r` option arguments are `['x', '--rerun']`, with remaining arguments `['y']`. For `--re-run x -r --rerun y -- file`, the `-r` option arguments are `['x', '--rerun']`, with remaining arguments `['y', 'file']` It sounds like you want to use an optional argument: ```ruby opts.on("-r", "--rerun [DATEorTRANSACTION]", "--re-run [DATEorTRANSACTION]"){|rr|} ``` With an optional argument, for `--re-run x --rerun y -r --debug` the '-r' option arguments are `['x', 'y', nil]`, with a `--debug` option and no regular arguments. For `--re-run x -r --rerun y`, the `-r` option arguments are `['x', nil, 'y']`, with no remaining arguments. For `--re-run x -r --rerun y -- file`, the `-r` option arguments are `['x', nil, 'y']`, with remaining arguments `['file']` ---------------------------------------- Bug #10021: OptParse does not handle missing arguments bracketed by valid option switches https://bugs.ruby-lang.org/issues/10021#change-79266 * Author: byrnejb (James Byrne) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: Ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux-gnu] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- OS=CentOS-6.5 x86_64 Ruby=2.1.2p95 I have this in an optparse structure: # Create parser opts = OptionParser.new do |opts| opts.banner = <<-BANNER . . . opts.on("-r", "--rerun=DATEorTRANSACTION", "--re-run=DATEorTRANSACTION", "Re-run extract for specific date (yyyymmdd)", " or transaction number (SSSSSNNNNNNNNC).", " Multiple specifications are ORed for selections.", " All billable transactions are selectable", " whether previously billed or not.", " Sets and enforces --no-update" ) do |rr| options.rerun << rr options.update = false end . . . If I run a program incorporating this option class so: --re-run x --rerun y -r Then I see this: missing argument: -r However, if I do this: --re-run x --rerun y -r --debug or this --re-run x -r --rerun y Then the program runs and does not report the missing argument. Is this the intended behaviour? It does not seem correct to me. -- https://bugs.ruby-lang.org/ Unsubscribe: