Cache ARGV calcs

Means unshift doesn't work, but well, that's almost a feature :P
This commit is contained in:
Max Howell 2009-09-05 14:30:56 +01:00
parent a4ba1c137f
commit e30c1c8850
2 changed files with 16 additions and 9 deletions

View File

@ -23,23 +23,22 @@
# #
module HomebrewArgvExtension module HomebrewArgvExtension
def named def named
nn=namedp raise UsageError if _named.empty?
raise UsageError if nn.empty? _named
nn
end end
def named_empty? def named_empty?
namedp.empty? _named.empty?
end end
def options def options
select {|arg| arg[0..0] == '-'} select {|arg| arg[0..0] == '-'}
end end
def formulae def formulae
require 'formula' require 'formula'
named.collect {|name| Formula.factory name} @formulae ||= named.collect {|name| Formula.factory name}
end end
def kegs def kegs
require 'keg' require 'keg'
named.collect do |name| @kegs ||= named.collect do |name|
d=HOMEBREW_CELLAR+name d=HOMEBREW_CELLAR+name
raise "#{name} is not installed" if not d.directory? or d.children.length == 0 raise "#{name} is not installed" if not d.directory? or d.children.length == 0
raise "#{name} has multiple installed versions" if d.children.length > 1 raise "#{name} has multiple installed versions" if d.children.length > 1
@ -99,8 +98,8 @@ To visit the Homebrew homepage type:
end end
private private
def namedp def _named
nn=reject{|arg| arg[0..0] == '-'}.collect{|arg| arg.downcase}.uniq @named ||= reject{|arg| arg[0..0] == '-'}.collect{|arg| arg.downcase}.uniq
end end
end end

View File

@ -105,6 +105,14 @@ def nostdout
end end
end end
module ExtendArgvPlusYeast
def stick_an_arg_in_thar
@named=nil
unshift 'foo'
end
end
ARGV.extend ExtendArgvPlusYeast
class BeerTasting <Test::Unit::TestCase class BeerTasting <Test::Unit::TestCase
def test_version_all_dots def test_version_all_dots
@ -316,7 +324,7 @@ class BeerTasting <Test::Unit::TestCase
(HOMEBREW_CELLAR+'foo'+'0.1').mkpath (HOMEBREW_CELLAR+'foo'+'0.1').mkpath
ARGV.unshift 'foo' ARGV.stick_an_arg_in_thar
assert_equal 1, ARGV.named.length assert_equal 1, ARGV.named.length
assert_equal 1, ARGV.kegs.length assert_equal 1, ARGV.kegs.length
assert_raises(FormulaUnavailableError) { ARGV.formulae } assert_raises(FormulaUnavailableError) { ARGV.formulae }