Only store one proc per BuildEnvironment instance

This commit is contained in:
Jack Nagel 2014-07-07 17:34:30 -05:00
parent 9e7f5dc261
commit 879ec96743
2 changed files with 8 additions and 10 deletions

View File

@ -1,9 +1,10 @@
require 'set' require 'set'
class BuildEnvironment class BuildEnvironment
attr_accessor :proc
def initialize(*settings) def initialize(*settings)
@settings = Set.new(settings) @settings = Set.new(settings)
@procs = Set.new
end end
def merge(*args) def merge(*args)
@ -11,10 +12,7 @@ class BuildEnvironment
end end
def <<(o) def <<(o)
case o @settings << o
when Proc then @procs << o
else @settings << o
end
self self
end end
@ -27,7 +25,7 @@ class BuildEnvironment
end end
def modify_build_environment(receiver) def modify_build_environment(receiver)
@procs.each { |p| receiver.instance_eval(&p) } receiver.instance_eval(&proc)
end end
def _dump(*) def _dump(*)
@ -43,7 +41,7 @@ module BuildEnvironmentDSL
def env(*settings, &block) def env(*settings, &block)
@env ||= BuildEnvironment.new @env ||= BuildEnvironment.new
if block_given? if block_given?
@env << block @env.proc = block
else else
@env.merge(settings) @env.merge(settings)
end end

View File

@ -21,7 +21,7 @@ class BuildEnvironmentTests < Homebrew::TestCase
end end
def test_modify_build_environment def test_modify_build_environment
@env << Proc.new { raise StandardError } @env.proc = Proc.new { raise StandardError }
assert_raises(StandardError) do assert_raises(StandardError) do
@env.modify_build_environment(self) @env.modify_build_environment(self)
end end
@ -36,14 +36,14 @@ class BuildEnvironmentTests < Homebrew::TestCase
def test_env_block def test_env_block
foo = mock("foo") foo = mock("foo")
@env << Proc.new { foo.some_message } @env.proc = Proc.new { foo.some_message }
foo.expects(:some_message) foo.expects(:some_message)
@env.modify_build_environment(self) @env.modify_build_environment(self)
end end
def test_env_block_with_argument def test_env_block_with_argument
foo = mock("foo") foo = mock("foo")
@env << Proc.new { |x| x.some_message } @env.proc = Proc.new { |x| x.some_message }
foo.expects(:some_message) foo.expects(:some_message)
@env.modify_build_environment(foo) @env.modify_build_environment(foo)
end end