cli_args: Fix options_only and flags_only

This commit is contained in:
Gautham Goli 2019-09-22 20:13:11 +05:30
parent 39dabb4171
commit d18b122272
3 changed files with 58 additions and 0 deletions

View File

@ -5,12 +5,48 @@ require "ostruct"
module Homebrew module Homebrew
module CLI module CLI
class Args < OpenStruct class Args < OpenStruct
attr_accessor :processed_options
# undefine tap to allow --tap argument # undefine tap to allow --tap argument
undef tap undef tap
def initialize(argv:) def initialize(argv:)
super super
@argv = argv @argv = argv
@processed_options = []
end
def option_to_name(option)
option.sub(/\A--?/, "")
.tr("-", "_")
end
def cli_args
return @cli_args unless @cli_args.nil?
@cli_args = []
processed_options.each do |short, long|
option = long || short
switch = "#{option_to_name(option)}?".to_sym
flag = option_to_name(option).to_sym
if @table[switch].instance_of? TrueClass
@cli_args << option
elsif @table[flag].instance_of? TrueClass
@cli_args << option
elsif @table[flag].instance_of? String
@cli_args << option + "=" + @table[flag]
elsif @table[flag].instance_of? Array
@cli_args << option + "=" + @table[flag].join(",")
end
end
@cli_args
end
def options_only
@options_only ||= cli_args.select { |arg| arg.start_with?("-") }
end
def flags_only
@flags_only ||= cli_args.select { |arg| arg.start_with?("--") }
end end
end end
end end

View File

@ -139,6 +139,7 @@ module Homebrew
check_constraint_violations check_constraint_violations
@args[:remaining] = remaining_args @args[:remaining] = remaining_args
@args_parsed = true @args_parsed = true
@args.processed_options = @processed_options
Homebrew.args = @args Homebrew.args = @args
cmdline_args.freeze cmdline_args.freeze
@parser @parser

View File

@ -210,4 +210,25 @@ describe Homebrew::CLI::Parser do
expect { parser.parse(["--switch-b"]) }.to raise_error(RuntimeError, /Arguments were already parsed!/) expect { parser.parse(["--switch-b"]) }.to raise_error(RuntimeError, /Arguments were already parsed!/)
end end
end end
describe "test argv extensions" do
subject(:parser) {
described_class.new do
switch "--foo"
flag "--bar"
switch "-s"
switch :verbose
end
}
it "#options_only" do
parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"])
expect(Homebrew.args.options_only).to eq %w[--foo --bar=value -s --verbose]
end
it "#flags_only" do
parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"])
expect(Homebrew.args.flags_only).to eq %w[--foo --bar=value --verbose]
end
end
end end