diff options
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/build_environment.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/dependencies.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/extend/object.rb | 15 | ||||
| -rw-r--r-- | Library/Homebrew/global.rb | 1 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_build_environment.rb | 14 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_object.rb | 20 | 
6 files changed, 53 insertions, 3 deletions
diff --git a/Library/Homebrew/build_environment.rb b/Library/Homebrew/build_environment.rb index 18876f954..60e099977 100644 --- a/Library/Homebrew/build_environment.rb +++ b/Library/Homebrew/build_environment.rb @@ -18,9 +18,9 @@ class BuildEnvironment      @settings.include? :userpaths    end -  def modify_build_environment +  def modify_build_environment(context=nil)      p = @settings.find { |s| Proc === s } -    ENV.instance_eval(&p) unless p.nil? +    ENV.instance_exec(context, &p) unless p.nil?    end    def _dump(*) diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index c2dd63d7d..54de50f39 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -190,7 +190,7 @@ class Requirement    # Overriding modify_build_environment is deprecated, pass a block to    # the env DSL method instead.    def modify_build_environment -    env.modify_build_environment +    env.modify_build_environment(self)    end    def env diff --git a/Library/Homebrew/extend/object.rb b/Library/Homebrew/extend/object.rb new file mode 100644 index 000000000..8ffe5dc90 --- /dev/null +++ b/Library/Homebrew/extend/object.rb @@ -0,0 +1,15 @@ +class Object +  def instance_exec(*args, &block) +    method_name = :__temp_instance_exec_method +    singleton_class = (class << self; self; end) +    singleton_class.class_eval do +      define_method(method_name, &block) +    end + +    send(method_name, *args) +  ensure +    singleton_class.class_eval do +      remove_method(method_name) if method_defined?(method_name) +    end +  end unless method_defined?(:instance_exec) +end diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index 6440506f8..50d30e877 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -3,6 +3,7 @@ require 'extend/pathname'  require 'extend/ARGV'  require 'extend/string'  require 'extend/symbol' +require 'extend/object'  require 'utils'  require 'exceptions'  require 'set' diff --git a/Library/Homebrew/test/test_build_environment.rb b/Library/Homebrew/test/test_build_environment.rb index d8a227f51..6710662b5 100644 --- a/Library/Homebrew/test/test_build_environment.rb +++ b/Library/Homebrew/test/test_build_environment.rb @@ -31,6 +31,20 @@ class BuildEnvironmentTests < Test::Unit::TestCase      dump = Marshal.dump(@env)      assert Marshal.load(dump).userpaths?    end + +  def test_env_block +    foo = mock("foo") +    @env << Proc.new { foo.some_message } +    foo.expects(:some_message) +    @env.modify_build_environment +  end + +  def test_env_block_with_argument +    foo = mock("foo") +    @env << Proc.new { |x| x.some_message } +    foo.expects(:some_message) +    @env.modify_build_environment(foo) +  end  end  class BuildEnvironmentDSLTests < Test::Unit::TestCase diff --git a/Library/Homebrew/test/test_object.rb b/Library/Homebrew/test/test_object.rb new file mode 100644 index 000000000..debdd6c42 --- /dev/null +++ b/Library/Homebrew/test/test_object.rb @@ -0,0 +1,20 @@ +require 'testing_env' +require 'extend/object' + +class InstanceExecTests < Test::Unit::TestCase +  def test_evaluates_in_context_of_receiver +    assert_equal 1, [1].instance_exec { first } +  end + +  def test_passes_arguments_to_block +    assert_equal 2, [1].instance_exec(1) { |x| first + x } +  end + +  def test_does_not_persist_temporary_singleton_method +    obj = Object.new +    before = obj.methods +    obj.instance_exec { methods } +    after = obj.methods +    assert_equal before, after +  end +end  | 
