diff options
| -rw-r--r-- | Library/Homebrew/options.rb | 16 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_options.rb | 7 | 
2 files changed, 21 insertions, 2 deletions
| diff --git a/Library/Homebrew/options.rb b/Library/Homebrew/options.rb index e10d9483e..d8783a9d6 100644 --- a/Library/Homebrew/options.rb +++ b/Library/Homebrew/options.rb @@ -1,3 +1,5 @@ +require 'set' +  class Option    include Comparable @@ -33,6 +35,8 @@ class Option    def split_name(name)      case name +    when /^[a-zA-Z]$/ +      [name, "-#{name}"]      when /^-[a-zA-Z]$/        [name[1..1], name]      when /^--(.+)$/ @@ -101,8 +105,16 @@ class Options      case arg      when self then arg      when Option then new << arg -    when Array then new(arg.map { |a| Option.new(a.to_s) }) -    else raise TypeError, "Cannot convert #{arg.inspect} to Options" +    when Array +      opts = arg.map do |arg| +        case arg +        when /^-[^-]+$/ then arg[1..-1].split(//) +        else arg +        end +      end.flatten +      new(opts.map { |o| Option.new(o) }) +    else +      raise TypeError, "Cannot convert #{arg.inspect} to Options"      end    end  end diff --git a/Library/Homebrew/test/test_options.rb b/Library/Homebrew/test/test_options.rb index 78edb408c..405ead73b 100644 --- a/Library/Homebrew/test/test_options.rb +++ b/Library/Homebrew/test/test_options.rb @@ -140,4 +140,11 @@ class OptionsTests < Test::Unit::TestCase    def test_coerce_raises_for_inappropriate_types      assert_raises(TypeError) { Options.coerce(1) }    end + +  def test_coerce_splits_multiple_switches_with_single_dash +    array = %w{-vd} +    verbose = Option.new("-v") +    debug = Option.new("-d") +    assert_equal [verbose, debug].sort, Options.coerce(array).to_a.sort +  end  end | 
