diff --git a/lib/optimist.rb b/lib/optimist.rb index 6ce667d..54165d3 100644 --- a/lib/optimist.rb +++ b/lib/optimist.rb @@ -351,6 +351,7 @@ def method_missing(m, *_args) self[m] || self[m.to_s] end end + vals[:_stopped] = @stopped || false unless @stop_words.empty? vals end @@ -448,7 +449,10 @@ def each_arg(args) i = 0 until i >= args.length - return remains += args[i..-1] if @stop_words.member? args[i] + if @stop_words.member? args[i] + @stopped = true + return remains += args[i..-1] + end case args[i] when /^--$/ # arg terminator return remains += args[(i + 1)..-1] diff --git a/test/optimist/parser_test.rb b/test/optimist/parser_test.rb index 99d5c7b..b5cfb8f 100644 --- a/test/optimist/parser_test.rb +++ b/test/optimist/parser_test.rb @@ -876,6 +876,19 @@ def test_stopwords_with_short_args assert_equal @q.leftovers, [] end + def test_stopwords_stopped + @p.stop_on %w(sub-command-1) + opts = @p.parse %w(sub-command-1) + + assert_equal true, opts[:_stopped] + + @q = Parser.new + @q.stop_on %w(sub-command-1) + opts = @q.parse %w(sub-command-2) + + assert_equal false, opts[:_stopped] + end + def test_unknown_subcommand @p.opt :global_flag, "Global flag", :short => "-g", :type => :flag @p.opt :global_param, "Global parameter", :short => "-p", :default => 5