Replace Options.coerce with an alternate constructor
This commit is contained in:
		
							parent
							
								
									094c184b12
								
							
						
					
					
						commit
						268cd143be
					
				@ -24,6 +24,6 @@ module Dependable
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def options
 | 
			
		||||
    Options.coerce(tags - RESERVED_TAGS)
 | 
			
		||||
    Options.create(tags - RESERVED_TAGS)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -465,7 +465,7 @@ class FormulaInstaller
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def build_argv
 | 
			
		||||
    opts = Options.coerce(sanitized_ARGV_options)
 | 
			
		||||
    opts = Options.create(sanitized_ARGV_options)
 | 
			
		||||
    opts.concat(options)
 | 
			
		||||
    opts
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -53,6 +53,19 @@ class Options
 | 
			
		||||
  attr_reader :options
 | 
			
		||||
  protected :options
 | 
			
		||||
 | 
			
		||||
  def self.create(array)
 | 
			
		||||
    options = new
 | 
			
		||||
    array.each do |e|
 | 
			
		||||
      case e
 | 
			
		||||
      when /^-[^-]+$/
 | 
			
		||||
        e[1..-1].split(//).each { |o| options << Option.new(o) }
 | 
			
		||||
      else
 | 
			
		||||
        options << Option.new(e)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    options
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def initialize(*args)
 | 
			
		||||
    @options = Set.new(*args)
 | 
			
		||||
  end
 | 
			
		||||
@ -113,22 +126,4 @@ class Options
 | 
			
		||||
  def inspect
 | 
			
		||||
    "#<#{self.class.name}: #{to_a.inspect}>"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def self.coerce(arg)
 | 
			
		||||
    case arg
 | 
			
		||||
    when Array
 | 
			
		||||
      opts = new
 | 
			
		||||
      arg.each do |a|
 | 
			
		||||
        case a
 | 
			
		||||
        when /^-[^-]+$/
 | 
			
		||||
          a[1..-1].split(//).each { |o| opts << Option.new(o) }
 | 
			
		||||
        else
 | 
			
		||||
          opts << Option.new(a)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
      opts
 | 
			
		||||
    else
 | 
			
		||||
      raise TypeError, "Cannot convert #{arg.inspect} to Options"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@ class SoftwareSpec
 | 
			
		||||
    @bottle_specification = BottleSpecification.new
 | 
			
		||||
    @patches = []
 | 
			
		||||
    @options = Options.new
 | 
			
		||||
    @build = BuildOptions.new(Options.coerce(ARGV.options_only), options)
 | 
			
		||||
    @build = BuildOptions.new(Options.create(ARGV.options_only), options)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def owner= owner
 | 
			
		||||
 | 
			
		||||
@ -106,11 +106,11 @@ class Tab < OpenStruct
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def used_options
 | 
			
		||||
    Options.coerce(super)
 | 
			
		||||
    Options.create(super)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def unused_options
 | 
			
		||||
    Options.coerce(super)
 | 
			
		||||
    Options.create(super)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def cxxstdlib
 | 
			
		||||
 | 
			
		||||
@ -4,8 +4,8 @@ require "options"
 | 
			
		||||
 | 
			
		||||
class BuildOptionsTests < Homebrew::TestCase
 | 
			
		||||
  def setup
 | 
			
		||||
    args = Options.coerce(%w(--with-foo --with-bar --without-qux))
 | 
			
		||||
    opts = Options.coerce(%w(--with-foo --with-bar --without-baz --without-qux))
 | 
			
		||||
    args = Options.create(%w(--with-foo --with-bar --without-qux))
 | 
			
		||||
    opts = Options.create(%w(--with-foo --with-bar --without-baz --without-qux))
 | 
			
		||||
    @build = BuildOptions.new(args, opts)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -132,22 +132,18 @@ class OptionsTests < Homebrew::TestCase
 | 
			
		||||
    assert_equal [foo, bar, baz].sort, (@options | options).to_a.sort
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_coerce_with_array
 | 
			
		||||
  def test_create_with_array
 | 
			
		||||
    array = %w{--foo --bar}
 | 
			
		||||
    option1 = Option.new("foo")
 | 
			
		||||
    option2 = Option.new("bar")
 | 
			
		||||
    assert_equal [option1, option2].sort, Options.coerce(array).to_a.sort
 | 
			
		||||
    assert_equal [option1, option2].sort, Options.create(array).to_a.sort
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_coerce_raises_for_inappropriate_types
 | 
			
		||||
    assert_raises(TypeError) { Options.coerce(1) }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_coerce_splits_multiple_switches_with_single_dash
 | 
			
		||||
  def test_create_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
 | 
			
		||||
    assert_equal [verbose, debug].sort, Options.create(array).to_a.sort
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_copies_do_not_share_underlying_collection
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user