diff options
Diffstat (limited to 'Library/Homebrew/options.rb')
| -rw-r--r-- | Library/Homebrew/options.rb | 34 | 
1 files changed, 32 insertions, 2 deletions
| diff --git a/Library/Homebrew/options.rb b/Library/Homebrew/options.rb index 10abc1fae..e10d9483e 100644 --- a/Library/Homebrew/options.rb +++ b/Library/Homebrew/options.rb @@ -4,9 +4,8 @@ class Option    attr_reader :name, :description, :flag    def initialize(name, description=nil) -    @name = name.to_s[/^(?:--)?(.+)$/, 1] +    @name, @flag = split_name(name)      @description = description.to_s -    @flag = "--#{@name}"    end    def to_s @@ -29,6 +28,19 @@ class Option    def hash      name.hash    end + +  private + +  def split_name(name) +    case name +    when /^-[a-zA-Z]$/ +      [name[1..1], name] +    when /^--(.+)$/ +      [$1, name] +    else +      [name, "--#{name}"] +    end +  end  end  class Options @@ -55,6 +67,10 @@ class Options      Options.new(@options - o)    end +  def &(o) +    Options.new(@options & o) +  end +    def *(arg)      @options.to_a * arg    end @@ -71,8 +87,22 @@ class Options      any? { |opt| opt == o || opt.name == o || opt.flag == o }    end +  def concat(o) +    o.each { |opt| @options << opt } +    self +  end +    def to_a      @options.to_a    end    alias_method :to_ary, :to_a + +  def self.coerce(arg) +    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" +    end +  end  end | 
