From f7ec07680ccf859fd331d3fe7195afc366fc3741 Mon Sep 17 00:00:00 2001 From: Gautham Goli Date: Thu, 25 Oct 2018 21:43:49 +0530 Subject: [PATCH] cli_parser: Add support for short flag options --- Library/Homebrew/cli_parser.rb | 20 ++++++++++++-------- Library/Homebrew/test/cli_parser_spec.rb | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/Library/Homebrew/cli_parser.rb b/Library/Homebrew/cli_parser.rb index 7f98f7411d..b87c94721e 100644 --- a/Library/Homebrew/cli_parser.rb +++ b/Library/Homebrew/cli_parser.rb @@ -76,20 +76,24 @@ module Homebrew end end - def flag(name, description: nil, required_for: nil, depends_on: nil) - if name.end_with? "=" + def flag(*names, description: nil, required_for: nil, depends_on: nil) + if names.any? { |name| name.end_with? "=" } required = OptionParser::REQUIRED_ARGUMENT - name.chomp! "=" else required = OptionParser::OPTIONAL_ARGUMENT end - description = option_to_description(name) if description.nil? - process_option(name, description) - @parser.on(name, *wrap_option_desc(description), required) do |option_value| - Homebrew.args[option_to_name(name)] = option_value + names.map! { |name| name.chomp "=" } + description = option_to_description(*names) if description.nil? + process_option(*names, description) + @parser.on(*names, *wrap_option_desc(description), required) do |option_value| + names.each do |name| + Homebrew.args[option_to_name(name)] = option_value + end end - set_constraints(name, required_for: required_for, depends_on: depends_on) + names.each do |name| + set_constraints(name, required_for: required_for, depends_on: depends_on) + end end def conflicts(*options) diff --git a/Library/Homebrew/test/cli_parser_spec.rb b/Library/Homebrew/test/cli_parser_spec.rb index d3f3bc98bc..615e20d78e 100644 --- a/Library/Homebrew/test/cli_parser_spec.rb +++ b/Library/Homebrew/test/cli_parser_spec.rb @@ -76,6 +76,20 @@ describe Homebrew::CLI::Parser do end end + describe "test short flag options" do + subject(:parser) { + described_class.new do + flag "-f", "--filename=", description: "Name of the file" + end + } + + it "parses a short flag option with its argument" do + parser.parse(["--filename=random.txt"]) + expect(Homebrew.args.filename).to eq "random.txt" + expect(Homebrew.args.f).to eq "random.txt" + end + end + describe "test constraints for flag options" do subject(:parser) { described_class.new do